diff --git a/Plugins/Mineplex.BungeeRotator/pom.xml b/Plugins/Mineplex.BungeeRotator/pom.xml index 886fee649..9801eb0d2 100644 --- a/Plugins/Mineplex.BungeeRotator/pom.xml +++ b/Plugins/Mineplex.BungeeRotator/pom.xml @@ -23,15 +23,6 @@ org.apache.cxf cxf-bundle - - org.apache.ws.security - wss4j - - - org.apache.httpcomponents - httpcore - 4.4.5 - @@ -47,6 +38,36 @@ + + org.apache.maven.plugins + maven-shade-plugin + 2.4 + + + package + + shade + + + true + + + org.apache.commons:commons-pool2 + + ** + + + + commons-logging:commons-logging + + ** + + + + + + + diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java index 2dd88a8e3..12ff80b05 100644 --- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java +++ b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java @@ -40,16 +40,7 @@ public class BungeeRotator private static boolean _debug = false; public static void main(String args[]) - { - try - { - Class.forName("com.mysql.jdbc.Driver"); - } - catch (ClassNotFoundException e1) - { - e1.printStackTrace(); - } - + { try { FileHandler fileHandler = new FileHandler("rotator.log", true); diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Constants.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Constants.java new file mode 100644 index 000000000..050927e52 --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Constants.java @@ -0,0 +1,7 @@ +package mineplex.core.common; + +public class Constants +{ + public static final String WEB_ADDRESS = "http://accounts.mineplex.com/"; + public static final String WEB_CONFIG_KEY = "webServer"; +} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index ee6eed0df..f39918d7d 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -6,6 +6,25 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import net.minecraft.server.v1_8_R3.AxisAlignedBB; +import net.minecraft.server.v1_8_R3.EntityBat; +import net.minecraft.server.v1_8_R3.EntityCreature; +import net.minecraft.server.v1_8_R3.EntityEnderDragon; +import net.minecraft.server.v1_8_R3.EntityHuman; +import net.minecraft.server.v1_8_R3.EntityInsentient; +import net.minecraft.server.v1_8_R3.EntityLiving; +import net.minecraft.server.v1_8_R3.EntityTrackerEntry; +import net.minecraft.server.v1_8_R3.NBTTagCompound; +import net.minecraft.server.v1_8_R3.NavigationAbstract; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityHeadRotation; +import net.minecraft.server.v1_8_R3.PathfinderGoal; +import net.minecraft.server.v1_8_R3.PathfinderGoalLookAtPlayer; +import net.minecraft.server.v1_8_R3.PathfinderGoalMoveTowardsRestriction; +import net.minecraft.server.v1_8_R3.PathfinderGoalRandomLookaround; +import net.minecraft.server.v1_8_R3.PathfinderGoalSelector; +import net.minecraft.server.v1_8_R3.WorldServer; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -29,24 +48,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.util.Vector; -import net.minecraft.server.v1_8_R3.AxisAlignedBB; -import net.minecraft.server.v1_8_R3.EntityBat; -import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.EntityEnderDragon; -import net.minecraft.server.v1_8_R3.EntityHuman; -import net.minecraft.server.v1_8_R3.EntityInsentient; -import net.minecraft.server.v1_8_R3.EntityLiving; -import net.minecraft.server.v1_8_R3.EntityTrackerEntry; -import net.minecraft.server.v1_8_R3.NavigationAbstract; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntity; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityHeadRotation; -import net.minecraft.server.v1_8_R3.PathfinderGoal; -import net.minecraft.server.v1_8_R3.PathfinderGoalLookAtPlayer; -import net.minecraft.server.v1_8_R3.PathfinderGoalMoveTowardsRestriction; -import net.minecraft.server.v1_8_R3.PathfinderGoalRandomLookaround; -import net.minecraft.server.v1_8_R3.PathfinderGoalSelector; -import net.minecraft.server.v1_8_R3.WorldServer; - public class UtilEnt { @@ -67,7 +68,13 @@ public class UtilEnt public static void silence(Entity entity, boolean silence) { - ((CraftEntity)entity).getHandle().setSilent(silence); + net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); + NBTTagCompound tag = new NBTTagCompound(); + nmsEntity.c(tag); + tag.setByte("Silent", (byte) ((silence) ? 1 : 0)); + nmsEntity.f(tag); + // Not working right now + //((CraftEntity)entity).getHandle().setSilent(silence); } public static void ghost(Entity entity, boolean ghost, boolean invisible) @@ -81,7 +88,7 @@ public class UtilEnt ((CraftEntity)entity).getHandle().setInvisible(invisible); } - public static void Leash(LivingEntity leashed, Entity holder, boolean pull, boolean breakable) + public static void leash(LivingEntity leashed, Entity holder, boolean pull, boolean breakable) { leashed.setLeashHolder(holder); @@ -191,12 +198,12 @@ public class UtilEnt return box.b(box2); } - public static void Vegetate(Entity entity) + public static void vegetate(Entity entity) { - Vegetate(entity, false); + vegetate(entity, false); } - public static void Vegetate(Entity entity, boolean mute) + public static void vegetate(Entity entity, boolean mute) { try { diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index 1444f7d43..0945ad7fd 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -7,6 +7,7 @@ import net.minecraft.server.v1_8_R3.EnumParticle; import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; import org.bukkit.Color; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -272,6 +273,8 @@ public class UtilParticle public static void playParticleFor(Player player, ParticleType type, Location location, Vector offset, float speed, int count, ViewDist dist) { + if (player.getGameMode() == GameMode.SPECTATOR) + return; float x = 0; float y = 0; float z = 0; @@ -289,6 +292,8 @@ public class UtilParticle public static void playParticleFor(Player player, ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count, ViewDist dist) { + if (player.getGameMode() == GameMode.SPECTATOR) + return; List players = new ArrayList<>(UtilServer.getPlayersCollection()); players.removeIf(other -> !other.canSee(player)); PlayParticle(type.particleName, location, offsetX, offsetY, offsetZ, speed, count, dist, players.toArray(new Player[0])); @@ -296,6 +301,8 @@ public class UtilParticle public static void playParticleFor(Player player, String particle, Location location, Vector offset, float speed, int count, ViewDist dist) { + if (player.getGameMode() == GameMode.SPECTATOR) + return; float x = 0; float y = 0; float z = 0; @@ -313,6 +320,8 @@ public class UtilParticle public static void playParticleFor(Player player, String particle, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count, ViewDist dist) { + if (player.getGameMode() == GameMode.SPECTATOR) + return; List players = new ArrayList<>(UtilServer.getPlayersCollection()); players.removeIf(other -> !other.canSee(player)); PlayParticle(particle, location, offsetX, offsetY, offsetZ, speed, count, dist, players.toArray(new Player[0])); diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java index c6e1edcdc..722b7f174 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java @@ -2,6 +2,7 @@ package mineplex.core.common.util; import com.google.common.collect.Lists; +import mineplex.core.common.Constants; import mineplex.core.common.events.PlayerRecieveBroadcastEvent; import mineplex.serverdata.Region; @@ -18,11 +19,18 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import java.io.File; import java.lang.reflect.Field; import java.util.*; public class UtilServer { + private static boolean TEST_OVERRIDE = false; + + static { + TEST_OVERRIDE = new File("TEST_OVERRIDE.dat").exists(); + } + public static Player[] getPlayers() { return getServer().getOnlinePlayers().toArray(new Player[0]); @@ -151,7 +159,12 @@ public class UtilServer public static boolean isTestServer() { - return getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); + return isTestServer(true); + } + + public static boolean isTestServer(boolean bypass) + { + return getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing") || (bypass && TEST_OVERRIDE); } public static boolean isDevServer() @@ -197,7 +210,7 @@ public class UtilServer public static String getWebServerURL() { - return getPlugin().getConfig().getString("webServer"); + return getPlugin().getConfig().getString(Constants.WEB_CONFIG_KEY); } public static BukkitTask runAsync(Runnable runnable) diff --git a/Plugins/Mineplex.Core/pom.xml b/Plugins/Mineplex.Core/pom.xml index a2d2f6e3e..afbd561ec 100644 --- a/Plugins/Mineplex.Core/pom.xml +++ b/Plugins/Mineplex.Core/pom.xml @@ -60,6 +60,11 @@ core 3.3.0 + + junit + junit + test + diff --git a/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java b/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java index 631c05202..223b31351 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java @@ -7,6 +7,9 @@ import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.lifetimes.Lifetime; +import mineplex.core.lifetimes.Lifetimed; +import mineplex.core.lifetimes.SimpleLifetime; import mineplex.core.thread.ThreadPool; import org.bukkit.Bukkit; @@ -27,12 +30,16 @@ import org.bukkit.scheduler.BukkitTask; *

* This way, we can reflectively create them during {@link #require} when they do not exist, leading to much cleaner code */ -public abstract class MiniPlugin implements Listener +public abstract class MiniPlugin implements Listener, Lifetimed { + // As MiniPlugins can technically be disabled at any time, each + // has its own unique Lifetime. If MiniPlugins are declared + // to never be able to be disabled, then a "Singleton" Lifetime + // could be shared between all of them. + private final SimpleLifetime _lifetime = new SimpleLifetime(); protected String _moduleName = "Default"; protected JavaPlugin _plugin; - protected NautHashMap _commands; - + protected long _initializedTime; public MiniPlugin(String moduleName) @@ -47,8 +54,7 @@ public abstract class MiniPlugin implements Listener _initializedTime = System.currentTimeMillis(); - _commands = new NautHashMap<>(); - + _lifetime.start(); onEnable(); registerEvents(this); @@ -146,7 +152,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }); } @@ -163,7 +170,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }, time); } @@ -180,7 +188,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }, time, period); } @@ -197,7 +206,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }); } @@ -214,7 +224,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }, delay); } @@ -236,7 +247,8 @@ public abstract class MiniPlugin implements Listener } catch (Throwable t) { - throw new RuntimeException(exception); + exception.initCause(t); + throw new RuntimeException("Exception while executing MiniPlugin task", exception); } }, delay, period); } @@ -250,4 +262,10 @@ public abstract class MiniPlugin implements Listener { return Managers.require(clazz); } + + @Override + public Lifetime getLifetime() + { + return _lifetime; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java index 7afa65772..379dc217d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java @@ -68,12 +68,6 @@ public class CoreClient return _accountId; } - public void Delete() - { - _name = null; - _player = null; - } - public void setAccountId(int accountId) { _accountId = accountId; @@ -214,4 +208,16 @@ public class CoreClient return getDisguisedAs(); return getName(); } + + @Override + public String toString() + { + return "CoreClient{" + + "_accountId=" + _accountId + + ", _name='" + _name + '\'' + + ", _uuid=" + _uuid + + ", _player=" + _player + + ", _rank=" + _rank + + '}'; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java index d6414e463..13828828f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java @@ -8,6 +8,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -26,6 +27,7 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; +import com.google.common.collect.Sets; import com.google.gson.Gson; import mineplex.cache.player.PlayerCache; @@ -65,17 +67,19 @@ public class CoreClientManager extends MiniPlugin private final Rank WHITELIST_BYPASS; - public CoreClientManager(JavaPlugin plugin, String webServer) + private final Set _reservedSlots = Sets.newConcurrentHashSet(); + + public CoreClientManager(JavaPlugin plugin) { - this(plugin, webServer, Rank.MODERATOR); + this(plugin, Rank.MODERATOR); } - public CoreClientManager(JavaPlugin plugin, String webServer, Rank whitelistBypass) + public CoreClientManager(JavaPlugin plugin, Rank whitelistBypass) { super("Client Manager", plugin); _plugin = plugin; - _repository = new AccountRepository(plugin, webServer); + _repository = new AccountRepository(); WHITELIST_BYPASS = whitelistBypass; } @@ -102,11 +106,6 @@ public class CoreClientManager extends MiniPlugin oldClient = _clientList.put(uuid, newClient); } - if (oldClient != null) - { - oldClient.Delete(); - } - return newClient; } @@ -259,7 +258,9 @@ public class CoreClientManager extends MiniPlugin if (uuid == null) { - uuid = UtilGameProfile.getProfileByName(playerName, false, profile -> {}).get().getId(); + uuid = UtilGameProfile.getProfileByName(playerName, false, profile -> + { + }).get().getId(); } String response = ""; @@ -481,8 +482,10 @@ public class CoreClientManager extends MiniPlugin client.SetPlayer(event.getPlayer()); + _reservedSlots.remove(event.getPlayer().getUniqueId()); + // Reserved Slot Check - if (Bukkit.getOnlinePlayers().size() >= Bukkit.getServer().getMaxPlayers()) + if (Bukkit.getOnlinePlayers().size() + _reservedSlots.size() >= Bukkit.getServer().getMaxPlayers()) { if (client.GetRank().has(event.getPlayer(), Rank.ULTRA, false)) { @@ -495,6 +498,16 @@ public class CoreClientManager extends MiniPlugin } } + public void reserveFor(UUID player) + { + this._reservedSlots.add(player); + } + + public void unreserve(UUID uuid) + { + _reservedSlots.remove(uuid); + } + @EventHandler public void Kick(PlayerKickEvent event) { @@ -689,4 +702,4 @@ public class CoreClientManager extends MiniPlugin return client.GetRank().has(rank); } -} \ No newline at end of file +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/command/TestRank.java b/Plugins/Mineplex.Core/src/mineplex/core/account/command/TestRank.java index 9387b2cf2..e4ab7147e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/command/TestRank.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/command/TestRank.java @@ -7,6 +7,7 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -27,10 +28,8 @@ public class TestRank extends CommandBase UtilPlayer.message(caller, F.main("Permissions", "This requires Permission Rank [" + Rank.SNR_MODERATOR.getTag(false, true) + C.cGray + "].")); return; } - - boolean testServer = Plugin.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); - if (!testServer) + if (!UtilServer.isTestServer()) { UtilPlayer.message(caller, F.main(Plugin.getName(), F.elem("This command can only be used on test servers!"))); return; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java index 2db750b6c..ac5d9bba0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java @@ -4,7 +4,6 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -13,45 +12,39 @@ import java.util.stream.Collectors; import org.apache.commons.dbcp2.BasicDataSource; import org.bukkit.Bukkit; -import com.google.gson.reflect.TypeToken; import org.bukkit.plugin.java.JavaPlugin; +import com.google.gson.reflect.TypeToken; + import mineplex.cache.player.PlayerCache; import mineplex.core.account.ILoginProcessor; import mineplex.core.account.repository.token.LoginToken; import mineplex.core.account.repository.token.RankUpdateToken; import mineplex.core.common.Rank; import mineplex.core.common.util.Callback; +import mineplex.core.common.util.UtilServer; import mineplex.core.database.MinecraftRepository; -import mineplex.core.server.remotecall.JsonWebCall; import mineplex.serverdata.database.DBPool; -import mineplex.serverdata.database.DatabaseRunnable; import mineplex.serverdata.database.ResultSetCallable; -import mineplex.serverdata.database.column.ColumnBoolean; -import mineplex.serverdata.database.column.ColumnTimestamp; import mineplex.serverdata.database.column.ColumnVarChar; public class AccountRepository extends MinecraftRepository -{ +{ private static String CREATE_ACCOUNT_TABLE = "CREATE TABLE IF NOT EXISTS accounts (id INT NOT NULL AUTO_INCREMENT, uuid VARCHAR(100), name VARCHAR(40), gems INT, rank VARCHAR(40), rankPerm BOOL, rankExpire LONG, lastLogin LONG, totalPlayTime LONG, PRIMARY KEY (id), UNIQUE INDEX uuidIndex (uuid), UNIQUE INDEX nameIndex (name), INDEX rankIndex (rank));"; - private static String ACCOUNT_LOGIN_NEW = "INSERT INTO accounts (uuid, name, lastLogin) values(?, ?, now());"; + private static String ACCOUNT_LOGIN_NEW = "INSERT INTO accounts (uuid, name, lastLogin) values(?, ?, now());"; private static String UPDATE_ACCOUNT_RANK = "UPDATE accounts SET rank=?, rankPerm=false, rankExpire=now() + INTERVAL 1 MONTH WHERE uuid = ?;"; private static String UPDATE_ACCOUNT_RANK_DONOR = "UPDATE accounts SET rank=?, donorRank=?, rankPerm=false, rankExpire=now() + INTERVAL 1 MONTH WHERE uuid = ?;"; private static String UPDATE_ACCOUNT_RANK_PERM = "UPDATE accounts SET rank=?, rankPerm=true WHERE uuid = ?;"; private static String UPDATE_ACCOUNT_RANK_DONOR_PERM = "UPDATE accounts SET rank=?, donorRank=?, rankPerm=true WHERE uuid = ?;"; - + private static String SELECT_ACCOUNT_UUID_BY_NAME = "SELECT uuid FROM accounts WHERE name = ? ORDER BY lastLogin DESC;"; private static String SELECT_ACCOUNT_ID_BY_UUID = "SELECT id FROM accounts WHERE accounts.uuid = ? LIMIT 1"; - - private String _webAddress; - - public AccountRepository(JavaPlugin plugin, String webAddress) + + public AccountRepository() { super(DBPool.getAccount()); - - _webAddress = webAddress; } - + public int login(final List loginProcessors, final UUID uuid, final String name) throws SQLException { // First we try to grab the account id from cache - this saves an extra trip to database @@ -105,7 +98,7 @@ public class AccountRepository extends MinecraftRepository statement.execute(loginString); System.out.println("EXECUTE COMPLETE - " + accountId); - + statement.getUpdateCount(); statement.getMoreResults(); @@ -126,20 +119,21 @@ public class AccountRepository extends MinecraftRepository } } } - - + + return accountId; } public void getAccountId(UUID uuid, Callback callback) { - executeQuery(SELECT_ACCOUNT_ID_BY_UUID, resultSet -> { + executeQuery(SELECT_ACCOUNT_ID_BY_UUID, resultSet -> + { int accountId = -1; while (resultSet.next()) accountId = resultSet.getInt(1); callback.run(accountId); }, new ColumnVarChar("uuid", 100, uuid.toString())); } - + public String GetClient(String name, UUID uuid, String ipAddress) { LoginToken token = new LoginToken(); @@ -147,18 +141,18 @@ public class AccountRepository extends MinecraftRepository token.Uuid = uuid.toString(); token.IpAddress = ipAddress; - return new JsonWebCall(_webAddress + "PlayerAccount/Login").ExecuteReturnStream(token); + return handleSyncMSSQLCallStream("PlayerAccount/Login", token); } - + public String getClientByUUID(UUID uuid) { - return new JsonWebCall(_webAddress + "PlayerAccount/GetAccountByUUID").ExecuteReturnStream(uuid.toString()); + return handleSyncMSSQLCallStream("PlayerAccount/GetAccountByUUID", uuid.toString()); } public UUID getClientUUID(String name) { final List uuids = new ArrayList(); - + executeQuery(SELECT_ACCOUNT_UUID_BY_NAME, new ResultSetCallable() { @Override @@ -170,20 +164,20 @@ public class AccountRepository extends MinecraftRepository } } }, new ColumnVarChar("name", 100, name)); - + if (uuids.size() > 0) return uuids.get(0); else return null; } - + public void saveRank(final Callback callback, final String name, final UUID uuid, final Rank rank, final boolean perm) { final RankUpdateToken token = new RankUpdateToken(); token.Name = name; token.Rank = rank.toString(); token.Perm = perm; - + final Consumer extraCallback = response -> { if (rank == Rank.ULTRA || rank == Rank.HERO || rank == Rank.LEGEND || rank == Rank.TITAN) @@ -208,36 +202,23 @@ public class AccountRepository extends MinecraftRepository executeUpdate(UPDATE_ACCOUNT_RANK, new ColumnVarChar("rank", 100, rank.toString()), new ColumnVarChar("uuid", 100, uuid.toString())); } - Bukkit.getServer().getScheduler().runTask(getPlugin(), new Runnable() + UtilServer.runSync(() -> { - @Override - public void run() - { - if (callback != null) - callback.run(response); - } + if (callback != null) + callback.run(response); }); }; handleMSSQLCall("PlayerAccount/RankUpdate", String.format("Error saving %s's rank: ", token.Name), token, Rank.class, extraCallback); } - + public void matchPlayerName(final Callback> callback, final String userName) { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - List tokenList = new JsonWebCall(_webAddress + "PlayerAccount/GetMatches").Execute(new TypeToken>(){}.getType(), userName); - callback.run(tokenList); - } - }); - - asyncThread.start(); + handleMSSQLCall("PlayerAccount/GetMatches", userName, new TypeToken>(){}.getType(), callback::run); } public String getClientByName(String playerName) { - return new JsonWebCall(_webAddress + "PlayerAccount/GetAccount").ExecuteReturnStream(playerName); + return handleSyncMSSQLCallStream("PlayerAccount/GetAccount", playerName); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/banwave/BanWaveRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/banwave/BanWaveRepository.java index baf39fe4e..6e987061f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/banwave/BanWaveRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/banwave/BanWaveRepository.java @@ -3,11 +3,12 @@ package mineplex.core.antihack.banwave; import mineplex.core.common.util.Callback; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnLong; import mineplex.serverdata.database.column.ColumnVarChar; -public class BanWaveRepository extends MinecraftRepository +public class BanWaveRepository extends RepositoryBase { private static final String INITIALIZE_PENDING_TABLE = "CREATE TABLE IF NOT EXISTS banwavePending (" + "accountId INT(11) NOT NULL, " + diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AnticheatDatabase.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AnticheatDatabase.java index d366a548a..e89dd893c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AnticheatDatabase.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AnticheatDatabase.java @@ -6,8 +6,9 @@ import java.sql.SQLException; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; -public class AnticheatDatabase extends MinecraftRepository +public class AnticheatDatabase extends RepositoryBase { /* CREATE TABLE IF NOT EXISTS anticheat_ban_metadata (id INT NOT NULL AUTO_INCREMENT, accountId INT, banId CHAR(10) NOT NULL, data MEDIUMTEXT NOT NULL, PRIMARY KEY(id)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AntihackLogger.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AntihackLogger.java index b5dafd513..3c3cc03ef 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AntihackLogger.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/AntihackLogger.java @@ -60,7 +60,6 @@ public class AntihackLogger extends MiniPlugin registerMetadata(new PlayerInfoMetadata()); } - @EventHandler public void addCommands() { if (UtilServer.isTestServer()) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/PartyInfoMetadata.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/PartyInfoMetadata.java index 9ffba8361..5b56687d8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/PartyInfoMetadata.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/PartyInfoMetadata.java @@ -28,14 +28,14 @@ public class PartyInfoMetadata extends AnticheatMetadata @Override public JsonElement build(UUID player) { - Party party = require(PartyManager.class).getPlayerParties().get(player); + Party party = require(PartyManager.class).getPartyByPlayer(player); if (party != null) { JsonObject partyData = new JsonObject(); - partyData.addProperty(KEY_OWNER, party.getOwner()); + partyData.addProperty(KEY_OWNER, party.getOwnerName()); JsonArray members = new JsonArray(); - party.getMembers().forEach(m -> members.add(new JsonPrimitive(m))); + party.getMembers().forEach(m -> members.add(new JsonPrimitive(m.getName()))); partyData.add(KEY_MEMBERS, members); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/PlayerInputActionMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/PlayerInputActionMenu.java index 2976e2b00..8d3dc55bf 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/PlayerInputActionMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/PlayerInputActionMenu.java @@ -34,13 +34,11 @@ public abstract class PlayerInputActionMenu implements Listener protected Inventory _currentInventory; protected String _itemName = ""; protected boolean _searching; - protected Party _party; - public PlayerInputActionMenu(MiniPlugin plugin, Player player, Party party) + public PlayerInputActionMenu(MiniPlugin plugin, Player player) { _player = player; _plugin = plugin; - _party = party; player.closeInventory(); _plugin.registerEvents(this); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/player/PlayerNameMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/player/PlayerNameMenu.java index ab4999c54..dd6762645 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/player/PlayerNameMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/anvilMenu/player/PlayerNameMenu.java @@ -11,8 +11,6 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; -import static net.minecraft.server.v1_8_R3.PotionBrewer.n; - /** * A wrapped menu that handles looking for players specifically. */ @@ -21,9 +19,9 @@ public abstract class PlayerNameMenu extends PlayerInputActionMenu protected CoreClientManager _clientManager; - public PlayerNameMenu(MiniPlugin plugin, CoreClientManager clientManager, Player player, Party party) + public PlayerNameMenu(MiniPlugin plugin, CoreClientManager clientManager, Player player) { - super(plugin, player, party); + super(plugin, player); _clientManager = clientManager; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/benefit/BenefitManagerRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/benefit/BenefitManagerRepository.java index 163648792..bcb93096c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/benefit/BenefitManagerRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/benefit/BenefitManagerRepository.java @@ -5,12 +5,13 @@ import java.sql.SQLException; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; import org.bukkit.plugin.java.JavaPlugin; -public class BenefitManagerRepository extends MinecraftRepository +public class BenefitManagerRepository extends RepositoryBase { private static String CREATE_BENEFIT_TABLE = "CREATE TABLE IF NOT EXISTS rankBenefits (id INT NOT NULL AUTO_INCREMENT, accountId INT, benefit VARCHAR(100), PRIMARY KEY (id), FOREIGN KEY (accountId) REFERENCES accounts(id));"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java index 125fcead9..241544a1d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java @@ -12,6 +12,7 @@ import mineplex.core.common.Pair; import mineplex.core.common.util.Callback; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.core.donation.DonationManager; import mineplex.core.recharge.Recharge; @@ -28,7 +29,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -public class BonusRepository extends MinecraftRepository +public class BonusRepository extends RepositoryBase { private static String CREATE_BONUS_TABLE = "CREATE TABLE IF NOT EXISTS bonus (accountId INT NOT NULL AUTO_INCREMENT, dailytime TIMESTAMP NULL DEFAULT NULL, ranktime DATE NULL DEFAULT NULL, PRIMARY KEY (accountId), FOREIGN KEY (accountId) REFERENCES accounts(id));"; private BonusManager _manager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/boosters/tips/BoosterThankRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/boosters/tips/BoosterThankRepository.java index a8674e464..c2f02d7d3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/boosters/tips/BoosterThankRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/boosters/tips/BoosterThankRepository.java @@ -3,13 +3,14 @@ package mineplex.core.boosters.tips; import mineplex.core.database.MinecraftRepository; import mineplex.database.routines.CheckAmplifierThank; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import org.bukkit.plugin.java.JavaPlugin; /** * @author Shaun Bennett */ -public class BoosterThankRepository extends MinecraftRepository +public class BoosterThankRepository extends RepositoryBase { public BoosterThankRepository(JavaPlugin plugin) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/botspam/repository/BotSpamRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/botspam/repository/BotSpamRepository.java index 2d9c227c8..cdaede58c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/botspam/repository/BotSpamRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/botspam/repository/BotSpamRepository.java @@ -9,11 +9,12 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; import mineplex.core.botspam.SpamText; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class BotSpamRepository extends MinecraftRepository +public class BotSpamRepository extends RepositoryBase { private static final String GET_SPAM_TEXT = "SELECT * FROM botSpam"; private static final String ADD_SPAM_TEXT = "INSERT INTO botSpam (text, createdBy, enabledBy) VALUES (?, ?, ?)"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/command/ICommand.java b/Plugins/Mineplex.Core/src/mineplex/core/command/ICommand.java index 463a7631f..becbdfee5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/command/ICommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/command/ICommand.java @@ -5,10 +5,11 @@ import java.util.List; import mineplex.core.common.Rank; +import mineplex.core.lifetimes.Component; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public interface ICommand +public interface ICommand extends Component { void SetCommandCenter(CommandCenter commandCenter); void Execute(Player caller, String[] args); @@ -21,4 +22,16 @@ public interface ICommand Rank[] GetSpecificRanks(); List onTabComplete(CommandSender sender, String commandLabel, String[] args); + + @Override + default void activate() + { + CommandCenter.Instance.addCommand(this); + } + + @Override + default void deactivate() + { + CommandCenter.Instance.removeCommand(this); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/communities/storage/CommunityRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/communities/storage/CommunityRepository.java index 0e4844cf3..abba4f955 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/communities/storage/CommunityRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/communities/storage/CommunityRepository.java @@ -23,11 +23,12 @@ import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.data.DataRepository; import mineplex.serverdata.data.PlayerStatus; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnBoolean; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class CommunityRepository extends MinecraftRepository +public class CommunityRepository extends RepositoryBase { private static final String GET_ALL_COMMUNITIES = "SELECT * FROM communities WHERE region=?;"; private static final String GET_COMMUNITY_BY_ID = "SELECT * FROM communities WHERE id=?;"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/open/OpenBalloons.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/open/OpenBalloons.java index ed816cf42..e34616825 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/open/OpenBalloons.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/open/OpenBalloons.java @@ -1,9 +1,11 @@ package mineplex.core.cosmetic.ui.button.open; -import mineplex.core.cosmetic.ui.page.BalloonsPage; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.cosmetic.ui.page.Menu; import mineplex.core.gadget.types.Gadget; -import org.bukkit.entity.Player; public class OpenBalloons extends OpenPageButton { @@ -16,7 +18,8 @@ public class OpenBalloons extends OpenPageButton @Override protected void leftClick(Player player) { - getMenu().getShop().openPageForPlayer(player, new BalloonsPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Win Effects", player)); + UtilPlayer.message(player, F.main("Balloons", "Coming Soon!")); + //getMenu().getShop().openPageForPlayer(player, new BalloonsPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Balloons", player)); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/BalloonsPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/BalloonsPage.java index 4d7b0276c..fd0b3cf08 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/BalloonsPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/BalloonsPage.java @@ -31,7 +31,7 @@ public class BalloonsPage extends GadgetPage { addGadget(gadget, slot); - if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.BALLOON) == gadget) + if (gadget.isActive(getPlayer())) addGlow(slot); slot++; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java index ef27ea645..2c77e6441 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java @@ -14,9 +14,11 @@ import mineplex.core.common.currency.GlobalCurrency; import mineplex.core.common.util.C; import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilUI; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.cosmetic.ui.button.open.OpenArrowTrails; +import mineplex.core.cosmetic.ui.button.open.OpenBalloons; import mineplex.core.cosmetic.ui.button.open.OpenCostumes; import mineplex.core.cosmetic.ui.button.open.OpenDeathAnimations; import mineplex.core.cosmetic.ui.button.open.OpenDoubleJump; @@ -40,6 +42,11 @@ import mineplex.core.shop.page.ShopPageBase; public class Menu extends ShopPageBase { + + private static final String VISIBILITY_HUB = "Usable in Lobbies"; + private static final String VISIBILITY_EVERYWHERE = "Visible Everywhere"; + private static final String VISIBILITY_GAMES = "Visible in Games"; + public Menu(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) { super(plugin, shop, clientManager, donationManager, "Inventory", player); @@ -62,11 +69,11 @@ public class Menu extends ShopPageBase addItem(4, shards); // Cosmetic Items -// int[] slots = UtilUI.getIndicesFor(12, 2); - int particleSlot = 10;//slots[0]; - int arrowSlot = 12;//slots[1]; - int jumpSlot = 14;//slots[2]; - int deathSlot = 16;//slots[3]; + int[] slots = UtilUI.getIndicesFor(15, 1, 5, 1); + /*int particleSlot = 9;//slots[0]; + int arrowSlot = 11;//slots[1]; + int jumpSlot = 13;//slots[2]; + int deathSlot = 15;//slots[3]; int gadgetSlot = 27;//slots[4]; int morphSlot = 29;//slots[5]; int mountSlot = 31;//slots[6]; @@ -76,7 +83,12 @@ public class Menu extends ShopPageBase int musicSlot = 47;//slots[10]; int tauntSlot = 49;//slots[11]; int winEffectSlot = 51; - int gameModifierSlot = 53; + int gameModifierSlot = 53;*/ + int particleSlot = slots[0], arrowSlot = slots[1], jumpSlot = slots[2], + deathSlot = slots[3], gadgetSlot = slots[4], morphSlot = slots[5], + mountSlot = slots[6], petSlot = slots[7], hatSlot = slots[8], + costumeSlot = slots[9], musicSlot = slots[10], tauntSlot = slots[11], + winEffectSlot = slots[12], gameModifierSlot = slots[13], balloonsSlot = slots[14]; EnumMap ownedCount = new EnumMap(GadgetType.class); EnumMap maxCount = new EnumMap(GadgetType.class); @@ -133,74 +145,79 @@ public class Menu extends ShopPageBase Creature petActive = getPlugin().getPetManager().getPet(getPlayer()); GadgetType type = GadgetType.PARTICLE; - String[] lore = getLore(ownedCount.get(type), maxCount.get(type), "Show everyone how cool you are with swirly particles that follow you when you walk!", "Visible Everywhere", enabled.get(type)); + String[] lore = getLore(ownedCount.get(type), maxCount.get(type), "Show everyone how cool you are with swirly particles that follow you when you walk!", VISIBILITY_EVERYWHERE, enabled.get(type)); addButton(particleSlot, new ShopItem(Material.NETHER_STAR, "Particle Effects", lore, 1, false), new OpenParticles(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(particleSlot); type = GadgetType.ARROW_TRAIL; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Your arrows will now leave particle trails as they soar through the air.", "Visible in Games", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Your arrows will now leave particle trails as they soar through the air.", VISIBILITY_GAMES, enabled.get(type)); addButton(arrowSlot, new ShopItem(Material.ARROW, "Arrow Effects", lore, 1, false), new OpenArrowTrails(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(arrowSlot); type = GadgetType.DOUBLE_JUMP; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Demonstrate your parkour prowess with sweet particles when you double jump.", "Visible Everywhere", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Demonstrate your parkour prowess with sweet particles when you double jump.", VISIBILITY_EVERYWHERE, enabled.get(type)); addButton(jumpSlot, new ShopItem(Material.GOLD_BOOTS, "Double Jump Effects", lore, 1, false), new OpenDoubleJump(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(jumpSlot); type = GadgetType.DEATH; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Your death will now be mourned with a wonderful particle tribute.", "Visible in Games", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Your death will now be mourned with a wonderful particle tribute.", VISIBILITY_GAMES, enabled.get(type)); addButton(deathSlot, new ShopItem(Material.SKULL_ITEM, "Death Animations", lore, 1, false), new OpenDeathAnimations(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(deathSlot); type = GadgetType.ITEM; - lore = getLore(ownedCount.get(type), maxCount.get(type), "All sorts of zany contraptions to use on your friends and foes.", "Usable in Lobbies", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "All sorts of zany contraptions to use on your friends and foes.", VISIBILITY_HUB, enabled.get(type)); addButton(gadgetSlot, new ShopItem(Material.MELON_BLOCK, "Gadgets", lore, 1, false), new OpenGadgets(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(gadgetSlot); type = GadgetType.MORPH; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Have you ever wanted to be a tiger? Well, you can't be a tiger! That's silly! But you can be many other things!", "Usable in Lobbies", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Have you ever wanted to be a tiger? Well, you can't be a tiger! That's silly! But you can be many other things!", VISIBILITY_HUB, enabled.get(type)); addButton(morphSlot, new ShopItem(Material.LEATHER, "Morphs", lore, 1, false), new OpenMorphs(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(morphSlot); - lore = getLore(mountOwned, mountMax, "Why walk when you can ride? Summon fancy mounts to help you move in style.", "Usable in Lobbies", mountActive == null ? null : mountActive.getName()); + lore = getLore(mountOwned, mountMax, "Why walk when you can ride? Summon fancy mounts to help you move in style.", VISIBILITY_HUB, mountActive == null ? null : mountActive.getName()); addButton(mountSlot, new ShopItem(Material.IRON_BARDING, "Mounts", lore, 1, false), new OpenMounts(this, mountActive)); if (mountActive != null) addGlow(mountSlot); - lore = getLore(petOwned, petMax, "Life on a server can get lonely sometimes. Summon an adorable pet to follow you around and cheer you up!", "Usable in Lobbies", petActive == null ? null : petActive.getCustomName()); + lore = getLore(petOwned, petMax, "Life on a server can get lonely sometimes. Summon an adorable pet to follow you around and cheer you up!", VISIBILITY_HUB, petActive == null ? null : petActive.getCustomName()); addButton(petSlot, new ShopItem(Material.BONE, "Pets", lore, 1, false), new OpenPets(this)); if (petActive != null) addGlow(petSlot); type = GadgetType.HAT; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Hats are in this year. Wear them on your head to impress the ladies.", "Usable in Lobbies", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Hats are in this year. Wear them on your head to impress the ladies.", VISIBILITY_HUB, enabled.get(type)); addButton(hatSlot, new ShopItem(Material.GOLD_HELMET, "Hats", lore, 1, false), new OpenHats(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(hatSlot); type = GadgetType.COSTUME; - // Fixes more than 8 costumes being counted, even without the WindUp - lore = getLore((ownedCount.get(type) > 8) ? 8 : ownedCount.get(type), /*maxCount.get(type)*/ 8, "Sometimes going out calls for special clothes! Gain bonus effects for matching outfit.", "Usable in Lobbies", enabled.get(type)); + // -4 Fixes more than the real costumes being counted (Happens because of the hub games costumes + lore = getLore(ownedCount.get(type) - 4, maxCount.get(type) - 4, "Sometimes going out calls for special clothes! Gain bonus effects for matching outfit.", VISIBILITY_HUB, enabled.get(type)); addButton(costumeSlot, new ShopItem(Material.DIAMOND_CHESTPLATE, "Costumes", lore, 1, false), new OpenCostumes(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(costumeSlot); type = GadgetType.MUSIC_DISC; - lore = getLore(ownedCount.get(type), maxCount.get(type), "I JUST WANT TO DANCE WITH YOU!", "Usable in Lobbies", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "I JUST WANT TO DANCE WITH YOU!", VISIBILITY_HUB, enabled.get(type)); addButton(musicSlot, new ShopItem(Material.GREEN_RECORD, "Music", lore, 1, false), new OpenMusic(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(musicSlot); type = GadgetType.TAUNT; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Taunt your enemies or just show off. Use /taunt to have a good time!", "Visible in Games", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Taunt your enemies or just show off. Use /taunt to have a good time!", VISIBILITY_GAMES, enabled.get(type)); addButton(tauntSlot, new ShopItem(Material.NAME_TAG, "Taunts", lore, 1, false), new OpenTaunts(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(tauntSlot); type = GadgetType.WIN_EFFECT; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Winning a game with your friends all good and dandy, but then being able to also show off awesome effects is even more fun!", "Usable in Lobbies", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Winning a game with your friends all good and dandy, but then being able to also show off awesome effects is even more fun!", VISIBILITY_GAMES, enabled.get(type)); addButton(winEffectSlot, new ShopItem(Material.CAKE, "Win Effects", lore, 1, false), new OpenWinEffect(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(winEffectSlot); type = GadgetType.GAME_MODIFIER; - lore = getLore(ownedCount.get(type), maxCount.get(type), "Cosmetic effects which changes appearances of objects in game", "Visible in Games", enabled.get(type)); + lore = getLore(ownedCount.get(type), maxCount.get(type), "Cosmetic effects which changes appearances of objects in game", VISIBILITY_GAMES, enabled.get(type)); addButton(gameModifierSlot, new ShopItem(Material.TORCH, "Game Modifiers", lore, 1, false), new OpenGameModifiers(this, enabled.get(type))); if (enabled.containsKey(type)) addGlow(gameModifierSlot); + + type = GadgetType.BALLOON; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Coming Soon...", VISIBILITY_HUB, enabled.get(type)); + addButton(balloonsSlot, new ShopItem(Material.LEASH, "Balloons", lore, 1, false), new OpenBalloons(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(balloonsSlot); } private String[] getLore(int ownedCount, int maxCount, String info, String visibility, Gadget enabled) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/customdata/repository/CustomDataRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/customdata/repository/CustomDataRepository.java index a26974964..2a0a1d4be 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/customdata/repository/CustomDataRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/customdata/repository/CustomDataRepository.java @@ -14,6 +14,7 @@ import mineplex.core.customdata.CustomData; import mineplex.core.customdata.CustomDataManager; import mineplex.core.customdata.PlayerCustomData; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; @@ -22,7 +23,7 @@ import mineplex.serverdata.database.column.ColumnVarChar; * Created by William (WilliamTiger). * 16/12/15 */ -public class CustomDataRepository extends MinecraftRepository +public class CustomDataRepository extends RepositoryBase { private static final String SELECT_KEYS = "SELECT id, name FROM customData;"; private static final String INSERT_KEY = "INSERT INTO customData (name) VALUES (?);"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/BasicMSSQLProvider.java b/Plugins/Mineplex.Core/src/mineplex/core/database/BasicMSSQLProvider.java new file mode 100644 index 000000000..45f4b7b03 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/database/BasicMSSQLProvider.java @@ -0,0 +1,131 @@ +package mineplex.core.database; + +import java.lang.reflect.Type; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Consumer; + +import org.bukkit.scheduler.BukkitTask; + +import mineplex.core.common.util.UtilServer; +import mineplex.core.server.remotecall.JsonWebCall; +import mineplex.core.thread.ThreadPool; +import mineplex.core.updater.UpdateType; +import mineplex.core.utils.UtilScheduler; +import mineplex.serverdata.database.DatabaseRunnable; + +@Deprecated +public class BasicMSSQLProvider implements MSSQLProvider +{ + private final String _webAddress = UtilServer.getWebServerURL(); + + // Queue for failed processes + private final Object QUEUE_LOCK = new Object(); + private Set _failedQueue = new HashSet<>(); + + private final BukkitTask _task; + private volatile boolean _shutdown = false; + + public BasicMSSQLProvider() + { + _task = UtilScheduler.runEvery(UpdateType.MIN_01, this::processDatabaseQueue); + } + + public T handleSyncMSSQLCall(String uri, Object param, Type responseType) + { + return new JsonWebCall(_webAddress + uri).Execute(responseType, param); + } + + public String handleSyncMSSQLCallStream(String uri, Object param) + { + return new JsonWebCall(_webAddress + uri).ExecuteReturnStream(param); + } + + public void handleMSSQLCall(String uri, String error, Object param, Class responseType, Consumer consumer) + { + handleDatabaseCall(new DatabaseRunnable(() -> + { + new JsonWebCall(_webAddress + uri).Execute(responseType, consumer::accept, param); + }, error)); + } + + public void handleMSSQLCall(String uri, Object param, Class responseType, Consumer consumer) + { + handleDatabaseCall(new DatabaseRunnable(() -> + { + new JsonWebCall(_webAddress + uri).Execute(responseType, consumer::accept, param); + }, "Handling MSSQL Call " + uri)); + } + + public void handleMSSQLCall(String uri, Object param, Type responseType, Consumer consumer) + { + handleDatabaseCall(new DatabaseRunnable(() -> + { + T t = new JsonWebCall(_webAddress + uri).Execute(responseType, param); + consumer.accept(t); + }, "Handling MSSQL Call " + uri)); + } + + public void handleMSSQLCall(String uri, Object param) + { + handleDatabaseCall(new DatabaseRunnable(() -> + { + new JsonWebCall(_webAddress + uri).Execute(param); + }, "Handling MSSQL Call " + uri)); + } + + @Override + public void deregister() + { + _shutdown = true; + } + + private void handleDatabaseCall(DatabaseRunnable databaseRunnable) + { + ThreadPool.ASYNC.submit(() -> + { + try + { + databaseRunnable.run(); + } + catch (Exception exception) + { + processFailedDatabaseCall(databaseRunnable, exception); + } + }); + } + + private void processFailedDatabaseCall(DatabaseRunnable databaseRunnable, Exception exception) + { + System.err.println(databaseRunnable.getErrorMessage()); + exception.printStackTrace(); + + if (databaseRunnable.getFailedCounts() < 4) + { + databaseRunnable.incrementFailCount(); + + synchronized (QUEUE_LOCK) + { + _failedQueue.add(databaseRunnable); + } + } + } + + private void processDatabaseQueue() + { + Set clone; + + synchronized (QUEUE_LOCK) + { + clone = new HashSet<>(_failedQueue); + _failedQueue.clear(); + } + + clone.forEach(this::handleDatabaseCall); + + if (_shutdown && _failedQueue.isEmpty()) + { + _task.cancel(); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/MSSQLProvider.java b/Plugins/Mineplex.Core/src/mineplex/core/database/MSSQLProvider.java new file mode 100644 index 000000000..e3f5c35a9 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/database/MSSQLProvider.java @@ -0,0 +1,22 @@ +package mineplex.core.database; + +import java.lang.reflect.Type; +import java.util.function.Consumer; + +@Deprecated +public interface MSSQLProvider +{ + T handleSyncMSSQLCall(String uri, Object param, Type responseType); + + String handleSyncMSSQLCallStream(String uri, Object param); + + void handleMSSQLCall(String uri, String error, Object param, Class responseType, Consumer consumer); + + void handleMSSQLCall(String uri, Object param, Class responseType, Consumer consumer); + + void handleMSSQLCall(String uri, Object param, Type responseType, Consumer consumer); + + void handleMSSQLCall(String uri, Object param); + + void deregister(); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/MinecraftRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/database/MinecraftRepository.java index 22523a1a8..60a8d39c3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/database/MinecraftRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/database/MinecraftRepository.java @@ -1,136 +1,69 @@ package mineplex.core.database; -import java.util.HashSet; -import java.util.Set; +import javax.sql.DataSource; +import java.lang.reflect.Type; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import javax.rmi.CORBA.Util; -import javax.sql.DataSource; - -import mineplex.core.common.util.UtilServer; -import mineplex.core.server.remotecall.AsyncJsonWebCall; -import mineplex.core.server.remotecall.JsonWebCall; -import mineplex.core.thread.ThreadPool; -import mineplex.core.utils.UtilScheduler; -import mineplex.serverdata.database.DBPool; -import mineplex.serverdata.database.DatabaseRunnable; -import mineplex.serverdata.database.RepositoryBase; -import mineplex.core.updater.UpdateType; - +import org.bukkit.event.Listener; import org.jooq.DSLContext; import org.jooq.SQLDialect; import org.jooq.impl.DSL; -import org.bukkit.event.Listener; -import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.common.util.UtilServer; +import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; +/** + * Do not extend this class unless you are doing MSSQL calls (which you shouldn't be) + * + * @deprecated don't use mssql thx + */ +@Deprecated public abstract class MinecraftRepository extends RepositoryBase implements Listener { - // Queue for failed processes - private final Object QUEUE_LOCK = new Object(); - private Set _failedQueue = new HashSet<>(); + private static AtomicReference PROVIDER = new AtomicReference<>(new BasicMSSQLProvider()); - protected JavaPlugin _plugin; // Plugin responsible for this repository + public static void setMSSQLProvider(MSSQLProvider provider) + { + MSSQLProvider oldProvider = PROVIDER.getAndSet(provider); + oldProvider.deregister(); + } - private final String _webAddress = UtilServer.getWebServerURL(); - - /** - * Constructor - * - * @param dataSource - the {@link DataSource} responsible for providing the connection pool to this repository. - */ public MinecraftRepository(DataSource dataSource) { super(dataSource); - _plugin = UtilServer.getPlugin(); - UtilServer.RegisterEvents(this); - - UtilScheduler.runEvery(UpdateType.MIN_01, this::processDatabaseQueue); } - protected DSLContext jooq() + protected T handleSyncMSSQLCall(String uri, Object param, Type responseType) { - return DSL.using(DBPool.getAccount(), SQLDialect.MYSQL); + return PROVIDER.get().handleSyncMSSQLCall(uri, param, responseType); + } + + protected String handleSyncMSSQLCallStream(String uri, Object param) + { + return PROVIDER.get().handleSyncMSSQLCallStream(uri, param); } - /** - * One day, the stars will align, and we can get rid of this - */ - @Deprecated protected void handleMSSQLCall(String uri, String error, Object param, Class responseType, Consumer consumer) { - handleDatabaseCall(new DatabaseRunnable(() -> - { - new JsonWebCall(_webAddress + uri).Execute(responseType, consumer::accept, param); - }, error)); + PROVIDER.get().handleMSSQLCall(uri, error, param, responseType, consumer); } - /** - * One day, the stars will align, and we can get rid of this - */ - @Deprecated - protected void handleAsyncMSSQLCall(String uri, Object param, Class responseType, Consumer consumer) + protected void handleMSSQLCall(String uri, Object param, Class responseType, Consumer consumer) { - new AsyncJsonWebCall(_webAddress + uri).Execute(responseType, consumer::accept, param); + PROVIDER.get().handleMSSQLCall(uri, param, responseType, consumer); + } + + protected void handleMSSQLCall(String uri, Object param, Type responseType, Consumer consumer) + { + PROVIDER.get().handleMSSQLCall(uri, param, responseType, consumer); } - /** - * One day, the stars will align, and we can get rid of this - */ - @Deprecated protected void handleAsyncMSSQLCall(String uri, Object param) { - new AsyncJsonWebCall(_webAddress + uri).Execute(param); - } - - private void handleDatabaseCall(DatabaseRunnable databaseRunnable) - { - ThreadPool.ASYNC.submit(() -> - { - try - { - databaseRunnable.run(); - } - catch (Exception exception) - { - processFailedDatabaseCall(databaseRunnable, exception); - } - }); - } - - private void processFailedDatabaseCall(DatabaseRunnable databaseRunnable, Exception exception) - { - System.err.println(databaseRunnable.getErrorMessage()); - exception.printStackTrace(); - - if (databaseRunnable.getFailedCounts() < 4) - { - databaseRunnable.incrementFailCount(); - - synchronized (QUEUE_LOCK) - { - _failedQueue.add(databaseRunnable); - } - } - } - - private void processDatabaseQueue() - { - Set clone; - - synchronized (QUEUE_LOCK) - { - clone = new HashSet<>(_failedQueue); - _failedQueue.clear(); - } - - clone.forEach(this::handleDatabaseCall); - } - - public JavaPlugin getPlugin() - { - return _plugin; + PROVIDER.get().handleMSSQLCall(uri, param); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java index 6363d018b..834d6cb10 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/DonationRepository.java @@ -11,13 +11,8 @@ import mineplex.core.database.MinecraftRepository; import mineplex.core.donation.repository.token.GemRewardToken; import mineplex.core.donation.repository.token.PurchaseToken; import mineplex.core.donation.repository.token.UnknownPurchaseToken; -import mineplex.core.server.remotecall.AsyncJsonWebCall; -import mineplex.core.server.remotecall.JsonWebCall; import mineplex.core.server.util.TransactionResponse; import mineplex.serverdata.database.DBPool; -import mineplex.serverdata.database.DatabaseRunnable; - -import org.bukkit.plugin.java.JavaPlugin; public class DonationRepository extends MinecraftRepository { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java index 7f622784e..5d8617a4a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java @@ -9,10 +9,12 @@ import java.util.LinkedList; import java.util.List; import mineplex.core.common.util.Callback; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnLong; @@ -22,7 +24,7 @@ import org.bukkit.scheduler.BukkitRunnable; import com.google.common.collect.Lists; -public class EloRepository extends MinecraftRepository +public class EloRepository extends RepositoryBase { private static String INSERT_ELO = "INSERT INTO eloRating (accountId, gameType, elo) VALUES (?, ?, ?);"; @@ -43,7 +45,7 @@ public class EloRepository extends MinecraftRepository public boolean saveElo(int accountId, int gameType, int oldElo, int elo) throws SQLException { List ret = Lists.newArrayList(); - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + UtilServer.runAsync(() -> { boolean updateSucceeded = false; // If we're increasing in elo we verify the server version matches the database version (prevent d/c and double wins with concurrent matches) @@ -60,7 +62,7 @@ public class EloRepository extends MinecraftRepository updateSucceeded = true; } } - + ret.add(updateSucceeded); }); @@ -86,14 +88,14 @@ public class EloRepository extends MinecraftRepository public void getStrikeExpiry(int accountId, Callback call) { - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> executeQuery(GRAB_STRIKE_EXPIRY, resultSet -> { + UtilServer.runAsync(() -> executeQuery(GRAB_STRIKE_EXPIRY, resultSet -> { boolean called = false; while (resultSet.next()) { called = true; call.run(resultSet.getLong(1)); } - + if (!called) { call.run(0L); @@ -103,21 +105,21 @@ public class EloRepository extends MinecraftRepository public void getBanExpiryAsync(int accountId, Callback call) { - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> executeQuery(GRAB_BAN_EXPIRY, resultSet -> { + UtilServer.runAsync(() -> executeQuery(GRAB_BAN_EXPIRY, resultSet -> { boolean called = false; while (resultSet.next()) { called = true; call.run(resultSet.getLong(1)); } - + if (!called) { call.run(0L); } }, new ColumnInt("accountId", accountId))); } - + public long getBanExpiry(int accountId) { List expiry = new ArrayList(); @@ -127,23 +129,23 @@ public class EloRepository extends MinecraftRepository expiry.add(resultSet.getLong(1)); } }, new ColumnInt("accountId", accountId)); - + if (expiry.isEmpty()) expiry.add(System.currentTimeMillis() - 5000); - + return expiry.get(0); } public void getStrikes(int accountId, Callback call) { - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> executeQuery(GRAB_STRIKES, resultSet -> { + UtilServer.runAsync(() -> executeQuery(GRAB_STRIKES, resultSet -> { boolean called = false; while (resultSet.next()) { called = true; call.run(resultSet.getInt(1)); } - + if (!called) { call.run(0); @@ -188,14 +190,14 @@ public class EloRepository extends MinecraftRepository long banEnd = System.currentTimeMillis() + UtilTime.convert(minutes, TimeUnit.MINUTES, TimeUnit.MILLISECONDS); long strikesExpire = System.currentTimeMillis() + UtilTime.convert(1, TimeUnit.DAYS, TimeUnit.MILLISECONDS); int newStrikes = Math.min(strikes + 1, 8); - - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> executeUpdate(UPDATE_BAN, new ColumnInt("accountId", accountId), new ColumnInt("strikes", newStrikes), new ColumnLong("strikesExpire", strikesExpire), new ColumnLong("banEnd", banEnd))); + + UtilServer.runAsync(() -> executeUpdate(UPDATE_BAN, new ColumnInt("accountId", accountId), new ColumnInt("strikes", newStrikes), new ColumnLong("strikesExpire", strikesExpire), new ColumnLong("banEnd", banEnd))); }); } public void resetStrikes(int accountId) { - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> executeUpdate(DELETE_STRIKES, new ColumnInt("accountId", accountId))); + UtilServer.runAsync(() -> executeUpdate(DELETE_STRIKES, new ColumnInt("accountId", accountId))); } public void getTopElo(int limit, Callback> callback) @@ -255,6 +257,6 @@ public class EloRepository extends MinecraftRepository } } } - }.runTaskAsynchronously(_plugin); + }.runTaskAsynchronously(UtilServer.getPlugin()); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/facebook/FacebookRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/facebook/FacebookRepository.java index 1a9f32c25..19674d595 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/facebook/FacebookRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/facebook/FacebookRepository.java @@ -8,11 +8,12 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.common.util.Callback; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class FacebookRepository extends MinecraftRepository +public class FacebookRepository extends RepositoryBase { private static final String GET_CODE = "SELECT code, activated FROM facebook WHERE code = ?"; private static final String ACTIVATE_CODE = "UPDATE facebook SET activated = 1, accountId = ?, activationTime = NOW() WHERE code = ?"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java index 12432b50e..c2bc5b608 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/data/FriendRepository.java @@ -15,6 +15,7 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.common.util.NautHashMap; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnVarChar; import mineplex.core.friend.FriendStatusType; @@ -24,7 +25,7 @@ import mineplex.serverdata.data.PlayerStatus; import mineplex.serverdata.redis.RedisDataRepository; import mineplex.serverdata.servers.ServerManager; -public class FriendRepository extends MinecraftRepository +public class FriendRepository extends RepositoryBase { private static String CREATE_FRIEND_TABLE = "CREATE TABLE IF NOT EXISTS accountFriend (id INT NOT NULL AUTO_INCREMENT, uuidSource VARCHAR(100), uuidTarget VARCHAR(100), status VARCHAR(100), PRIMARY KEY (id), UNIQUE INDEX uuidIndex (uuidSource, uuidTarget));"; private static String RETRIEVE_MULTIPLE_FRIEND_RECORDS = "SELECT uuidSource, tA.Name, status, tA.lastLogin, now(), uuidTarget FROM accountFriend INNER Join accounts AS fA ON fA.uuid = uuidSource INNER JOIN accounts AS tA ON tA.uuid = uuidTarget WHERE uuidSource IN "; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java index 0fa3e4051..c94c5ff98 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/friend/ui/FriendsGUI.java @@ -34,6 +34,7 @@ import mineplex.core.friend.data.FriendData; import mineplex.core.friend.data.FriendStatus; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemLayout; +import mineplex.core.portal.Intent; import mineplex.core.shop.item.IButton; public class FriendsGUI implements Listener @@ -302,7 +303,7 @@ public class FriendsGUI implements Listener @Override public void onClick(Player player, ClickType clickType) { - _plugin.getPortal().sendPlayerToServer(player, serverName); + _plugin.getPortal().sendPlayerToServer(player, serverName, Intent.PLAYER_REQUEST); } }); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index bb0c257d6..ced422b4f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -57,6 +57,7 @@ import mineplex.core.gadget.gadgets.arrowtrail.shadow.ArrowTrailShadow; import mineplex.core.gadget.gadgets.arrowtrail.titan.ArrowTrailTitan; import mineplex.core.gadget.gadgets.arrowtrail.vampire.ArrowTrailBlood; import mineplex.core.gadget.gadgets.arrowtrail.wisdom.ArrowTrailEnchant; +import mineplex.core.gadget.gadgets.balloons.BalloonType; import mineplex.core.gadget.gadgets.death.candycane.DeathCandyCane; import mineplex.core.gadget.gadgets.death.christmas.DeathPresentDanger; import mineplex.core.gadget.gadgets.death.cupidslove.DeathCupidsBrokenHeart; @@ -198,6 +199,7 @@ import mineplex.core.gadget.set.suits.SetFreezeSuit; import mineplex.core.gadget.set.suits.SetRaveSuit; import mineplex.core.gadget.set.suits.SetSpaceSuit; import mineplex.core.gadget.types.ArrowEffectGadget; +import mineplex.core.gadget.types.BalloonGadget; import mineplex.core.gadget.types.DeathEffectGadget; import mineplex.core.gadget.types.DoubleJumpEffectGadget; import mineplex.core.gadget.types.Gadget; @@ -502,7 +504,7 @@ public class GadgetManager extends MiniPlugin // Game Modifiers // MineStrike - addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.P250_Muertos, -2)); + /*addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.P250_Muertos, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.CZ75_Auto_Tigris, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.Desert_Eagle_Blaze, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.Nova_Koi, -2)); @@ -513,6 +515,7 @@ public class GadgetManager extends MiniPlugin addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.AWP_Asiimov, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.Knife_M9_Bayonette_Fade, -2)); + addGadget(new GameModifierMineStrikeSkin(this, )); //Blue only addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.P2000_Fire_Elemental, -2)); @@ -523,7 +526,11 @@ public class GadgetManager extends MiniPlugin addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.Glock_18_Fade, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.Galil_AR_Eco, -2)); addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.AK_47_Vulcan, -2)); - addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.SG553_Pulse, -2)); + addGadget(new GameModifierMineStrikeSkin(this, MineStrikeSkin.SG553_Pulse, -2));*/ + for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.values()) + { + addGadget(new GameModifierMineStrikeSkin(this, mineStrikeSkin, -2)); + } // Survival Games @@ -532,8 +539,12 @@ public class GadgetManager extends MiniPlugin addGadget(new KitGameModifier(this, kitModifier)); }*/ + // ONLY NEXT WEEK! // Balloons - //addGadget(new BabyCowBalloon(this)); + /*for (BalloonType balloonType : BalloonType.values()) + { + addGadget(new BalloonItem(this, balloonType)); + }*/ // TAUNTS!!! addGadget(new EternalTaunt(this)); @@ -709,6 +720,20 @@ public class GadgetManager extends MiniPlugin } return null; } + + public BalloonGadget getBalloonGadget(BalloonType balloonType) + { + for (Gadget gadget : getGadgets(GadgetType.BALLOON)) + { + if (gadget instanceof BalloonGadget) + { + BalloonGadget balloonGadget = (BalloonGadget) gadget; + if (balloonGadget.getBalloonType().equals(balloonType)) + return balloonGadget; + } + } + return null; + } // Disallows two armor gadgets in same slot. public void removeOutfit(Player player, ArmorSlot slot) @@ -1322,4 +1347,5 @@ public class GadgetManager extends MiniPlugin taunt.start(player); } + } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/commands/UnlockCosmeticsCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/commands/UnlockCosmeticsCommand.java index 18afaab78..0da39bfe2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/commands/UnlockCosmeticsCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/commands/UnlockCosmeticsCommand.java @@ -22,7 +22,7 @@ public class UnlockCosmeticsCommand extends CommandBase public UnlockCosmeticsCommand(GadgetManager plugin) { - super(plugin, Rank.JNR_DEV, "unlockCosmetics"); + super(plugin, Rank.SNR_MODERATOR, "unlockCosmetics"); _plugin = plugin; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BabyCowBalloon.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BabyCowBalloon.java deleted file mode 100644 index 4b1e7e23f..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BabyCowBalloon.java +++ /dev/null @@ -1,52 +0,0 @@ -package mineplex.core.gadget.gadgets.balloons; - -import mineplex.core.common.util.UtilEnt; -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.types.BalloonGadget; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.*; - -public class BabyCowBalloon extends BalloonGadget -{ - - private ArmorStand _entityStand, _playerStand; - private Entity _balloonEntity; - - public BabyCowBalloon(GadgetManager manager) - { - super(manager, "Baby Cow Balloon", new String[]{"placeholder"}, 0, Material.MONSTER_EGG, UtilEnt.getEntityEggData(EntityType.COW)); - } - - @Override - public void enableCustom(Player player, boolean message) - { - if (!canSpawnBalloon(player)) - { - // TODO MESSAGE - return; - } - addPlayerBalloon(player); - _entityStand = player.getWorld().spawn(player.getLocation(), ArmorStand.class); - _entityStand.setGravity(false); - _entityStand.setVisible(false); - Cow babyCow = player.getWorld().spawn(player.getLocation(), Cow.class); - babyCow.setBaby(); - _balloonEntity = babyCow; - _entityStand.setPassenger(babyCow); - Location balloonLocation = player.getLocation().add(_random.nextDouble(), getNewHeight(player), _random.nextDouble()); - _entityStand.teleport(balloonLocation); - babyCow.setLeashHolder(player); - // TODO UPDATE BALLOONS - } - - @Override - public void disableCustom(Player player, boolean message) - { - _entityStand.remove(); - _balloonEntity.remove(); - removePlayerBalloon(player); - // TODO UPDATE PLAYER HEIGHT - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonItem.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonItem.java new file mode 100644 index 000000000..24c92c722 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonItem.java @@ -0,0 +1,92 @@ +package mineplex.core.gadget.gadgets.balloons; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.entity.Ageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Zombie; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import mineplex.core.common.util.UtilEnt; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.BalloonGadget; + +public class BalloonItem extends BalloonGadget +{ + + private BalloonType _balloonType; + private Map> _entities = new HashMap<>(); + + public BalloonItem(GadgetManager manager, BalloonType balloonType) + { + super(manager, balloonType.getName(), balloonType.getLore(), balloonType.getCost(), + balloonType.getDisplayItem().getType(), + balloonType.getDisplayItem().getData().getData(), balloonType, + balloonType.getEntityType()); + setDisplayItem(balloonType.getDisplayItem()); + _balloonType = balloonType; + } + + @Override + public Entity[] spawnEntity(Player player) + { + Entity[] ents = new Entity[2]; + if (_balloonType.getEntityType().equals(EntityType.ARMOR_STAND)) + { + Zombie zombie = player.getWorld().spawn(player.getLocation(), Zombie.class); + zombie.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, false, false)); + zombie.getEquipment().setHelmet(_balloonType.getDisplayItem()); + UtilEnt.silence(zombie, true); + UtilEnt.vegetate(zombie); + addEntity(player, zombie); + + ents[0] = zombie; + + return ents; + } + else if (_balloonType.equals(BalloonType.BABY_ZOMBIE)) + { + Zombie zombie = player.getWorld().spawn(player.getLocation(), Zombie.class); + zombie.setBaby(true); + UtilEnt.vegetate(zombie); + addEntity(player, zombie); + ents[0] = zombie; + return ents; + } + + + Entity entity = player.getWorld().spawnEntity(player.getLocation(), _balloonType.getEntityType()); + if (_balloonType.isBaby() && entity instanceof Ageable) + ((Ageable) entity).setBaby(); + UtilEnt.vegetate(entity); + addEntity(player, entity); + ents[0] = entity; + return ents; + } + + private void addEntity(Player player, Entity entity) + { + _entities.computeIfAbsent(player.getUniqueId(), list -> new ArrayList<>()); + List entities = _entities.get(player.getUniqueId()); + entities.add(entity); + _entities.put(player.getUniqueId(), entities); + } + + @Override + public void removeEntities(Player player) + { + for (Entity entity : _entities.get(player.getUniqueId())) + { + entity.remove(); + } + _entities.remove(player.getUniqueId()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonType.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonType.java new file mode 100644 index 000000000..1fbf94fc2 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/balloons/BalloonType.java @@ -0,0 +1,95 @@ +package mineplex.core.gadget.gadgets.balloons; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; + +public enum BalloonType +{ + + // BABY + BABY_COW (EntityType.COW, true, "Baby Cow Balloon", 0, new ItemStack(Material.COOKED_BEEF)), + BABY_PIG (EntityType.PIG, true, "Baby Pig Balloon", 0, new ItemStack(Material.GRILLED_PORK)), + BABY_ZOMBIE (EntityType.ZOMBIE, true, "Baby Zombie Balloon", 0, new ItemStack(Material.ROTTEN_FLESH)), + BABY_MUSHROOM(EntityType.MUSHROOM_COW, true, "Baby Mushroom Cow Balloon", 0, new ItemStack(Material.MUSHROOM_SOUP)), + BABY_OCELOT (EntityType.OCELOT, true, "Baby Ocelot Balloon", 0, new ItemStack(Material.COOKED_FISH)), + BABY_WOLF (EntityType.WOLF, true, "Baby Wolf Balloon", 0, new ItemStack(Material.BONE)), + BABY_SHEEP (EntityType.SHEEP, true, "Baby Sheep Balloon", 0, new ItemStack(Material.WOOL)), + BABY_VILLAGER(EntityType.VILLAGER, true, "Baby Villager Balloon", 0, new ItemStack(Material.EMERALD)), + BABY_SLIME (EntityType.SLIME, true, "Baby Slime Balloon", 0, new ItemStack(Material.SLIME_BALL)), + + // NOT BABY + SQUID (EntityType.SQUID, "Squid Balloon", 0, new ItemStack(Material.INK_SACK)), + BAT (EntityType.BAT, "Bat Balloon", 0, new ItemStack(Material.JACK_O_LANTERN)), + SILVERFISH(EntityType.SILVERFISH, "Silverfish Balloon", 0, new ItemStack(Material.getMaterial(97))), + GUARDIAN (EntityType.GUARDIAN, "Guardian Balloon", 0, new ItemStack(Material.PRISMARINE_SHARD)), + + // BLOCK + /*DRAGON_EGG (new ItemStack(Material.DRAGON_EGG), false, "Dragon Egg Balloon", UtilText.splitLinesToArray(new String[]{"Placeholder"}, LineFormat.LORE), 0), + DIAMOND_BLOCK(new ItemStack(Material.DIAMOND_BLOCK), false, "Diamond Block Balloon", UtilText.splitLinesToArray(new String[]{"Placeholder"}, LineFormat.LORE), 0), + IRON_BLOCK (new ItemStack(Material.IRON_BLOCK), false, "Iron Block Balloon", UtilText.splitLinesToArray(new String[]{"Placeholder"}, LineFormat.LORE), 0), + GOLD_BLOCK (new ItemStack(Material.GOLD_BLOCK), false, "Gold Block Balloon", UtilText.splitLinesToArray(new String[]{"Placeholder"}, LineFormat.LORE), 0),*/ + EMERALD_BLOCK(new ItemStack(Material.EMERALD_BLOCK), false, "Emerald Block Balloon", 0); + + private EntityType _entityType; + private boolean _isBaby; + private String _name; + private String[] _lore; + private int _cost; + private ItemStack _displayItem; + + BalloonType(EntityType entityType, String name, int cost, ItemStack displayItem) + { + this(entityType, false, name, cost, displayItem); + } + + BalloonType(EntityType entityType, boolean isBaby, String name, int cost, ItemStack displayItem) + { + _entityType = entityType; + _isBaby = isBaby; + _name = name; + _cost = cost; + _displayItem = displayItem; + } + + BalloonType(ItemStack block, boolean isBaby, String name, int cost) + { + this(EntityType.ARMOR_STAND, isBaby, name, cost, block); + } + + public EntityType getEntityType() + { + return _entityType; + } + + public boolean isBaby() + { + return _isBaby; + } + + public String getName() + { + return _name; + } + + public String[] getLore() + { + return UtilText.splitLinesToArray(new String[]{C.cGray + "A floating " + getName() + " that appears above your head!", + "", + C.cWhite + "Click to activate, click again to remove. You can have up to 10 balloons active at a time."}, LineFormat.LORE); + } + + public int getCost() + { + return _cost; + } + + public ItemStack getDisplayItem() + { + return _displayItem; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/GameModifierMineStrikeSkin.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/GameModifierMineStrikeSkin.java index a9f2ebcaf..e54903c2d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/GameModifierMineStrikeSkin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/GameModifierMineStrikeSkin.java @@ -51,7 +51,7 @@ public class GameModifierMineStrikeSkin extends GameModifierGadget */ public GameModifierMineStrikeSkin(GadgetManager manager, MineStrikeSkin skin, int cost) { - this(manager, skin, new String[]{""}, cost); + this(manager, skin, new String[]{skin.getWeaponName()}, cost); } /** diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/MineStrikeSkin.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/MineStrikeSkin.java index 1b118c120..14b21a559 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/MineStrikeSkin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/gamemodifiers/minestrike/MineStrikeSkin.java @@ -5,25 +5,33 @@ import org.bukkit.Material; public enum MineStrikeSkin { - P250_Muertos( "P250", "P250 Muertos", Material.INK_SACK, (byte) 3), - CZ75_Auto_Tigris( "CZ75-Auto", "CZ75-Auto Tigris", Material.CLAY_BRICK, (byte) 0), - Desert_Eagle_Blaze( "Desert Eagle", "Desert Eagle Blaze", Material.NETHER_STALK, (byte) 0), - Nova_Koi( "Nova", "Nova Koi", Material.INK_SACK, (byte) 14), - XM1014_Tranquility( "XM1014", "XM1014 Tranquility", Material.DIAMOND, (byte) 0), - PP_Bizon_Streak( "PP Bizon", "PP-Bizon Streak", Material.INK_SACK, (byte) 4), - P90_Asiimov( "P90", "P90 Asiimov", Material.INK_SACK, (byte) 0), - SSG_08_Blood_in_the_Water( "SSG 08", "SSG 08 Blood in the Water", Material.INK_SACK, (byte) 12), - AWP_Asiimov( "AWP", "AWP Asiimov", Material.SULPHUR, (byte) 0), - P2000_Fire_Elemental( "P2000", "P2000 Fire Elemental", Material.INK_SACK, (byte) 6), - FAMAS_Pulse( "FAMAS", "FAMAS Pulse", Material.CLAY_BALL, (byte) 0), - M4A4_Howl( "M4A4", "M4A4 Howl", Material.INK_SACK, (byte) 11), - Steyr_AUG_Torque( "Steyr AUG", "Steyr AUG Torque", Material.BLAZE_ROD, (byte) 0), - Glock_18_Fade( "Glock 18", "Glock 18 Fade", Material.INK_SACK, (byte) 9), - Galil_AR_Eco( "Galil AR", "Galil AR Eco", Material.INK_SACK, (byte) 10), - AK_47_Vulcan( "AK-47", "AK-47 Vulcan", Material.INK_SACK, (byte) 7), - SG553_Pulse( "SG553", "SG553 Pulse", Material.INK_SACK, (byte) 5), + P250_Muertos( "P250", "P250 Muertos", Material.INK_SACK, (byte) 3), + CZ75_Auto_Tigris( "CZ75-Auto", "CZ75-Auto Tigris", Material.CLAY_BRICK, (byte) 0), + Desert_Eagle_Blaze( "Desert Eagle", "Desert Eagle Blaze", Material.NETHER_STALK, (byte) 0), + Desert_Eagle_Golden_Gun( "Desert Eagle", "Golden Gun", Material.GLOWSTONE_DUST, (byte) 0), + Nova_Koi( "Nova", "Nova Koi", Material.INK_SACK, (byte) 14), + XM1014_Tranquility( "XM1014", "XM1014 Tranquility", Material.DIAMOND, (byte) 0), + XM1014_Pig_Gun( "XM1014", "XM1014 Pig Gun", Material.LEATHER, (byte) 0), + PP_Bizon_Streak( "PP Bizon", "PP-Bizon Streak", Material.INK_SACK, (byte) 4), + P90_Asiimov( "P90", "P90 Asiimov", Material.INK_SACK, (byte) 0), + SSG_08_Blood_in_the_Water( "SSG 08", "SSG 08 Blood in the Water", Material.INK_SACK, (byte) 12), + AWP_Asiimov( "AWP", "AWP Asiimov", Material.SULPHUR, (byte) 0), + P2000_Fire_Elemental( "P2000", "P2000 Fire Elemental", Material.INK_SACK, (byte) 6), + FAMAS_Pulse( "FAMAS", "FAMAS Pulse", Material.CLAY_BALL, (byte) 0), + M4A4_Howl( "M4A4", "M4A4 Howl", Material.INK_SACK, (byte) 11), + //M4A4_Enderman( "M4A4", "Enderman M4", ) + Steyr_AUG_Torque( "Steyr AUG", "Steyr AUG Torque", Material.BLAZE_ROD, (byte) 0), + Glock_18_Fade( "Glock 18", "Glock 18 Fade", Material.INK_SACK, (byte) 9), + Galil_AR_Eco( "Galil AR", "Galil AR Eco", Material.INK_SACK, (byte) 10), + AK_47_Vulcan( "AK-47", "AK-47 Vulcan", Material.INK_SACK, (byte) 7), + AK_47_Guardian( "AK-47", "Guardian AK", Material.PRISMARINE_SHARD, (byte) 0), + SG553_Pulse( "SG553", "SG553 Pulse", Material.INK_SACK, (byte) 5), + - Knife_M9_Bayonette_Fade( "Knife", "M9 Bayonette Fade", Material.DIAMOND_SWORD, (byte) 0); + Knife_M9_Bayonette_Fade( "Knife", "M9 Bayonette Fade", Material.DIAMOND_SWORD, (byte) 0), + Knife_Counter_Terrorist_Sword("Knife", "Counter Terrorist Sword", Material.STICK, (byte) 0), + Knife_Terrorist_Sword( "Knife", "Terrorist Sword", Material.FEATHER, (byte) 0), + Knife_M9_Bayonette_Glass( "Knife", "Glass M9 Bayonette", Material.QUARTZ, (byte) 0); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java index a405ea02c..06a4178ff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java @@ -51,7 +51,7 @@ public class ItemFootball extends ItemGadget FallingBlock ball = player.getWorld().spawnFallingBlock(player.getLocation().add(0, 1, 0), Material.SKULL, (byte) 3); Bat bat = player.getWorld().spawn(player.getLocation(), Bat.class); - UtilEnt.Vegetate(bat); + UtilEnt.vegetate(bat); UtilEnt.ghost(bat, true, true); UtilEnt.silence(bat, true); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/WinEffectHalloween.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/WinEffectHalloween.java index 49aaa7bbe..821a9daff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/WinEffectHalloween.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/WinEffectHalloween.java @@ -134,7 +134,7 @@ public class WinEffectHalloween extends WinEffectGadget skeleton.setCustomNameVisible(true); skeleton.getEquipment().setHelmet(new ItemStack(Material.JACK_O_LANTERN)); UtilEnt.ghost(skeleton, true, false); - UtilEnt.Vegetate(skeleton); + UtilEnt.vegetate(skeleton); for (int i = 0; i < 15; i++) { playFirework(skeleton.getLocation().clone().add(0, 2, 0), i, true); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/BalloonGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/BalloonGadget.java index 721282b33..980c43fd2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/BalloonGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/BalloonGadget.java @@ -1,64 +1,138 @@ package mineplex.core.gadget.types; -import java.util.*; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; -import mineplex.core.gadget.GadgetManager; import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.balloons.BalloonType; +import mineplex.core.gadget.util.BalloonData; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; public abstract class BalloonGadget extends Gadget { - protected static final Map> PLAYER_BALLOONS = new HashMap<>(); + private static final Map> PLAYER_BALLOONS = new HashMap<>(); - protected final Random _random; + private EntityType _balloon; + private BalloonType _balloonType; - public BalloonGadget(GadgetManager manager, String name, String[] desc, int cost, Material material, byte data, String... altNames) + public BalloonGadget(GadgetManager manager, String name, String[] desc, int cost, Material material, byte data, BalloonType balloonType, EntityType balloon, String... altNames) { super(manager, GadgetType.BALLOON, name, desc, cost, material, data, 1, altNames); - _random = new Random(); + _balloon = balloon; + _balloonType = balloonType; } - protected boolean canSpawnBalloon(Player player) + @Override + public void enableCustom(Player player, boolean message) + { + boolean add = addPlayerBalloon(player); + if (add) + { + _active.add(player); + if (message) + { + UtilPlayer.message(player, F.main("Gadget", "You spawned a " + F.elem(getName()) + "!")); + } + } + else + { + Manager.removeActive(player, this); + UtilPlayer.message(player, F.main("Gadget", "You cannot have more than " + F.count("10") + " balloons!")); + } + } + + @Override + public void disableCustom(Player player, boolean message) + { + if (!_active.remove(player)) + return; + + removePlayerBalloon(player); + if (message) + UtilPlayer.message(player, F.main("Gadget", "You despawned a " + F.elem(getName())) + "!"); + } + + private boolean addPlayerBalloon(Player player) + { + if (!canSpawnBalloon(player)) + return false; + + PLAYER_BALLOONS.computeIfAbsent(player.getUniqueId(), map -> new HashMap<>()); + BalloonData balloonData; + Entity[] ents = spawnEntity(player); + if (ents[1] == null) + balloonData = new BalloonData(player, ents[0]); + else if (!_balloon.equals(EntityType.ARMOR_STAND)) + balloonData = new BalloonData(player, ents[0], ents[1]); + else + { + balloonData = new BalloonData(player, ents[0]); + balloonData.setLeash(ents[1]); + } + PLAYER_BALLOONS.get(player.getUniqueId()).put(_balloon, balloonData); + + return true; + } + + private void removePlayerBalloon(Player player) { if (PLAYER_BALLOONS.containsKey(player.getUniqueId())) { - List balloonGadgets = PLAYER_BALLOONS.get(player.getUniqueId()); + if (PLAYER_BALLOONS.get(player.getUniqueId()).containsKey(_balloon)) + { + removeEntities(player); + PLAYER_BALLOONS.get(player.getUniqueId()).remove(_balloon); + } + } + } + + protected abstract Entity[] spawnEntity(Player player); + + protected abstract void removeEntities(Player player); + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Map.Entry> entry : PLAYER_BALLOONS.entrySet()) + { + for (BalloonData balloonData : entry.getValue().values()) + { + balloonData.update(); + } + } + } + + private boolean canSpawnBalloon(Player player) + { + if (PLAYER_BALLOONS.containsKey(player.getUniqueId())) + { + Map balloonGadgets = PLAYER_BALLOONS.get(player.getUniqueId()); return balloonGadgets.size() < 10; } return true; } - protected void addPlayerBalloon(Player player) + public BalloonType getBalloonType() { - if (canSpawnBalloon(player)) - { - PLAYER_BALLOONS.computeIfAbsent(player.getUniqueId(), list -> new ArrayList<>()); - List balloonGadgets = PLAYER_BALLOONS.get(player.getUniqueId()); - balloonGadgets.add(this); - PLAYER_BALLOONS.put(player.getUniqueId(), balloonGadgets); - } + return _balloonType; } - protected void removePlayerBalloon(Player player) + public static int getBalloons(Player player) { - List balloonGadgets = PLAYER_BALLOONS.computeIfPresent(player.getUniqueId(), (uuid, list) -> list); - if (balloonGadgets.contains(this)) - { - balloonGadgets.remove(this); - } - if (balloonGadgets.size() >= 1) - PLAYER_BALLOONS.put(player.getUniqueId(), balloonGadgets); - else - PLAYER_BALLOONS.remove(player.getUniqueId()); + return ((PLAYER_BALLOONS.containsKey(player.getUniqueId())) ? PLAYER_BALLOONS.get(player.getUniqueId()).size() : 0); } - - protected double getNewHeight(Player player) - { - List balloonGadgets = PLAYER_BALLOONS.computeIfPresent(player.getUniqueId(), (uuid, list) -> list); - if (balloonGadgets != null) - return balloonGadgets.size() * _random.nextDouble() * (_random.nextInt(1) + 2); - return 3; - } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/util/BalloonData.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/util/BalloonData.java new file mode 100644 index 000000000..da817f426 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/util/BalloonData.java @@ -0,0 +1,133 @@ +package mineplex.core.gadget.util; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; + +public class BalloonData +{ + + /** + * Makes the balloons fly around the player + * Copied from {@link mineplex.core.gadget.gadgets.particle.ParticleFairyData} + */ + + private Player _player; + private Entity _balloon, _passenger, _leash; + private Location _balloonLoc, _target; + private Vector _direction; + private double _speed; + private long _idleTime; + + public BalloonData(Player player, Entity balloon) + { + _player = player; + _balloon = balloon; + _balloonLoc = player.getEyeLocation(); + _target = getNewTarget(); + _speed = 0.2; + _idleTime = 0; + _direction = new Vector(1, 0, 0); + ((LivingEntity) _balloon).setLeashHolder(_player); + } + + // This exists for a possible widder balloon that could be added later + public BalloonData(Player player, Entity balloon, Entity passenger) + { + _player = player; + _balloon = balloon; + _passenger = passenger; + _balloonLoc = player.getEyeLocation(); + _target = getNewTarget(); + _speed = 0.2; + _idleTime = 0; + _direction = new Vector(1, 0, 0); + ((LivingEntity) _balloon).setLeashHolder(_player); + } + + public void update() + { + if (_leash == null) + { + if (!((LivingEntity) _balloon).isLeashed()) + ((LivingEntity) _balloon).setLeashHolder(_player); + } + else + { + if (!((LivingEntity) _leash).isLeashed()) + ((LivingEntity) _leash).setLeashHolder(_player); + } + + //Update Target + if (UtilMath.offset(_player.getEyeLocation(), _target) > 3 || UtilMath.offset(_balloonLoc, _target) < 1) + _target = getNewTarget(); + + //Pause? + if (Math.random() > 0.98) + _idleTime = System.currentTimeMillis() + (long)(Math.random() * 3000); + + //Speed + if (UtilMath.offset(_player.getEyeLocation(), _balloonLoc) < 3) + { + if (_idleTime > System.currentTimeMillis()) + { + _speed = Math.max(0, _speed - 0.005); + } + else + { + _speed = Math.min(0.15, _speed + 0.005); + } + } + else + { + _idleTime = 0; + + _speed = Math.min(0.15 + UtilMath.offset(_player.getEyeLocation(), _balloonLoc) * 0.05, _speed + 0.02); + } + + + //Modify Direction + _direction.add(UtilAlg.getTrajectory(_balloonLoc, _target).multiply(0.15)); + if (_direction.length() < 1) + _speed = _speed * _direction.length(); + UtilAlg.Normalize(_direction); + + //Move + if (UtilMath.offset(_balloonLoc, _target) > 0.1) + _balloonLoc.add(_direction.clone().multiply(_speed)); + + _balloon.teleport(_balloonLoc); + _balloon.setVelocity(new Vector(0, .25, 0)); + if (_passenger != null) + { + _passenger.teleport(_balloonLoc); + _balloon.setPassenger(_passenger); + } + if (_leash != null) + { + _leash.teleport(_balloon.getLocation().add(0, 1.5, 0)); + } + } + + private Location getNewTarget() + { + return _player.getEyeLocation().add(Math.random() * 6 - 3, Math.random() * 7.5, Math.random() * 6 - 3); + } + + public Entity getBalloon() + { + return _balloon; + } + + public void setLeash(Entity leashedEntity) + { + _leash = leashedEntity; + ((LivingEntity) _leash).setLeashHolder(_player); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index 585e37864..cc5ba27d4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -96,6 +96,8 @@ public enum GameDisplay Basketball("Hoops", Material.SLIME_BALL, (byte)0, GameCategory.EXTRA, 63, false), QuiverPayload("One in the Quiver Payload", Material.ARROW, (byte)0, GameCategory.ARCADE, 64, false), + + StrikeGames("Strike Games", Material.DIAMOND_LEGGINGS, (byte) 0, GameCategory.SURVIVAL, 66, false), Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999, false), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/giveaway/GiveawayRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/giveaway/GiveawayRepository.java index 01b07bc7e..a88efc3fd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/giveaway/GiveawayRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/giveaway/GiveawayRepository.java @@ -12,12 +12,13 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; import mineplex.serverdata.Region; -public class GiveawayRepository extends MinecraftRepository +public class GiveawayRepository extends RepositoryBase { private static final String INSERT_GIVEAWAY = "INSERT INTO Account.accountGiveaway (giveawayId, accountId, cooldownId, region, serverName, time, uuid) VALUES (?, ?, ?, ?, ?, now(), ?)"; private static final String LOAD_GIVEAWAY = "SELECT id, name, prettyName, header, message, max, notifyNetwork, notifyCooldown, canWinTwice FROM Account.giveaway WHERE enabled = TRUE"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/ignore/data/IgnoreRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/ignore/data/IgnoreRepository.java index 14ea9c2e5..d69fa55b1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/ignore/data/IgnoreRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/ignore/data/IgnoreRepository.java @@ -5,12 +5,13 @@ import java.sql.SQLException; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnVarChar; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -public class IgnoreRepository extends MinecraftRepository +public class IgnoreRepository extends RepositoryBase { private static String ADD_IGNORE_RECORD = "INSERT INTO accountIgnore (uuidIgnorer, uuidIgnored) SELECT fA.uuid AS uuidIgnorer, tA.uuid AS uuidIgnored FROM accounts as fA LEFT JOIN accounts AS tA ON tA.name = ? WHERE fA.name = ?;"; private static String DELETE_IGNORE_RECORD = "DELETE aF FROM accountIgnore AS aF INNER JOIN accounts as fA ON aF.uuidIgnorer = fA.uuid INNER JOIN accounts AS tA ON aF.uuidIgnored = tA.uuid WHERE fA.name = ? AND tA.name = ?;"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/incognito/repository/IncognitoRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/incognito/repository/IncognitoRepository.java index fbb8243b7..adebcf4cf 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/incognito/repository/IncognitoRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/incognito/repository/IncognitoRepository.java @@ -3,9 +3,10 @@ package mineplex.core.incognito.repository; import mineplex.core.database.MinecraftRepository; import mineplex.core.incognito.IncognitoManager; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; -public class IncognitoRepository extends MinecraftRepository +public class IncognitoRepository extends RepositoryBase { private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS incognitoStaff (accountId INT NOT NULL, status TINYINT(1) DEFAULT '0', PRIMARY KEY (accountId));"; private static final String INSERT_STATUS = "INSERT INTO incognitoStaff (accountId, status) VALUES (?, ?);"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/inventory/data/InventoryRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/inventory/data/InventoryRepository.java index b679ab62c..6bf7de0f5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/inventory/data/InventoryRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/inventory/data/InventoryRepository.java @@ -10,13 +10,14 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.common.util.NautHashMap; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; import mineplex.core.inventory.ClientInventory; import mineplex.core.inventory.ClientItem; -public class InventoryRepository extends MinecraftRepository +public class InventoryRepository extends RepositoryBase { private static String CREATE_INVENTORY_TABLE = "CREATE TABLE IF NOT EXISTS items (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), rarity INT, PRIMARY KEY (id), INDEX mameIndex (name));"; private static String CREATE_INVENTORY_RELATION_TABLE = "CREATE TABLE IF NOT EXISTS accountInventory (id INT NOT NULL AUTO_INCREMENT, accountId INT NOT NULL, itemId INT NOT NULL, count INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (accountId) REFERENCES accounts(id), FOREIGN KEY (itemId) REFERENCES items(id), UNIQUE INDEX accountItemIndex (accountId, itemId));"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java index c4b129df4..3acf6a2f8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java @@ -2,6 +2,7 @@ package mineplex.core.leaderboard; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; @@ -15,7 +16,7 @@ import org.bukkit.plugin.java.JavaPlugin; * @author MrTwiggy * */ -public class StatEventsRepository extends MinecraftRepository +public class StatEventsRepository extends RepositoryBase { // Insert or update stat events query diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Component.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Component.java new file mode 100644 index 000000000..cee7da78f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Component.java @@ -0,0 +1,21 @@ +package mineplex.core.lifetimes; + +/** + * A Component defines behavior that can exist within a Lifetime. Components + * should have no impact upon the game while not active. + */ +public interface Component +{ + /** + * Activates the Component, performing any sort of required initialization. + * Components may be activated and deactivated multiple times, however a component + * will not be activated more than once without subsequent calls to deactivate. + */ + void activate(); + + /** + * Deactivates the Component, disabling any sort of functionality it provides + * and performing clean up. A Component may be subsequently reactivated. + */ + void deactivate(); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetime.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetime.java new file mode 100644 index 000000000..1cb578bc0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetime.java @@ -0,0 +1,29 @@ +package mineplex.core.lifetimes; + +/** + * A Lifetime represents a duration for which a collection of Components + * will be active. While Lifetime does contain a method for registering + * instantiated Components, individual Lifetimes may have unique + * strategies for creating Components and activating them. Lifetime + * doesn't provide any guarantee of Component activation or deactivation + * order. Implementations of Lifetime, however, may. + *

+ * Lifetime doesn't provide mechanisms for beginning or ending a Lifetime. + * This is provided by the various implementations of Lifetime, as it varies + * between the implementations and is functionality that most consumers of + * Lifetimes will not need. + */ +public interface Lifetime +{ + /** + * Registers the provided component with this Lifetime. If the Lifetime + * is currently active, then the Component will be immediately activated. + * @param component the component to register + */ + void register(Component component); + /** + * Gets whether the Lifetime is currently active. + * @return true if the Lifetime is active + */ + boolean isActive(); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetimed.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetimed.java new file mode 100644 index 000000000..fa08dd533 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/Lifetimed.java @@ -0,0 +1,19 @@ +package mineplex.core.lifetimes; + +/** + * Represents an object that is associated with a specific lifetime. + * Multiple Lifetimed objects may be associated with the same Lifetime. + * As a roughly generalized explanation, any time functionality should + * be enabled(whether its a command, listener, etc.) it should be registered + * as a Component of a Lifetime. Any object wishing to enable functionality + * that is associated with this Lifetimed object should do so with the Lifetime + * returned by {@link #getLifetime()}. + */ +public interface Lifetimed +{ + /** + * Gets the Lifetime associated with this Lifetimed object. + * @return non-null Lifetime + */ + Lifetime getLifetime(); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/ListenerComponent.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/ListenerComponent.java new file mode 100644 index 000000000..d6b664fb4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/ListenerComponent.java @@ -0,0 +1,54 @@ +package mineplex.core.lifetimes; + +import mineplex.core.common.util.UtilServer; +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; + +/** + * A convenience class for Components that are a Listener. ListenerComponent + * can either be used as a wrapper class for a specific Listener, or can be + * extended by another Component to provide event registration. + */ +public class ListenerComponent implements Component, Listener +{ + private final Listener _listener; + + /** + * Creates a ListenerComponent that registers the provided Listener when + * activated and unregisters it when deactivated. The newly created + * ListenerComponent will not be registered as a Listener. When a + * ListenerComponent is created with this constructor, it is effectively + * a wrapper to bind a Listener to a specific lifetime. + * + * @param listener non-null listener to wrap + * @throws IllegalArgumentException if listener is null + */ + public ListenerComponent(Listener listener) throws IllegalArgumentException + { + Validate.notNull(listener); + _listener = listener; + } + + /** + * Creates a ListenerComponent that registers itself when activated and + * unregisters itself when deactivated. + */ + public ListenerComponent() + { + _listener = this; + } + + @Override + public void activate() + { + Bukkit.getPluginManager().registerEvents(_listener, UtilServer.getPlugin()); + } + + @Override + public void deactivate() + { + HandlerList.unregisterAll(_listener); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedComponent.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedComponent.java new file mode 100644 index 000000000..417bf56b1 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedComponent.java @@ -0,0 +1,7 @@ +package mineplex.core.lifetimes; + +public interface PhasedComponent extends Component +{ + + void setPhase(T phase); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedLifetime.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedLifetime.java new file mode 100644 index 000000000..b9760e761 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/PhasedLifetime.java @@ -0,0 +1,289 @@ +package mineplex.core.lifetimes; + +import com.google.common.base.Preconditions; +import mineplex.core.common.util.UtilServer; +import org.apache.commons.lang.Validate; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * A PhasedLifetime is a lifetime that is composed of several + * smaller lifetimes, referred to as phases. This class is provided + * in order to support a system in which Components may exist within multiple + * Lifetimes. PhasedLifetime is not thread-safe. + *

+ * Registering a Component will register it for the entirety of this Lifetime, + * unless registered with {@link #register(Component, Iterable)}. Special behavior + * is provided for instances of {@link PhasedComponent}. See {@link #register(Component, + * Iterable)} for more information. Components registered using {@link + * #register(Component)} are registered for the entire duration of the Lifetime. + */ +public class PhasedLifetime implements Lifetime +{ + private final Map> _phases = new HashMap<>(); + private final List _global = new ArrayList<>(); + private boolean _active = false; + private T _current; + + /** + * Registers the Component for all phases within the provided Iterable, + * and creates a Lifetime that is active during all those phases, and + * therefore identical to when the provided Component is active. If a change + * occurs from a Phase that the Component is active in to another phase that + * the component is active in, it will not be disabled. When this + * Lifetime ends, all Lifetimes created by this Lifetime also end, as all + * phases are considered over. + *

+ * If the Component is an instance of PhasedComponent, then any phase change + * in which one of the phases is within the provided Iterable of phases will + * result in an invocation of {@link PhasedComponent#setPhase(Object)}. This + * should not be used as a mechanism to detect when the component is being + * disabled, but rather as a means to provide specific behavior when that + * phase change occurs. If a phase change drastically changes the behavior + * of a Component such that not all functionality is active for some phases + * that a Component is registered for, you should consider refactoring that + * Component into two separate Components. + *

+ * As an example, assume that we have a PhasedLifetime with phases A-F, + * and a PhasedComponent is registered for phases A, B, and E. The chain + * of events would be as followed(italic indicates an event call to the + * PhasedComponent, an activation, or deactivation). + *

    + *
  • Lifetime started with a value of A
  • + *
  • Component is activated
  • + *
  • setPhase is called with a value of A
  • + *
  • Phase is set to B
  • + *
  • setPhase is called with a value of B
  • + *
  • Phase is set to C
  • + *
  • setPhase is called with a value of C
  • + *
  • Component is deactivated
  • + *
  • Phase is set to D
  • + *
  • Phase is set to E
  • + *
  • Component is activated
  • + *
  • setPhase is called with a value of E
  • + *
  • Phase is set to F
  • + *
  • setPhase is called with a value of F
  • + *
  • Component is deactivated
  • + *
  • Lifetime ends
  • + *
+ *

+ * If phases contains no elements, then the Component will not be + * registered. + * @param component non-null Component being registered + * @param phases non-null Iterable of phases to register the Component for + * @return a Lifetime corresponding to when the Component is active + * @throws IllegalArgumentException if component or phases is null + */ + public Lifetime register(Component component, Iterable phases) throws IllegalArgumentException { + Validate.notNull(component, "Component cannot be null"); + Validate.notNull(phases, "Phases cannot be null"); + RegisteredComponent rComponent = new RegisteredComponent(component); + for (T phase : phases) + { + _phases.computeIfAbsent(phase, (p) -> new ArrayList<>()).add(rComponent); + if (Objects.equals(phase, _current)) + { + rComponent.start(); + if (component instanceof PhasedComponent) + { + ((PhasedComponent) component).setPhase(phase); + } + } + } + return rComponent; + } + + /** + * Starts the Lifetime, activating all components that are active for + * the entire lifetime, and then activating all components that are part + * of the provided phase. + * @param phase non-null phase to start + * @throws IllegalArgumentException if phase is null + * @throws IllegalStateException if the Lifetime is currently active + */ + public void start(T phase) throws IllegalArgumentException, IllegalStateException + { + Validate.notNull(phase, "phase cannot be null"); + Preconditions.checkState(!_active, "Lifetime already started"); + _active = true; + _global.forEach(PhasedLifetime::active); + setPhase(phase); + } + + /** + * Ends the Lifetime, deactivating all components in the current phase + * and then deactivating all components that are active for the entire Lifetime. + * A Lifetime may be subsequently reactivated after it has ended. + * @throws IllegalStateException if the lifetime isn't active + */ + public void end() throws IllegalStateException + { + Preconditions.checkState(_active, "Lifetime not active"); + List toDisable = _phases.get(getPhase()); + if (toDisable != null) + { + toDisable.forEach(RegisteredComponent::end); + } + _global.forEach(PhasedLifetime::deactive); + _active = false; + _current = null; + } + + /** + * Sets the current phase to the provided value, activating components + * that are active in the phase and not currently active, and deactiving + * components that were previously active and are not registered for the + * provided phase. + * @param phase non-null + * @throws IllegalStateException if the Lifetime isn't active + * @throws IllegalArgumentException if the phase equals the current phase + * or is null + */ + public void setPhase(T phase) throws IllegalStateException, IllegalArgumentException + { + Preconditions.checkState(_active, "Lifetime not active"); + Validate.isTrue(!Objects.equals(phase, _current), "Can't set the phase to the current phase"); + Validate.notNull(phase, "the phase cannot be null"); + T oldPhase = getPhase(); + _current = phase; + List old = _phases.get(oldPhase); + List nextPhase = _phases.get(phase); + + for (Component c : _global) + { + if (c instanceof PhasedComponent) + { + ((PhasedComponent) c).setPhase(phase); + } + } + // Disable components that were active in the last phase but not in the next phase. + if (old != null) + { + List toDisable = new ArrayList<>(); + toDisable.addAll(old); + // Components that are in the next phase shouldn't be disabled. + if (nextPhase != null) + { + toDisable.removeAll(nextPhase); + } + + // Ensure that all old ones get a setPhase call before disabling them. + for (RegisteredComponent r : toDisable) + { + if (r.getComponent() instanceof PhasedComponent) + { + ((PhasedComponent) r.getComponent()).setPhase(phase); + } + } + toDisable.forEach(RegisteredComponent::end); + } + if (nextPhase != null) + { + // New but not old + List toActivate = new ArrayList<>(); + toActivate.addAll(nextPhase); + // Ensure that all components from last phase don't end up getting activated again. + if (old != null) + { + toActivate.removeAll(old); + } + // Start all the new ones + toActivate.forEach(RegisteredComponent::start); + // Give every remaining component a call to setPhase + for (RegisteredComponent r : nextPhase) + { + if (r.getComponent() instanceof PhasedComponent) + { + ((PhasedComponent) r.getComponent()).setPhase(phase); + } + } + } + } + + private static void active(Component component) + { + try + { + component.activate(); + } catch (Exception e) + { + e.printStackTrace(); + UtilServer.getPlugin().getLogger().severe("Failed to activate component: " + component); + } + } + private static void deactive(Component component) + { + try + { + component.deactivate(); + } catch (Exception e) + { + e.printStackTrace(); + UtilServer.getPlugin().getLogger().severe("Failed to deactivate component: " + component); + } + } + /** + * Gets the current Phase. If this PhasedLifetime isn't active then + * the current phase is null. + * @return the current phase, null if not active + */ + public T getPhase() + { + return _current; + } + + /** + * {@inheritDoc} + * If the Component is an instance of PhasedComponent, it will receive + * notifications of phase changes prior to any components registered + * with specific phases. Global components will also be deactivated last. + * @param component the component to register + */ + @Override + public void register(Component component) + { + _global.add(component); + if (this.isActive()) + { + component.activate(); + } + } + + @Override + public boolean isActive() + { + return _active; + } + + private static class RegisteredComponent extends SimpleLifetime implements Lifetime { + private Component _component; + + public RegisteredComponent(Component component) + { + this._component = component; + } + + public Component getComponent() + { + return _component; + } + + @Override + public void start() throws IllegalStateException + { + PhasedLifetime.active(_component); + super.start(); + } + + @Override + public void end() throws IllegalStateException + { + super.end(); + PhasedLifetime.deactive(_component); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/SimpleLifetime.java b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/SimpleLifetime.java new file mode 100644 index 000000000..28dcfe45e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/lifetimes/SimpleLifetime.java @@ -0,0 +1,96 @@ +package mineplex.core.lifetimes; + +import mineplex.core.common.util.UtilServer; +import org.apache.commons.lang3.Validate; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +/** + * A Lifetime that is not thread-safe and is essentially a list of Components. + * All components are activated in the order that they are registered. All + * components are deactivated in the reverse order that they are registered. + * Components may not be registered during invocations of start or end. If a + * Component throws an exception during activation it will be logged, however the + * Component will still only be disabled once all other Components are disabled. + */ +public class SimpleLifetime implements Lifetime +{ + protected final List _components = new ArrayList<>(); + protected boolean _active = false; + @Override + public void register(Component component) + { + this._components.add(component); + if (this.isActive()) + { + try + { + component.activate(); + } catch (Exception e) + { + e.printStackTrace(); + UtilServer.getPlugin().getLogger().severe("Failed to active component: " + component); + } + } + } + + @Override + public boolean isActive() + { + return _active; + } + + /** + * Starts the SimpleLifetime, activating all components in the order that + * they were registered. A SimpleLifetime may be started multiple times, + * so long that every invocation of start after the first is preceded by + * an invocation of {@link #end()}. If a Component throws an exception + * during activation the exception will be logged, however no specific + * error-handling mechanism is provided. The Component will still be + * considered active and will be deactivated with all other Components. + * @throws IllegalStateException if currently active + */ + public void start() throws IllegalStateException + { + Validate.isTrue(!_active); + _active = true; + for (Component component : _components) + { + try + { + component.activate(); + } catch (Exception e) + { + e.printStackTrace(); + UtilServer.getPlugin().getLogger().severe("Failed to active component: " + component); + } + } + } + + /** + * Deactivates all components in the reverse order that they were registered. + * Any exception thrown by a Component while being deactivated will be logged, + * however no exception handling mechanism is provided. + * @throws IllegalStateException if not currently active + */ + public void end() throws IllegalStateException + { + Validate.isTrue(_active); + _active = false; + ListIterator reverseIterator = _components.listIterator(_components.size()); + while (reverseIterator.hasPrevious()) + { + Component component = reverseIterator.previous(); + try + { + component.deactivate(); + } catch (Exception e) + { + e.printStackTrace(); + UtilServer.getPlugin().getLogger().severe("Failed to deactivate component: " + component); + } + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java index 8e38983f6..35f605f3f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java @@ -86,7 +86,7 @@ public class DisplaySlot } else { - UtilEnt.Vegetate(e, true); + UtilEnt.vegetate(e, true); UtilEnt.ghost(e, true, false); } _pastedEntities.add(e); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenAnvilInput.java b/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenAnvilInput.java new file mode 100644 index 000000000..393f5d60e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenAnvilInput.java @@ -0,0 +1,28 @@ +package mineplex.core.menu.builtin; + +import java.util.function.Supplier; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.MiniPlugin; +import mineplex.core.menu.Button; +import mineplex.core.menu.Menu; + +public abstract class ButtonOpenAnvilInput extends Button +{ + private final Supplier> _menuSupplier; + + public ButtonOpenAnvilInput(T plugin, ItemStack item, Supplier> menu) + { + super(item, plugin); + _menuSupplier = menu; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + _menuSupplier.get().open(player); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenInventory.java b/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenInventory.java new file mode 100644 index 000000000..8c01dc846 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/menu/builtin/ButtonOpenInventory.java @@ -0,0 +1,28 @@ +package mineplex.core.menu.builtin; + +import java.util.function.Supplier; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.MiniPlugin; +import mineplex.core.menu.Button; +import mineplex.core.menu.Menu; + +public class ButtonOpenInventory extends Button +{ + private final Supplier> _menuSupplier; + + public ButtonOpenInventory(ItemStack item, T plugin, Supplier> menu) + { + super(item, plugin); + _menuSupplier = menu; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + _menuSupplier.get().open(player); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/DragonData.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/DragonData.java index 1203bad95..a1d664e60 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/DragonData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/DragonData.java @@ -44,7 +44,7 @@ public class DragonData extends MountData //Spawn Dragon Dragon = rider.getWorld().spawn(rider.getLocation(), EnderDragon.class); - UtilEnt.Vegetate(Dragon); + UtilEnt.vegetate(Dragon); UtilEnt.ghost(Dragon, true, false); rider.getWorld().playSound(rider.getLocation(), Sound.ENDERDRAGON_GROWL, 20f, 1f); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/npc/NpcManager.java b/Plugins/Mineplex.Core/src/mineplex/core/npc/NpcManager.java index 73c160a68..4e76af53b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/npc/NpcManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/npc/NpcManager.java @@ -341,7 +341,7 @@ public class NpcManager extends MiniPlugin if (npc.getDatabaseRecord().getRadius() == 0) { - UtilEnt.Vegetate(entity); + UtilEnt.vegetate(entity); UtilEnt.silence(entity, true); UtilEnt.ghost(entity, true, false); @@ -604,7 +604,7 @@ public class NpcManager extends MiniPlugin if (npc.getDatabaseRecord().getRadius() == 0) { - UtilEnt.Vegetate(entity); + UtilEnt.vegetate(entity); UtilEnt.ghost(entity, true, false); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/InviteData.java b/Plugins/Mineplex.Core/src/mineplex/core/party/InviteData.java index b401da6d1..b0ebe12d6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/InviteData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/InviteData.java @@ -1,27 +1,59 @@ package mineplex.core.party; +import java.util.UUID; + /** * Serializable invite data */ public class InviteData { + private final String _inviterName; + private final UUID _inviterUUID; + private final UUID _partyUUID; + private final String _serverName; - private String _invitedTo; - private String _serverFrom; - - public InviteData(String invitedTo, String serverFrom) + public InviteData(String inviterName, UUID inviterUUID, UUID partyUUID, String serverName) { - _invitedTo = invitedTo; - _serverFrom = serverFrom; + _inviterName = inviterName; + _inviterUUID = inviterUUID; + _partyUUID = partyUUID; + _serverName = serverName; } - public String getInvitedTo() + public String getInviterName() { - return _invitedTo; + return _inviterName; } - public String getServerFrom() + public UUID getInviterUUID() { - return _serverFrom; + return _inviterUUID; + } + + public UUID getPartyUUID() + { + return _partyUUID; + } + + public String getServerName() + { + return _serverName; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + InviteData that = (InviteData) o; + + return _partyUUID.equals(that._partyUUID); + } + + @Override + public int hashCode() + { + return _partyUUID.hashCode(); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/Lang.java b/Plugins/Mineplex.Core/src/mineplex/core/party/Lang.java index 1826241a7..57da4496a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/Lang.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/Lang.java @@ -16,7 +16,6 @@ public enum Lang SUCCESS_SERVER_CONNECT("Sending you and your party to {0}..."), INVITE_SUCCESS_PLAYER("Successfully invited {0} to the party."), SUCCESS_INVITE("{0} has invited {1} to the party."), - INVITE_RECEIVED("You have been invited to {0}''s party! You have 60 seconds to reply."), INVITE_ACCEPT("{0} has joined the party."), INVITE_DENY("{0} declined your invite."), INVITE_EXPIRED("{0} did not respond in time."), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java index 743cbb1ab..522fff3fa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java @@ -1,163 +1,114 @@ package mineplex.core.party; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import mineplex.core.common.util.UtilServer; -import mineplex.core.party.constants.PartyRemoveReason; -import mineplex.core.party.event.PartyTransferOwnerEvent; -import mineplex.core.party.event.PartyTransferOwnerEvent.TransferReason; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.event.Listener; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; + +import mineplex.core.Managers; +import mineplex.core.common.util.UtilServer; +import mineplex.core.party.constants.PartyRemoveReason; +import mineplex.core.party.rediscommands.PartyTransferRequest; +import mineplex.core.utils.UtilGameProfile; /** * The main object for Parites. */ -public class Party +public class Party implements Listener { - - /** - * This is controls whether or not the owner is currently in the menu, and kicking members - */ - private transient boolean _ownerKickMode = false; - - /** - * Asserts if this party has already been put into teams in order to prevent the Arcade from reassigning teams - */ - private transient boolean _alreadyTeamed = false; - /** * The maximum amount of players a party can have. */ private static final int PARTY_MAX_SIZE = 16; - /** - * Partners that have already been placed - */ - private transient final List _teamed; + private final PartyManager _partyManager = Managers.require(PartyManager.class); /** - * The current leader of this party + * The unique ID assigned to this party */ - private String _owner; + private UUID _uniqueId = UUID.randomUUID(); /** - * The names of all current party members + * Metadata related to the current owner of this party, stored in serializable form for transferring */ - private List _members; + private GameProfile _owner; - /** - * The UUIDS of all current party members - */ - private List _membersByUUID; - - /** - * All current pending invites - */ - private Map _invites; + private List _members = Lists.newArrayList(); /** * This party's max size */ - private int _size; + private int _size = PARTY_MAX_SIZE; - /** - * Team preferences - */ - private Map> _preferences; + private List _pendingUnrankedMembers = new ArrayList<>(); + private List _pendingMembers = new ArrayList<>(); - /** - * Empty constructor for GSON - */ - public Party() + public Party(PartyTransferRequest request) { - _teamed = Lists.newArrayList(); + _uniqueId = request.getPartyUUID(); + _owner = request.getOwnerGameProfile(); + + _pendingMembers.addAll(request.getAllMembers()); + _pendingUnrankedMembers.addAll(request.getUnrankedMembers()); + + + _partyManager.runSyncLater(() -> + { + // No one joined :( + for (UUID uuid : _pendingUnrankedMembers) + { + _partyManager.getClientManager().unreserve(uuid); + } + for (UUID uuid : _pendingMembers) + { + _partyManager.removePendingJoin(uuid); + } + // No one joined :( + if (_pendingMembers.size() == request.getAllMembers().size()) + { + _partyManager.removeParty(Party.this); + } + }, 20 * 10L); } /** - * Creates a new fresh party instance + * Creates a new party instance * * @param owner The owner / leader of the party. */ - public Party(String owner) + public Party(Player owner) { - _owner = owner; - _members = Lists.newArrayList(); - _invites = Maps.newHashMap(); + _owner = UtilGameProfile.getGameProfile(owner); _members.add(owner); - _teamed = Lists.newArrayList(); - _membersByUUID = Lists.newArrayList(); - _preferences = Maps.newHashMap(); - _membersByUUID.add(Bukkit.getPlayerExact(owner).getUniqueId()); } - public String getOwner() + public String getOwnerName() + { + return _owner.getName(); + } + + public GameProfile getOwner() { return _owner; } - /** - * Get the current members by their IGN - * - * @return The list of named party members - */ - public List getMembers() + public Optional getOwnerAsPlayer() { - return _members; + return Optional.ofNullable(Bukkit.getPlayer(_owner.getId())); } - public Map getInvites() + public UUID getUniqueId() { - return _invites; - } - - /** - * An alternate method to get the owner of the party. - * While this does not have any difference to using {@code getOwner}, it may serve a purpose in the future, should we wish to allow - * donators to name their party something custom. - * - * @return This party's name - */ - public String getName() - { - return _owner; - } - - /** - * Gets the players preferred teammate for a game - * - * @param player The player's UUID - * @return His team preference - */ - public String getPartner(UUID player, String game) - { - Map prefs = _preferences.get(player); - if (prefs == null) - { - prefs = Maps.newHashMap(); - _preferences.put(player, prefs); - return null; - } - return prefs.get(game); - } - - /** - * Set a player's partner preference - * - * @param player The player - * @param game The name of the game - * @param partner The name of his partner - */ - public void setPartner(Player player, String game, String partner) - { - Map prefs = _preferences.getOrDefault(player.getUniqueId(), Maps.newHashMap()); - prefs.put(game, partner); - _preferences.put(player.getUniqueId(), prefs); + return this._uniqueId; } /** @@ -167,9 +118,7 @@ public class Party */ public void sendMessage(String message) { - // Todo actually figure out why one of the members is no longer online - // probably some desync between players and something - _members.stream().map(Bukkit::getPlayer).filter(Objects::nonNull).forEach(player -> player.sendMessage(message)); + getMembers().forEach(player -> player.sendMessage(message)); } public int getSize() @@ -177,161 +126,66 @@ public class Party return _size; } - /** - * Set's this party's size cap base off the current players rank - * - */ - public void setSize() - { - _size = PARTY_MAX_SIZE; - } - - /** - * Called when a player is added to the party. - * - * @param player The name of the player - */ - public void onPlayerAdd(String player) - { - _invites.remove(player); - if(_members.contains(player)) - { - return; - } - _members.add(player); - Lang.ADD_MEMBER.send(this, player); - getMembers().forEach(s -> - { - Player player1 = Bukkit.getPlayer(s); - player1.playSound(player1.getLocation(), Sound.NOTE_PLING, 1.0F, 10.0F); - }); - } - - /** - * Called when a member of the party is removed - * - * @param player The name of the player - * @param reason The reason for his removal. - */ - public void onPlayerRemove(String player, PartyRemoveReason reason) - { - if(reason == PartyRemoveReason.DISBANDED) - { - Player bukkitPlayer = Bukkit.getPlayerExact(player); - Lang.DISBANDED.send(bukkitPlayer); - bukkitPlayer.closeInventory(); - return; - } - - if(_members.size() <= 0) - { - return; - } - - if(reason == PartyRemoveReason.LEFT) - { - if(player.equalsIgnoreCase(_owner) && _members.size() > 1) - { - _owner = _members.get(0); - Lang.TRANSFER_OWNER.send(this, player, _owner); - PartyTransferOwnerEvent event = new PartyTransferOwnerEvent(this, _owner, player, TransferReason.LEFT); - UtilServer.getServer().getPluginManager().callEvent(event); - return; - } - Lang.REMOVE_PLAYER.send(this, player); - return; - } - - if(reason == PartyRemoveReason.OTHER) - { - return; - } - - if(reason == PartyRemoveReason.KICKED) - { - Lang.REMOVE_PLAYER_KICK.send(this, player); - } - } - - /** - * Gets the current state of whether or not the owner is kicking people in the UI. - * - * @return true if the owner is kicking people - */ - public boolean isOwnerKickMode() - { - return _ownerKickMode; - } - - /** - * Set's the current state of kicking players - * - * @param ownerKickMode true if the owner is kicking people - */ - public void setOwnerKickMode(boolean ownerKickMode) - { - _ownerKickMode = ownerKickMode; - } - /** * Set's the new owner for this party instance * * @param owner The new owner's name */ - public void setOwner(String owner) + public void setOwner(Player owner) { - _owner = owner; + _owner = UtilGameProfile.getGameProfile(owner); } - /** - * Get a list of all members in the party by their UUID - * - * @return A list of members by UUID - */ - public List getMembersByUUID() + public boolean isMember(Player player) { - return _membersByUUID; + return _members.contains(player); } - public boolean alreadyTeamed() + public void addMember(Player player) { - return _alreadyTeamed; - } - - public void setAlreadyTeamed(boolean alreadyTeamed) - { - _alreadyTeamed = alreadyTeamed; - } - - /** - * Check to see if this party contains a certain player name - * This is case-insensitive - * - * @param name The players name - * @return true If the player is in the party - */ - public boolean contains(String name) - { - for (UUID member : _membersByUUID) + if (_members.contains(player)) { - if (Bukkit.getPlayer(member).getName().equalsIgnoreCase(name)) - { - return true; - } + return; } - return false; + _members.add(player); + _pendingMembers.remove(player.getUniqueId()); + _pendingUnrankedMembers.remove(player.getUniqueId()); + Lang.ADD_MEMBER.send(this, player.getName()); + getMembers().forEach(player1 -> player1.playSound(player1.getLocation(), Sound.NOTE_PLING, 1.0F, 10.0F)); } - public boolean isAlreadyTeamed(UUID uuid) + public List getMembers() { - return _teamed.contains(uuid); + return Collections.unmodifiableList(_members); } - public void setTeamed(Player... players) + public boolean isOwner(Player caller) { - for (Player player : players) + return caller.getUniqueId().equals(this._owner.getId()); + } + + public void clear() + { + _owner = null; + _members.clear(); + UtilServer.Unregister(this); + } + + public void removeMember(Player player) + { + _members.remove(player); + + if (_members.size() <= 0) { - _teamed.add(player.getUniqueId()); + return; + } + + System.out.println("Removing member: " + player.getName() + " "+ player.getUniqueId() + " owner is " + _owner.getId()); + + if (player.getUniqueId().equals(_owner.getId()) && _members.size() > 0) + { + _owner = UtilGameProfile.getGameProfile(_members.get(0)); + Lang.TRANSFER_OWNER.send(this, player.getName(), _owner.getName()); } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyEventListener.java b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyEventListener.java deleted file mode 100644 index 9f88df666..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyEventListener.java +++ /dev/null @@ -1,167 +0,0 @@ -package mineplex.core.party; - -import mineplex.core.common.Rank; -import mineplex.core.menu.Menu; -import mineplex.core.party.constants.PartyRemoveReason; -import mineplex.core.party.event.PartyMemberKickGUIEvent; -import mineplex.core.party.event.PartySendToServerEvent; -import mineplex.core.party.event.PartyTransferOwnerEvent; -import mineplex.core.portal.ServerTransferEvent; -import mineplex.serverdata.data.MinecraftServer; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -/** - * Event handler for Parties - */ -public class PartyEventListener implements Listener -{ - - private final PartyManager _plugin; - - public PartyEventListener(PartyManager plugin) - { - _plugin = plugin; - _plugin.getPluginManager().registerEvents(this, plugin.getPlugin()); - } - - @EventHandler - public void onJoin(PlayerJoinEvent event) - { - Player player = event.getPlayer(); - - String partyName = _plugin.getInviteManager().getPartyWaiting(player.getUniqueId()); - - if (partyName == null) - { - return; - } - - Party party = _plugin.getParty(partyName); - - Player bukkitPlayer = Bukkit.getPlayerExact(partyName); - - if (party == null) - { - party = new Party(partyName); - - if (bukkitPlayer != null && _plugin.getClientManager().Get(bukkitPlayer).GetRank().has(Rank.ULTRA)) - { - party.setSize(); - } else - { - party.setSize(); - } - - _plugin.addParty(party); - } - - _plugin.getInviteManager().cancelTask(player.getUniqueId()); - - _plugin.getMethodManager().addToParty(Bukkit.getPlayerExact(partyName), party); - - _plugin.getMethodManager().addToParty(player, party); - - _plugin.getInviteManager().removeFromWaiting(player.getUniqueId()); - - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) - { - Player player = event.getPlayer(); - - Party party = _plugin.getParty(player); - - _plugin.getInviteManager().removeAll(player.getUniqueId()); - - if (party == null) - { - return; - } - - PartyRemoveReason reason = PartyRemoveReason.LEFT; - - if(_plugin.getJoinManager().isTransferring(player)) - { - reason = PartyRemoveReason.OTHER; - } - - _plugin.getMethodManager().removeFromParty(player, reason); - } - - - @EventHandler - public void onTransferOwner(PartyTransferOwnerEvent event) - { - _plugin.getMethodManager().transferOwner(event.getNewOwner(), event.getOldOwner()); - } - - @EventHandler - public void onKick(PartyMemberKickGUIEvent event) - { - Player clicked = Bukkit.getPlayerExact(event.getPlayerClicked()); - Lang.REMOVED.send(clicked); - _plugin.getMethodManager().removeFromParty(clicked, PartyRemoveReason.KICKED); - Menu.get(event.getOwner().getUniqueId()).resetAndUpdate(); - } - - @EventHandler - public void onTransfer(ServerTransferEvent event) - { - Player player = event.getPlayer(); - Party party = _plugin.getParty(player); - - if (party == null) - { - return; - } - - if(event.isDraggedByParty()) - { - return; - } - - event.setParty(party); - event.setCancel(true); - - if (!party.getOwner().equalsIgnoreCase(player.getName())) - { - Lang.NOT_OWNER_SERVER.send(player); - return; - } - - String server = event.getServer(); - if(server.equalsIgnoreCase("Lobby")) - { - return; - } - - _plugin.getJoinManager().requestServerJoin(event.getServer(), party); - } - - @EventHandler - public void onSend(PartySendToServerEvent event) - { - Party party = event.getParty(); - MinecraftServer server = event.getMinecraftServer(); - _plugin.getRedisManager().sendPartyInfo(server.getName(), party); - } - - @EventHandler - public void onClick(PlayerInteractEvent event) - { - if(event.hasItem() && event.getItem().getType() == Material.NAME_TAG) - { - event.setCancelled(true); - event.getPlayer().chat("/party"); - } - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java index 13d20aca5..a63ea6ff9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java @@ -1,38 +1,56 @@ package mineplex.core.party; -import com.google.common.collect.Maps; -import mineplex.core.MiniPlugin; -import mineplex.core.account.CoreClientManager; -import mineplex.core.common.util.C; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.party.command.PartyCommand; -import mineplex.core.party.manager.PartyInviteManager; -import mineplex.core.party.manager.PartyJoinManager; -import mineplex.core.party.manager.PartyMethodManager; -import mineplex.core.party.manager.PartyRedisManager; -import mineplex.core.portal.Portal; -import mineplex.core.preferences.PreferencesManager; -import mineplex.serverdata.Region; -import mineplex.serverdata.Utility; -import mineplex.serverdata.servers.ServerManager; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; - import java.io.File; +import java.util.HashMap; import java.util.Map; import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import com.google.common.collect.Maps; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.jsonchat.ChildJsonMessage; +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.HoverEvent; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilItem; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.menu.Menu; +import mineplex.core.party.command.PartyCommand; +import mineplex.core.party.constants.PartyRemoveReason; +import mineplex.core.party.manager.PartyInviteManager; +import mineplex.core.party.manager.PartyJoinManager; +import mineplex.core.party.manager.PartyRedisManager; +import mineplex.core.party.rediscommands.PartyCrossServerInviteAccept; +import mineplex.core.party.rediscommands.PartyCrossServerInviteCommand; +import mineplex.core.party.rediscommands.PartyCrossServerInviteDeny; +import mineplex.core.portal.Portal; +import mineplex.core.preferences.Preference; +import mineplex.core.preferences.PreferencesManager; +import mineplex.serverdata.Region; +import mineplex.serverdata.commands.ServerCommandManager; + public class PartyManager extends MiniPlugin { - /** * The item given to a player in his hotbar to manage the Parties via the new UI. */ - public static final ItemStack INTERFACE_ITEM = new ItemBuilder(Material.NAME_TAG).setTitle(C.cGreen + "Parties").build(); + public static final ItemStack INTERFACE_ITEM = new ItemBuilder(Material.NAME_TAG) + .setTitle(C.cGreen + "Parties") + .build(); + /** - * The slow to which it goes in. + * The slot to which it goes in. */ public static final int INTERFACE_SLOT = 5; @@ -43,66 +61,71 @@ public class PartyManager extends MiniPlugin private final PartyRedisManager _redisManager; private final PartyInviteManager _inviteManager; private final PartyJoinManager _joinManager; - private final PartyMethodManager _methodManager; /** * This local instance's name */ private final String _serverName; - /** - * A map of player's in parties server wide. - */ - private final Map _players = Maps.newHashMap(); + private final Map _partiesById = new HashMap<>(); + private final Map _partiesByPlayer = new HashMap<>(); - /** - * A map of owner (name) -> party server wide - */ - private final Map _parties = Maps.newHashMap(); private final Region _region; + /** + * Maps UUID of player to UUID of party that they're supposed to join + */ + private final Map _pendingJoinMap = new HashMap<>(); - public PartyManager(JavaPlugin plugin, Portal portal, CoreClientManager clientManager, PreferencesManager preferenceManager) + + public PartyManager() { - super("Parties", plugin); - _portal = portal; - _clientManager = clientManager; - _preferencesManager = preferenceManager; + super("Parties"); + _portal = require(Portal.class); + _clientManager = require(CoreClientManager.class); + _preferencesManager = require(PreferencesManager.class); - _serverName = _plugin.getConfig().getString("serverstatus.name"); + _serverName = UtilServer.getServerName(); - _redisManager = new PartyRedisManager(this, _serverName, - Utility.generatePool(ServerManager.getMasterConnection()), - Utility.generatePool(ServerManager.getSlaveConnection())); + _redisManager = new PartyRedisManager(this, _serverName); - _inviteManager = new PartyInviteManager(this, _redisManager); + _inviteManager = new PartyInviteManager(this); _joinManager = new PartyJoinManager(this); - _methodManager = new PartyMethodManager(this); - addCommand(new PartyCommand(this)); - new PartyEventListener(this); _region = !new File("eu.dat").exists() ? Region.US : Region.EU; } - public Party getParty(String party) + @Deprecated + public void putIntoPendingJoin(UUID player, UUID party) { - return _parties.get(party); + _pendingJoinMap.put(player, party); } - public Party getParty(Player player) + @Override + public void addCommands() { - return _players.get(player.getUniqueId()); + addCommand(new PartyCommand(this)); + } + + public Party getPartyByPlayer(UUID playerId) + { + return _partiesByPlayer.get(playerId); + } + + public Party getPartyById(UUID playerId) + { + return _partiesById.get(playerId); + } + + public Party getPartyByPlayer(Player player) + { + return _partiesByPlayer.get(player.getUniqueId()); } public void addParty(Party party) { - _parties.put(party.getName(), party); - } - - public void removeParty(Party party) - { - _parties.remove(party.getName()); + _partiesById.put(party.getUniqueId(), party); } public Portal getPortal() @@ -135,29 +158,425 @@ public class PartyManager extends MiniPlugin return _serverName; } - public PartyJoinManager getJoinManager() - { - return _joinManager; - } - - public PartyMethodManager getMethodManager() - { - return _methodManager; - } - - public Map getPlayerParties() - { - return _players; - } - - public Map getParties() - { - return _parties; - } - public Region getRegion() { return _region; } + public void denyInviteBySender(Player caller, String senderName) + { + PartyInviteManager inviteManager = getInviteManager(); + + if (!inviteManager.hasInviteFrom(caller, senderName)) + { + UtilPlayer.message(caller, F.main("Party", "You do not have a pending invite to " + F.elem(senderName) + "'s party.")); + return; + } + + InviteData invite = inviteManager.getInviteBySender(caller.getName(), senderName); + + inviteManager.removeInvite(caller, senderName); + + if (invite.getServerName().equals(_serverName)) + { + Player senderPlayer = Bukkit.getPlayerExact(senderName); + if (senderPlayer == null) + { + UtilPlayer.message(caller, F.main("Party", "You have denied your invite to " + F.elem(senderName) + "'s party, but it seems that " + F.elem(senderName) + " is no longer in this server")); + return; + } + + Party partyBySender = getPartyByPlayer(senderPlayer); + + if (partyBySender == null) + { + // todo send cancelled invitation msg when party is disbanded + UtilPlayer.message(caller, F.main("Party", "You have denied your invite to " + F.elem(senderPlayer.getName()) + "'s party, but it seems that " + F.elem(senderPlayer.getName()) + " has disbanded his party as well")); + return; + } + + UtilPlayer.message(caller, F.main("Party", "You have denied your invite to " + F.elem(senderPlayer.getName()) + "'s party")); + UtilPlayer.message(senderPlayer, F.main("Party", F.elem(caller.getName()) + " has denied your invite")); + } + else + { + Player senderPlayer = Bukkit.getPlayerExact(senderName); + if (senderPlayer != null) + { + UtilPlayer.message(caller, F.main("Party", "You have denied your invite to " + F.elem(senderPlayer.getName()) + "'s party, but it seems that " + F.elem(senderPlayer.getName()) + " has joined you in this server")); + return; + } + + UtilPlayer.message(caller, F.main("Party", "You have denied your invite to " + F.elem(senderName) + "'s party")); + + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteDeny( + caller.getName(), + caller.getUniqueId(), + invite.getInviterName(), + invite.getInviterUUID(), + invite.getPartyUUID() + )); + } + } + + public void acceptInviteBySender(Player caller, String senderName) + { + if (getPartyByPlayer(caller) != null) + { + caller.sendMessage(F.main("Party", "Please leave your party before accepting another invite!")); + return; + } + + PartyInviteManager inviteManager = getInviteManager(); + + if (!inviteManager.hasInviteFrom(caller, senderName)) + { + UtilPlayer.message(caller, F.main("Party", "You do not have a pending invite to " + F.elem(senderName) + "'s party.")); + return; + } + + InviteData invite = inviteManager.getInviteBySender(caller.getName(), senderName); + + inviteManager.removeInvite(caller, senderName); + + if (invite.getServerName().equals(_serverName)) + { + Player senderPlayer = Bukkit.getPlayerExact(senderName); + if (senderPlayer == null) + { + UtilPlayer.message(caller, F.main("Party", "It seems that " + F.elem(senderName) + " is no longer in this server")); + return; + } + + Party partyBySender = getPartyByPlayer(senderPlayer); + + if (partyBySender == null) + { + // todo send cancelled invitation msg when party is disbanded + UtilPlayer.message(caller, F.main("Party", "It seems that " + F.elem(senderName) + " has disbanded his party. Shucks!")); + return; + } + addToParty(caller, partyBySender); + } + else + { + Player senderPlayer = Bukkit.getPlayerExact(senderName); + if (senderPlayer != null) + { + // todo maybe auto create party (if there are no new desync issues) + UtilPlayer.message(caller, F.main("Party", "Strange. It seems that " + F.elem(senderName) + " has preemptively joined you in this server. They'll need to resend an invitation")); + return; + } + + UtilPlayer.message(caller, F.main("Party", "Please wait while I attempt to locate " + F.elem(invite.getInviterName()) + "...")); + + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteAccept( + caller.getName(), + caller.getUniqueId(), + invite.getInviterName(), + invite.getInviterUUID(), + invite.getPartyUUID() + )); + + runSyncLater(() -> + { + if (!caller.isOnline()) + { + return; + } + + UtilPlayer.message(caller, F.main("Party", "Uh oh. It looks like " + F.elem(invite.getInviterName()) + " has left the network - I couldn't find them!")); + }, 20 * 5L); + } + } + + /** + * @param caller The player who initiated the request + * @param target The player's target + */ + public void invite(Player caller, String target) + { + if (target.equalsIgnoreCase(caller.getName())) + { + caller.sendMessage(F.main("Party", "You cannot invite yourself!")); + return; + } + + Player possible = Bukkit.getPlayerExact(target); + + Party party = getPartyByPlayer(caller); + + // preemptively create party - it might be a slight inconvenience but it saves a lot of untangling work + if (party == null) + { + UtilPlayer.message(caller, F.main("Party", "You don't seem to have a party, so I've created a new one for you!")); + party = new Party(caller); + _partiesById.put(party.getUniqueId(), party); + addToParty(caller, party); + } + + if (!party.getOwnerName().equalsIgnoreCase(caller.getName())) + { + party.sendMessage(F.main("Party", F.elem(caller.getName()) + " has suggested " + F.elem(target) + " be invited")); + party.getOwnerAsPlayer().ifPresent(owner -> + { + ChildJsonMessage message = new ChildJsonMessage("").extra(F.main("Party", "Click ")); + message.add(F.link("Invite " + target)) + .hover(HoverEvent.SHOW_TEXT, C.cGreen + "Clicking this will invite " + C.cYellow + target + C.cGreen + " to the party") + .click(ClickEvent.RUN_COMMAND, "/party gui invite " + target); + message.add(C.mBody + " to invite them"); + message.sendToPlayer(owner); + }); + return; + } + if (party.getMembers().size() >= party.getSize()) + { + Lang.PARTY_FULL.send(caller); + return; + } + if (possible != null && party.isMember(possible)) + { + Lang.ALREADY_MEMBER.send(caller, target); + return; + } + if (getInviteManager().getInviteBySender(target, caller.getName()) != null) + { + Lang.ALREADY_INVITED.send(caller, target); + return; + } + if (possible != null && !getPreferencesManager().get(possible).isActive(Preference.PARTY_REQUESTS)) + { + UtilPlayer.message(caller, F.main("Party", F.name(target) + " is not accepting invites at this time.")); + return; + } + + //Same Server + if (possible != null) + { + Lang.SUCCESS_INVITE.send(party, caller.getName(), target); + getInviteManager().inviteTo(possible.getName(), possible.getUniqueId(), caller.getName(), caller.getUniqueId(), party.getUniqueId(), getServerName()); + } + else + { + findAndInvite(caller, target, party); + } + } + + /** + * Initiates inviting a player who is no on the same server + */ + private void findAndInvite(Player caller, String target, Party destParty) + { + Map pendingInvites = getRedisManager().getPendingFindResponse().computeIfAbsent(caller.getUniqueId(), key -> new HashMap<>()); + if (!pendingInvites.containsKey(target)) + { + caller.sendMessage(F.main("Party", "Attempting to invite " + F.elem(target) + "...")); + pendingInvites.put(target, runSyncLater(new BukkitRunnable() + { + @Override + public void run() + { + if (!pendingInvites.containsKey(target)) + { + return; + } + pendingInvites.remove(target); + if (!caller.isOnline()) + { + return; + } + + Player targetPlayer = Bukkit.getPlayerExact(target); + if (targetPlayer != null) + { + UtilPlayer.message(caller, F.main("Party", "Huh. We couldn't find " + F.elem(target) + ", but it seems they've joined you in your server")); + return; + } + + caller.sendMessage(F.main("Party", "Could not locate " + F.elem(target) + ".")); + } + }, 20L * 5)); + + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteCommand(caller, target, destParty)); + } + else + { + caller.sendMessage(F.main("Party", "Please wait until the previous invite has completed")); + } + } + + public Party getPendingParty(Player player) + { + UUID partyUUID = _pendingJoinMap.get(player.getUniqueId()); + if (partyUUID == null) return null; + for (Party party : _partiesById.values()) + { + if (party.getUniqueId().equals(partyUUID)) + return party; + } + return null; + } + + public boolean hasPendingJoin(Player player) + { + return _pendingJoinMap.containsKey(player.getUniqueId()); + } + + public void removePendingJoin(Player player) + { + _pendingJoinMap.remove(player.getUniqueId()); + } + + public void removePendingJoin(UUID player) + { + _pendingJoinMap.remove(player); + } + + /** + * Kicks a player from the callers party + * + * @param caller The player who initiated the request + * @param target The player's target + */ + public void kickPlayer(Player caller, String target) + { + Party party = getPartyByPlayer(caller); + + if (party == null) + { + Lang.NO_PARTY.send(caller); + return; + } + + if (!party.isOwner(caller)) + { + Lang.NOT_OWNER.send(caller); + return; + } + + Player playerTarget = Bukkit.getPlayerExact(target); + + if (playerTarget == null) + { + Lang.NOT_MEMBER.send(caller, target); + return; + } + + if (!party.isMember(playerTarget)) + { + Lang.NOT_MEMBER.send(caller, target); + return; + } + + removeFromParty(playerTarget, PartyRemoveReason.KICKED); + } + + public void addToParty(Player player, Party party) + { + _partiesByPlayer.put(player.getUniqueId(), party); + party.addMember(player); + } + + /** + * Leaves the players current party if he is in one + * + * @param caller The player who wishes to leave his party + */ + public void leaveParty(Player caller) + { + Party party = getPartyByPlayer(caller); + + if (party == null) + { + Lang.NO_PARTY.send(caller); + return; + } + + removeFromParty(caller, PartyRemoveReason.LEFT); + Lang.LEFT.send(caller); + } + + public void removeFromParty(Player player, PartyRemoveReason reason) + { + Party party = _partiesByPlayer.remove(player.getUniqueId()); + + if (party == null) + { + return; + } + + if (player.getOpenInventory() != null) + { + if (Menu.get(player.getUniqueId()) != null) + { + player.closeInventory(); + Menu.remove(player.getUniqueId()); + } + } + + switch (reason) + { + case KICKED: + Lang.REMOVE_PLAYER_KICK.send(party, player.getName()); + break; + case LEFT: + Lang.REMOVE_PLAYER.send(party, player.getName()); + break; + case OTHER: + break; + case DISBANDED: + break; + case DISBANDED_BY_OWNER: + break; + } + + party.removeMember(player); + + if (party.getMembers().size() == 0) + { + removeParty(party); + } + } + + /** + * Disbands a player's current party + * + * @param caller The player who wishes to disband his party + */ + public void disband(Player caller) + { + Party party = getPartyByPlayer(caller); + + if (party == null) + { + Lang.NO_PARTY.send(caller); + return; + } + + if (!party.isOwner(caller)) + { + Lang.NOT_OWNER.send(caller); + return; + } + + caller.sendMessage(F.main("Party", "You have disbanded your party.")); + Lang.DISBANDED_BY_OWNER.send(party); + removeParty(party); + } + + public void removeParty(Party party) + { + _joinManager.removePendingJoin(party); + _partiesById.remove(party.getUniqueId()); + _partiesByPlayer.entrySet().removeIf(ent -> ent.getValue().equals(party)); + party.clear(); + } + + public void giveItemIfNotExists(Player player) + { + if (!UtilItem.isSimilar(player.getInventory().getItem(INTERFACE_SLOT), INTERFACE_ITEM, UtilItem.ItemAttribute.NAME, UtilItem.ItemAttribute.MATERIAL)) + { + player.getInventory().setItem(PartyManager.INTERFACE_SLOT, PartyManager.INTERFACE_ITEM); + } + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCLICommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCLICommand.java new file mode 100644 index 000000000..a5cdc12e6 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCLICommand.java @@ -0,0 +1,159 @@ +package mineplex.core.party.command; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; + +import org.bukkit.entity.Player; + +import mineplex.core.command.MultiCommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.core.party.command.cli.PartyAcceptCommand; +import mineplex.core.party.command.cli.PartyDenyCommand; +import mineplex.core.party.command.cli.PartyDisbandCommand; +import mineplex.core.party.command.cli.PartyHelpCommand; +import mineplex.core.party.command.cli.PartyInviteCommand; +import mineplex.core.party.command.cli.PartyInvitesCommand; +import mineplex.core.party.command.cli.PartyKickCommand; +import mineplex.core.party.command.cli.PartyLeaveCommand; +import mineplex.core.party.command.cli.PartyTransferOwnerCommand; + +public class PartyCLICommand extends MultiCommandBase +{ + public PartyCLICommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "cli", "c"); + + AddCommand(new PartyAcceptCommand(plugin)); + AddCommand(new PartyDenyCommand(plugin)); + AddCommand(new PartyDisbandCommand(plugin)); + AddCommand(new PartyInviteCommand(plugin)); + AddCommand(new PartyInvitesCommand(plugin)); + AddCommand(new PartyKickCommand(plugin)); + AddCommand(new PartyLeaveCommand(plugin)); + AddCommand(new PartyTransferOwnerCommand(plugin)); + AddCommand(new PartyHelpCommand(plugin)); + } + + @Override + protected void Help(Player caller, String[] args) + { + Party party = Plugin.getPartyByPlayer(caller); + + if (args.length > 0) + { + UtilPlayer.message(caller, F.main("Party", "That is not a valid command! Try " + F.elem("/party help") + "!")); + return; + } + + if (party == null) + { + UtilPlayer.message(caller, F.main("Party", "You're not in a party! Try " + F.elem("/party help") + "!")); + return; + } + + ComponentBuilder builder = new ComponentBuilder("") + .append("[", ComponentBuilder.FormatRetention.NONE) + .bold(true) + .color(ChatColor.AQUA) + .append("?", ComponentBuilder.FormatRetention.NONE) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to view Party Help").create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z help")) + .append("]", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.AQUA) + .bold(true) + .append("===========", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.AQUA) + .bold(true) + .strikethrough(true) + .append("[", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.AQUA) + .bold(true) + .append("Your Party", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.WHITE) + .bold(true) + .append("]", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.AQUA) + .bold(true) + .append("==============", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.AQUA) + .bold(true) + .strikethrough(true) + .append("\n\n", ComponentBuilder.FormatRetention.NONE); + + builder.append("Leader") + .color(party.getOwnerAsPlayer() == null ? ChatColor.GRAY : ChatColor.LIGHT_PURPLE) + .bold(true) + .append(" ", ComponentBuilder.FormatRetention.NONE) + .append(party.getOwnerName()) + .append("\n"); + + for (Player member : party.getMembers()) + { + if (member.getUniqueId().equals(party.getOwner().getId())) + continue; + + builder.append("Member") + .color(ChatColor.DARK_PURPLE) + .bold(true) + .append(" ", ComponentBuilder.FormatRetention.NONE) + .append(member.getName()); + + if (party.isOwner(caller)) + { + builder.append(" ", ComponentBuilder.FormatRetention.NONE) + .append("✕", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.RED) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Kick " + member.getName() + " from your party").color(ChatColor.RED).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z cli kick " + member.getName())) + .append(" ", ComponentBuilder.FormatRetention.NONE) + .append("⬆", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.GOLD) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Transfer party to " + member.getName()).color(ChatColor.GOLD).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z cli tr " + member.getName())); + } + + builder.append("\n", ComponentBuilder.FormatRetention.NONE); + } + + builder.append("\n", ComponentBuilder.FormatRetention.NONE); + + builder.append("Toggle GUI") + .color(ChatColor.GREEN) + .bold(true) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Switch to the chest GUI instead of chat").color(ChatColor.GREEN).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z t")) + .append(" - ", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.GRAY) + .append("Leave") + .color(ChatColor.RED) + .bold(true) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Leave your party").color(ChatColor.RED).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z cli leave")); + + if (party.isOwner(caller)) + { + builder + .append(" - ") + .color(ChatColor.GRAY) + .append("Disband") + .color(ChatColor.DARK_RED) + .bold(true) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Disband your party").color(ChatColor.DARK_RED).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/z cli disband")); + } + + builder.append("\n", ComponentBuilder.FormatRetention.NONE) + .append("======================================") + .color(ChatColor.AQUA) + .bold(true) + .strikethrough(true); + + caller.spigot().sendMessage(builder.create()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCommand.java index 152a4eeaf..b86ec8059 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyCommand.java @@ -1,95 +1,54 @@ package mineplex.core.party.command; -import mineplex.core.command.CommandBase; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import mineplex.core.party.ui.menus.PartyInvitesMenu; -import mineplex.core.party.ui.menus.PartyMainMenu; -import mineplex.core.party.ui.menus.PartyOwnerMenu; -import mineplex.core.party.ui.menus.PartyViewMenu; +import java.util.Arrays; + import org.bukkit.entity.Player; +import mineplex.core.Managers; +import mineplex.core.command.MultiCommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; +import mineplex.core.preferences.Preference; +import mineplex.core.preferences.PreferencesManager; + /** * Command handler for party commands */ -public class PartyCommand extends CommandBase +public class PartyCommand extends MultiCommandBase { - - private final String[] HELP = { - F.main("Party", "Party Commands (Click the command!)"), - help("", "Brings up the Party GUI"), - help("", "Send an invitation to a player."), - help("leave", "Leave your current party."), - C.cBlue + "Party> " + C.cWhite + "# " + C.cGray + "- Send a message to your party.", - C.cGreenB + "All party functions have been moved to the GUI!", - C.cGreenB + "Click the NameTag in your hotbar to get started!" - }; + private final PreferencesManager _preferencesManager = Managers.require(PreferencesManager.class); public PartyCommand(PartyManager plugin) { - super(plugin, Rank.ALL, "party", "z", "partyaccept", "partydeny", "openinvitesmenu", "partyinvite"); + super(plugin, Rank.ALL, "party", "z"); + + AddCommand(new PartyGuiCommand(plugin)); + AddCommand(new PartyCLICommand(plugin)); + AddCommand(new PartyToggleCommand(plugin)); } @Override - public void Execute(Player caller, String[] args) + protected void Help(Player caller, String[] args) { - if (args.length == 0) + if (args.length > 0) { - if(_aliasUsed.equalsIgnoreCase("openinvitesmenu")) + if (!args[0].equalsIgnoreCase("cli") && !args[0].equalsIgnoreCase("gui")) { - new PartyInvitesMenu(Plugin).open(caller); - return; + String[] newArgs = new String[args.length + 1]; + System.arraycopy(args, 0, newArgs, 1, args.length); + newArgs[0] = _preferencesManager.get(caller).isActive(Preference.PARTY_DISPLAY_INVENTORY_UI) ? "gui" : "cli"; + args = newArgs; } - Party party = Plugin.getParty(caller); - if (party == null) - { - new PartyMainMenu(Plugin).open(caller); - return; - } - if (party.getOwner().equalsIgnoreCase(caller.getName())) - { - new PartyOwnerMenu(party, Plugin).open(caller); - return; - } - new PartyViewMenu(party, Plugin).open(caller); - return; } - - if(args.length == 1) + else { - String arg = args[0]; - if (_aliasUsed.equalsIgnoreCase("partyaccept")) - { - Plugin.getMethodManager().respondToInvite(caller, arg, true); - return; - } - if (_aliasUsed.equalsIgnoreCase("partydeny")) - { - Plugin.getMethodManager().respondToInvite(caller, arg, false); - return; - } - if(_aliasUsed.equalsIgnoreCase("partyinvite")) - { - Plugin.getMethodManager().invite(caller, arg); - return; - } - if(arg.equalsIgnoreCase("leave")) { - Plugin.getMethodManager().leaveParty(caller); - return; - } - Plugin.getMethodManager().invite(caller, arg); - return; + String[] newArgs = new String[1]; + newArgs[0] = _preferencesManager.get(caller).isActive(Preference.PARTY_DISPLAY_INVENTORY_UI) ? "gui" : "cli"; + args = newArgs; } - caller.sendMessage(HELP); + Execute(caller, args); } - - private String help(String command, String description) - { - return C.cBlue + "Party> " + C.cWhite + "/party " + command + C.cGray + " - " + description; - } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyGuiCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyGuiCommand.java new file mode 100644 index 000000000..a22589667 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyGuiCommand.java @@ -0,0 +1,56 @@ +package mineplex.core.party.command; + +import org.bukkit.entity.Player; + +import mineplex.core.command.MultiCommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.core.party.command.gui.PartyGUIAcceptInviteCommand; +import mineplex.core.party.command.gui.PartyGUIDenyInviteCommand; +import mineplex.core.party.command.gui.PartyGUIInviteCommand; +import mineplex.core.party.command.gui.PartyGUILeaveCommand; +import mineplex.core.party.command.gui.PartyOpenInviteMenuCommand; +import mineplex.core.party.ui.menus.PartyMainMenu; +import mineplex.core.party.ui.menus.PartyOwnerMenu; +import mineplex.core.party.ui.menus.PartyViewMenu; + +public class PartyGuiCommand extends MultiCommandBase +{ + public PartyGuiCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "gui", "g"); + + AddCommand(new PartyOpenInviteMenuCommand(plugin)); + AddCommand(new PartyGUIAcceptInviteCommand(plugin)); + AddCommand(new PartyGUIDenyInviteCommand(plugin)); + AddCommand(new PartyGUIInviteCommand(plugin)); + AddCommand(new PartyGUILeaveCommand(plugin)); + } + + // a hacky method for a hacky original system + @Override + protected void Help(Player caller, String[] args) + { + if (args.length == 0) + { + Party party = Plugin.getPartyByPlayer(caller); + if (party == null) + { + new PartyMainMenu(Plugin).open(caller); + } + else if (party.getOwnerName().equalsIgnoreCase(caller.getName())) + { + new PartyOwnerMenu(party, Plugin).open(caller); + } + else + { + new PartyViewMenu(party, Plugin).open(caller); + } + } + else if (args.length == 1) + { + Plugin.invite(caller, args[0]); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyToggleCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyToggleCommand.java new file mode 100644 index 000000000..ff61eef79 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/PartyToggleCommand.java @@ -0,0 +1,37 @@ +package mineplex.core.party.command; + +import org.bukkit.entity.Player; + +import mineplex.core.Managers; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; +import mineplex.core.preferences.Preference; +import mineplex.core.preferences.PreferencesManager; + +public class PartyToggleCommand extends CommandBase +{ + private final PreferencesManager _preferencesManager = Managers.require(PreferencesManager.class); + + public PartyToggleCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "toggle", "t"); + } + + @Override + public void Execute(Player caller, String[] args) + { + _preferencesManager.get(caller).toggle(Preference.PARTY_DISPLAY_INVENTORY_UI); + if (_preferencesManager.get(caller).isActive(Preference.PARTY_DISPLAY_INVENTORY_UI)) + { + UtilPlayer.message(caller, F.main("Party", "The Party GUI is now " + C.cGreen + "enabled" + C.mBody + "!")); + } + else + { + UtilPlayer.message(caller, F.main("Party", "The Party GUI is now " + C.cRed + "disabled" + C.mBody + "!")); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/TeamPreferenceCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/TeamPreferenceCommand.java deleted file mode 100644 index ad27de3fa..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/command/TeamPreferenceCommand.java +++ /dev/null @@ -1,167 +0,0 @@ -package mineplex.core.party.command; - -import com.google.common.collect.Maps; -import mineplex.core.command.CommandBase; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.game.GameDisplay; -import mineplex.core.party.Lang; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.Map; -import java.util.UUID; - -/** - * Unused for now. - */ -public class TeamPreferenceCommand extends CommandBase -{ - - private static final String[] ARGS = { - "teampref", - "teamprefs", - "teamp", - "tprefs", - "teampreferences" - }; - - private final String ACCEPT = "accept"; - private final String DENY = "deny"; - - private final String ACCEPT_COMMAND = "/teamprefs accept "; - private final String DENY_COMMAND = "/teamprefs deny "; - - private final String HEADER = "Partners"; - - //Player, Partner, GameName - private Map> INVITES = Maps.newHashMap(); - - public TeamPreferenceCommand(PartyManager plugin) - { - super(plugin, Rank.ALL, ARGS); - } - - @Override - public void Execute(Player player, String[] args) - { - if (args.length < 2) - { - Lang.PARTNER_USAGE.sendHeader(player, HEADER); - return; - } - - String arg = args[0]; - - if (arg.equalsIgnoreCase(ACCEPT) || arg.equalsIgnoreCase(DENY)) - { - Party party = Plugin.getParty(player); - - if (party == null) - { - Lang.NO_PARTY.send(player); - return; - } - - String inviter = args[1]; - boolean accept = arg.equalsIgnoreCase(ACCEPT); - Player inviterPlayer = Bukkit.getPlayerExact(inviter); - - if (inviterPlayer == null) - { - Lang.PARTNER_NOT_ONLINE.sendHeader(player, HEADER, inviter); - return; - } - - Map sent = INVITES.get(inviterPlayer.getUniqueId()); - - if (sent == null || sent.isEmpty()) - { - Lang.PARTNER_PLAYER_NOT_REQUESTED.sendHeader(player, HEADER, inviter); - return; - } - - if (sent.get(player.getName()) == null) - { - Lang.PARTNER_PLAYER_NOT_REQUESTED.sendHeader(player, HEADER, inviter); - return; - } - - String gameName = sent.remove(player.getName()); - - if (!accept) - { - Lang.PARTNER_REQUEST_DENIED_PLAYER.send(player, inviterPlayer.getName(), gameName); - Lang.PARTNER_REQUEST_DENIED_SENDER.send(inviterPlayer, player.getName(), gameName); - return; - } - - Lang.PARTNER_REQUEST_ACCEPT_PLAYER.send(player, inviterPlayer.getName(), gameName); - Lang.PARTNER_REQUEST_ACCEPT_SENDER.send(inviterPlayer, player.getName(), gameName); - party.setPartner(player, gameName, inviterPlayer.getName()); - party.setPartner(inviterPlayer, gameName, player.getName()); - return; - } - - Player target = Bukkit.getPlayerExact(arg); - String gameName = ""; - String[] game = new String[args.length - 2]; - System.arraycopy(args, 2, game, 0, game.length); - - for (String s : game) - { - gameName += s + " "; - } - - gameName = gameName.trim(); - - GameDisplay gameDisplay = GameDisplay.matchName(gameName); - - if (gameDisplay == null) - { - Lang.PARTNER_NO_GAME.sendHeader(player, HEADER, gameName); - return; - } - - gameName = gameDisplay.getName(); - - if (alreadyInvited(player, gameName, target.getName())) - { - Lang.PARTNER_ALREADY_INVITED.sendHeader(player, HEADER, target.getName(), gameName); - return; - } - - sendRequest(player, gameName, target); - } - - private void sendRequest(Player player, String game, Player partner) - { - invite(player, game, partner); - String gameName = C.cGreen + (game); - String playerName = C.cGreen + (player.getName()); - String partnerName = C.cGreen + (partner.getName()); - String acceptCommand = ACCEPT_COMMAND + player.getName(); - String declineCommand = DENY_COMMAND + player.getName(); - String acceptText = Lang.PARTNER_HOVER_TEXT_ACCEPT.toString(playerName, gameName); - String declineText = Lang.PARTNER_HOVER_TEXT_DENY.toString(playerName, gameName); - Lang.PARTNER_REQUEST_SENT.sendHeader(player, HEADER, partnerName, gameName); - Lang.PARTNER_REQUEST_RECEIVED.sendHeader(partner, HEADER, playerName, gameName); - UtilPlayer.sendAcceptOrDeny(partner, HEADER, acceptCommand, acceptText, declineCommand, declineText, null, null); - } - - private boolean alreadyInvited(Player player, String game, String partner) - { - Map sent = INVITES.get(player.getUniqueId()); - return !(sent == null || sent.isEmpty()) && sent.get(partner).equalsIgnoreCase(game); - } - - private void invite(Player player, String game, Player partner) - { - Map sent = INVITES.getOrDefault(player.getUniqueId(), Maps.newHashMap()); - sent.put(partner.getName(), game); - INVITES.put(player.getUniqueId(), sent); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyAcceptCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyAcceptCommand.java new file mode 100644 index 000000000..4e6da0969 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyAcceptCommand.java @@ -0,0 +1,30 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; + +public class PartyAcceptCommand extends CommandBase +{ + public PartyAcceptCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "accept", "a"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify whose invite you're accepting!")); + return; + } + + Plugin.acceptInviteBySender(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyBlockCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyBlockCommand.java new file mode 100644 index 000000000..902dada8c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyBlockCommand.java @@ -0,0 +1,21 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.PartyManager; + +public class PartyBlockCommand extends CommandBase +{ + public PartyBlockCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "block", "b"); + } + + @Override + public void Execute(Player caller, String[] args) + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDenyCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDenyCommand.java new file mode 100644 index 000000000..051f03a36 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDenyCommand.java @@ -0,0 +1,28 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyDenyCommand extends CommandBase +{ + public PartyDenyCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "deny", "d"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify whose invite you're denying!")); + return; + } + Plugin.denyInviteBySender(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDisbandCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDisbandCommand.java new file mode 100644 index 000000000..0d1265b58 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyDisbandCommand.java @@ -0,0 +1,21 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.PartyManager; + +public class PartyDisbandCommand extends CommandBase +{ + public PartyDisbandCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "disband", "db"); + } + + @Override + public void Execute(Player caller, String[] args) + { + Plugin.disband(caller); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyHelpCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyHelpCommand.java new file mode 100644 index 000000000..31626f8ac --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyHelpCommand.java @@ -0,0 +1,34 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyHelpCommand extends CommandBase +{ + public PartyHelpCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "help", "h"); + } + + @Override + public void Execute(Player caller, String[] args) + { + UtilPlayer.message(caller, F.main("Party", "Parties Help")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [help/h]") + " - Shows this help dialog")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [invite/i] [player]") + " - Invite [player] to your party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [invites/is] (page)") + " - List your current pending invitations")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [kick/k] [player]") + " - Kick [player] from your party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [accept/a] [player]") + " - Accept your invitation to [player]'s party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [deny/d] [player]") + " - Deny your invitation to [player]'s party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [leave/l]") + " - Leave your current party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [disband/db]") + " - Disband your current party")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [transfer/tr] [player]") + " - Transfers ownership of the party to another player")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [gui/g]") + " - Opens the party GUI")); + UtilPlayer.message(caller, F.main("Party", F.elem("/party [toggle/t]") + " - Toggles between the GUI and the chat")); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInviteCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInviteCommand.java new file mode 100644 index 000000000..4fbaceb44 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInviteCommand.java @@ -0,0 +1,28 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyInviteCommand extends CommandBase +{ + public PartyInviteCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "invite", "i"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify who to invite!")); + return; + } + Plugin.invite(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInvitesCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInvitesCommand.java new file mode 100644 index 000000000..09dd58e77 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyInvitesCommand.java @@ -0,0 +1,200 @@ +package mineplex.core.party.command.cli; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.UUID; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.InviteData; +import mineplex.core.party.PartyManager; + +public class PartyInvitesCommand extends CommandBase +{ + private static int boostCount = 0; + + public PartyInvitesCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "invites", "is"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 2 && args[0].equals("boost")) + { + boostCount = Integer.parseInt(args[1]); + return; + } + + List invites = Plugin.getInviteManager().getAllInvites(caller); + + invites.sort(Comparator.comparing(InviteData::getInviterName)); + + if (boostCount != 0) + { + invites = new ArrayList<>(); + + for (int i = 0; i < boostCount; i++) + { + invites.add(new InviteData("Player" + i, UUID.randomUUID(), UUID.randomUUID(), "Server" + i)); + } + } + + if (invites == null || invites.isEmpty()) + { + UtilPlayer.message(caller, F.main("Party", "You have no pending invites!")); + return; + } + + int totalPages = (int) Math.ceil(invites.size() / 8.0); + int page = 0; + + if (args.length != 0) + { + try + { + page = Integer.parseInt(args[0]); + } + catch (NumberFormatException ex) + { + UtilPlayer.message(caller, F.main("Party", F.elem(args[0]) + " is not a number!")); + return; + } + page = page - 1; + + if (page < 0) + { + UtilPlayer.message(caller, F.main("Party", "Page numbers must be greater than zero!")); + return; + } + else if (page >= totalPages) + { + UtilPlayer.message(caller, F.main("Party", "You only have " + F.elem(totalPages) + " pages of invites, that number is too big!")); + return; + } + } + + String header = "[" + + ChatColor.RESET + C.cWhite + C.Bold + "Party Invites (" + (page + 1) + "/" + totalPages + ")" + + ChatColor.RESET + C.cAqua + C.Strike + "]"; + + int headerChars = ChatColor.stripColor(header).length(); + + int numEqualsInHeader = (50 - headerChars) / 2; + header = C.cAqua + C.Strike + StringUtils.repeat("=", numEqualsInHeader) + header + StringUtils.repeat("=", numEqualsInHeader); + + caller.sendMessage(header); + + int start = page * 8; + + List subList = start < invites.size() ? invites.subList(start, Math.min(invites.size(), start + 8)) : Collections.emptyList(); + + for (InviteData data : subList) + { + BaseComponent[] hover = new ComponentBuilder("") + .append("Server: ") + .color(ChatColor.YELLOW) + .append(data.getServerName(), ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.WHITE) + .create(); + + ComponentBuilder builder = new ComponentBuilder("") + .append("Accept") + .color(ChatColor.GREEN) + .bold(true) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to accept this invite").color(ChatColor.GREEN).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/party cli a " + data.getInviterName())) + .append(" - ", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.WHITE) + .append("Deny") + .color(ChatColor.RED) + .bold(true) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to deny this invite").color(ChatColor.RED).create())) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/party cli d " + data.getInviterName())) + .append(" - ", ComponentBuilder.FormatRetention.NONE) + .color(ChatColor.WHITE) + .append(data.getInviterName() + " invited you to their party") + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hover)) + .color(ChatColor.GRAY); + + caller.spigot().sendMessage(builder.create()); + } + + int chars = ChatColor.stripColor(header).length(); + + int numEquals = (chars - 5) / 2; // 5 chars: " < > " + + ComponentBuilder pageSwitch = new ComponentBuilder("") + .append(StringUtils.repeat("=", numEquals) + "[") + .strikethrough(true) + .color(ChatColor.AQUA) + .append(" ", ComponentBuilder.FormatRetention.NONE) + .append("<", ComponentBuilder.FormatRetention.NONE) + .bold(true); + + if (page > 0) + { + BaseComponent[] prev = new ComponentBuilder("") + .append("Go to page " + page) + .color(ChatColor.GREEN) + .create(); + + pageSwitch + .color(ChatColor.GREEN) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/party is " + (page))) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, prev)); + + } + else + { + pageSwitch + .color(ChatColor.GRAY); + } + + pageSwitch.append(" ", ComponentBuilder.FormatRetention.NONE) + .append(">", ComponentBuilder.FormatRetention.NONE) + .bold(true); + + if (page + 1 < totalPages) + { + BaseComponent[] next = new ComponentBuilder("") + .append("Go to page " + (page + 2)) + .color(ChatColor.GREEN) + .create(); + + pageSwitch + .color(ChatColor.GREEN) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/party is " + (page + 2))) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, next)); + + } + else + { + pageSwitch + .color(ChatColor.GRAY); + } + + pageSwitch + .append(" ", ComponentBuilder.FormatRetention.NONE) + .append("]" + StringUtils.repeat("=", numEquals), ComponentBuilder.FormatRetention.NONE) + .strikethrough(true) + .color(ChatColor.AQUA); + + caller.spigot().sendMessage(pageSwitch.create()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyKickCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyKickCommand.java new file mode 100644 index 000000000..7eda98171 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyKickCommand.java @@ -0,0 +1,29 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; + +public class PartyKickCommand extends CommandBase +{ + public PartyKickCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "kick", "k"); + } + + @Override + public void Execute(Player caller, String[] args) + { + Party party = Plugin.getPartyByPlayer(caller); + if (party != null) + { + if (party.getOwnerName().equals(caller.getName())) + { + Plugin.kickPlayer(caller, args[0]); + } + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyLeaveCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyLeaveCommand.java new file mode 100644 index 000000000..90b9f305c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyLeaveCommand.java @@ -0,0 +1,21 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.PartyManager; + +public class PartyLeaveCommand extends CommandBase +{ + public PartyLeaveCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "leave", "l"); + } + + @Override + public void Execute(Player caller, String[] args) + { + Plugin.leaveParty(caller); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyTransferOwnerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyTransferOwnerCommand.java new file mode 100644 index 000000000..e91242635 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/cli/PartyTransferOwnerCommand.java @@ -0,0 +1,60 @@ +package mineplex.core.party.command.cli; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.Lang; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; + +public class PartyTransferOwnerCommand extends CommandBase +{ + public PartyTransferOwnerCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "transfer", "tr"); + } + + @Override + public void Execute(Player caller, String[] args) + { + Party playerParty = Plugin.getPartyByPlayer(caller); + + if (playerParty == null) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You're not in a party!")); + return; + } + + if (!playerParty.getOwner().getId().equals(caller.getUniqueId())) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You're not the owner of the party!")); + return; + } + + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify who you're transferring the party to!")); + return; + } + + Player player = Bukkit.getPlayer(args[0]); + if (player == null) + { + UtilPlayer.message(caller, F.main("Party", "Could not find " + F.elem(args[0]) + "!")); + return; + } + + if (!playerParty.isMember(player)) + { + UtilPlayer.message(caller, F.main("Party", "Oops. " + F.elem(player.getName())+ " is not in your party!")); + return; + } + + playerParty.setOwner(player); + Lang.TRANSFER_OWNER.send(playerParty, caller.getName(), player.getName()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIAcceptInviteCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIAcceptInviteCommand.java new file mode 100644 index 000000000..5a182b060 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIAcceptInviteCommand.java @@ -0,0 +1,29 @@ +package mineplex.core.party.command.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyGUIAcceptInviteCommand extends CommandBase +{ + public PartyGUIAcceptInviteCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "partyaccept", "accept", "a"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify whose invite you're accepting!")); + return; + } + + Plugin.acceptInviteBySender(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIDenyInviteCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIDenyInviteCommand.java new file mode 100644 index 000000000..f77d078a0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIDenyInviteCommand.java @@ -0,0 +1,28 @@ +package mineplex.core.party.command.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyGUIDenyInviteCommand extends CommandBase +{ + public PartyGUIDenyInviteCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "partydeny", "deny", "d"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify whose invite you're denying!")); + return; + } + Plugin.denyInviteBySender(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIInviteCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIInviteCommand.java new file mode 100644 index 000000000..0fbed629a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUIInviteCommand.java @@ -0,0 +1,29 @@ +package mineplex.core.party.command.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; + +public class PartyGUIInviteCommand extends CommandBase +{ + public PartyGUIInviteCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "partyinvite", "invite", "i"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + UtilPlayer.message(caller, F.main("Party", "Oops. You didn't specify who to invite!")); + return; + } + Plugin.invite(caller, args[0]); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUILeaveCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUILeaveCommand.java new file mode 100644 index 000000000..e4858300b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyGUILeaveCommand.java @@ -0,0 +1,23 @@ +package mineplex.core.party.command.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.PartyManager; + +public class PartyGUILeaveCommand extends CommandBase +{ + public PartyGUILeaveCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "leave", "l"); + } + + @Override + public void Execute(Player caller, String[] args) + { + Plugin.leaveParty(caller); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyOpenInviteMenuCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyOpenInviteMenuCommand.java new file mode 100644 index 000000000..0064e920c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/command/gui/PartyOpenInviteMenuCommand.java @@ -0,0 +1,22 @@ +package mineplex.core.party.command.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.party.PartyManager; +import mineplex.core.party.ui.menus.PartyInvitesMenu; + +public class PartyOpenInviteMenuCommand extends CommandBase +{ + public PartyOpenInviteMenuCommand(PartyManager plugin) + { + super(plugin, Rank.ALL, "openinvitesmenu", "invitesmenu", "im", "invites", "is"); + } + + @Override + public void Execute(Player caller, String[] args) + { + new PartyInvitesMenu(Plugin).open(caller); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/constants/InviteResponse.java b/Plugins/Mineplex.Core/src/mineplex/core/party/constants/InviteResponse.java deleted file mode 100644 index 30212e51d..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/constants/InviteResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package mineplex.core.party.constants; - -import mineplex.core.common.util.F; - -/** - * - */ -public enum InviteResponse -{ - - ACCEPTED("{0} has joined the party!"), - DENIED("{0} has declined joining your party."), - EXPIRED("{0} did not respond in time."); - - private String _message; - - InviteResponse(String message) - { - _message = message; - } - - public String format(String target) - { - return _message.replace("{0}", F.name(target)); - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/constants/JoinResponseReason.java b/Plugins/Mineplex.Core/src/mineplex/core/party/constants/JoinResponseReason.java deleted file mode 100644 index 56cd100e2..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/constants/JoinResponseReason.java +++ /dev/null @@ -1,26 +0,0 @@ -package mineplex.core.party.constants; - -import mineplex.core.common.util.F; - -/** - * - */ -public enum JoinResponseReason -{ - - CANNOT_JOIN_FULL(F.main("Party", "Your party cannot join full servers!")), - SUCCESS(""); - - private String _message; - - JoinResponseReason(String message) - { - _message = message; - } - - public String getMessage() - { - return _message; - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyDataReceivedEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyDataReceivedEvent.java deleted file mode 100644 index d4d25f699..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyDataReceivedEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package mineplex.core.party.event; - -import mineplex.core.party.Party; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * An event called when a server receives a PartyPacket containing the information about a party - */ -public class PartyDataReceivedEvent extends Event -{ - private static final HandlerList HANDLER_LIST = new HandlerList(); - - private final Party _party; - - public PartyDataReceivedEvent(Party party) - { - _party = party; - } - - public Party getParty() - { - return _party; - } - - @Override - public HandlerList getHandlers() - { - return HANDLER_LIST; - } - - public static HandlerList getHandlerList() - { - return HANDLER_LIST; - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyMemberKickGUIEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyMemberKickGUIEvent.java deleted file mode 100644 index 885567240..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyMemberKickGUIEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package mineplex.core.party.event; - -import mineplex.core.party.Party; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * This event is called when an owner clicks a PartyMemberIcon while having Kick mode activated. - */ -public class PartyMemberKickGUIEvent extends Event -{ - private static final HandlerList HANDLER_LIST = new HandlerList(); - - private final Party _party; - private final String _playerClicked; - private final Player _owner; - - public PartyMemberKickGUIEvent(Party party, String playerClicked, Player owner) - { - _party = party; - _playerClicked = playerClicked; - _owner = owner; - } - - public String getPlayerClicked() - { - return _playerClicked; - } - - public Player getOwner() - { - return _owner; - } - - public Party getParty() - { - return _party; - } - - @Override - public HandlerList getHandlers() - { - return HANDLER_LIST; - } - - public static HandlerList getHandlerList() - { - return HANDLER_LIST; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartySendToServerEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartySendToServerEvent.java deleted file mode 100644 index 604db6eb7..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartySendToServerEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package mineplex.core.party.event; - -import mineplex.core.party.Party; -import mineplex.serverdata.data.MinecraftServer; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * - */ -public class PartySendToServerEvent extends Event -{ - private static final HandlerList HANDLER_LIST = new HandlerList(); - - private final Party _party; - private final MinecraftServer _minecraftServer; - - public PartySendToServerEvent(Party party, MinecraftServer minecraftServer) - { - _party = party; - _minecraftServer = minecraftServer; - } - - public Party getParty() - { - return _party; - } - - @Override - public HandlerList getHandlers() - { - return HANDLER_LIST; - } - - public static HandlerList getHandlerList() - { - return HANDLER_LIST; - } - - public MinecraftServer getMinecraftServer() - { - return _minecraftServer; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyTransferOwnerEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyTransferOwnerEvent.java deleted file mode 100644 index c21abd883..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/event/PartyTransferOwnerEvent.java +++ /dev/null @@ -1,65 +0,0 @@ -package mineplex.core.party.event; - -import mineplex.core.party.Party; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * An event called when an owner leaves a party - */ -public class PartyTransferOwnerEvent extends Event -{ - - public enum TransferReason - { - LEFT, - TRANSFER; - } - - private static final HandlerList HANDLER_LIST = new HandlerList(); - - private final Party _party; - private final String _newOwner; - private final String _oldOwner; - private final TransferReason _reason; - - public PartyTransferOwnerEvent(Party party, String newOwner, String oldOwner, TransferReason reason) - { - _party = party; - _newOwner = newOwner; - _oldOwner = oldOwner; - _reason = reason; - } - - public String getNewOwner() - { - return _newOwner; - } - - public String getOldOwner() - { - return _oldOwner; - } - - public TransferReason getReason() - { - return _reason; - } - - public Party getParty() - { - return _party; - } - - @Override - public HandlerList getHandlers() - { - return HANDLER_LIST; - } - - public static HandlerList getHandlerList() - { - return HANDLER_LIST; - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyInviteManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyInviteManager.java index bfff39b40..8ecc3ee0d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyInviteManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyInviteManager.java @@ -1,173 +1,155 @@ package mineplex.core.party.manager; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.party.InviteData; -import mineplex.core.party.Lang; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import mineplex.core.party.constants.InviteResponse; -import mineplex.core.party.redis.RedisMessageType; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent.Action; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; + import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.spigotmc.CaseInsensitiveMap; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.party.InviteData; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; /** - * + * This class manages invites to parties */ public class PartyInviteManager { + // Map of Player Name (invitee) to invites (inviter) + private final Map> _activeInvites = new CaseInsensitiveMap<>(); - private final Map> _activeInvites = Maps.newHashMap(); - private final Map _invitedBy = Maps.newHashMap(); - private final Map _awaitingJoin = Maps.newHashMap(); - private final Map _players = Maps.newHashMap(); - private final Map _tasks = Maps.newHashMap(); + private final Map _tasks = new HashMap<>(); private final PartyManager _plugin; - private final PartyRedisManager _partyRedisManager; - public PartyInviteManager(PartyManager plugin, PartyRedisManager partyRedisManager) + public PartyInviteManager(PartyManager plugin) { _plugin = plugin; - _partyRedisManager = partyRedisManager; } - /** - * Responds to an invite, regardless of the server - * - * @param player The player calling - * @param party The party - * @param accept Whether or not the player accepted the invite - */ - public void respondToInvite(Player player, String party, boolean accept) + public InviteData getInviteBySender(String invitee, String sender) { - Player possible = Bukkit.getPlayerExact(party); + Set map = _activeInvites.get(invitee); - InviteData data = remove(party, player.getUniqueId()); + if (map == null) return null; - _players.remove(player.getUniqueId()); - cancelTask(player.getUniqueId()); - - if(possible != null) + for (InviteData inviteData : map) { - Party newParty = _plugin.getParty(party); - if(!accept) + if (inviteData.getInviterName().equalsIgnoreCase(sender)) { - String message = C.mHead + "Party> " + C.mBody + InviteResponse.DENIED.format(player.getName()); - if (newParty == null) - { - possible.sendMessage(message); - return; - } - newParty.sendMessage(message); - return; + return inviteData; } - if (newParty == null) + } + + return null; + } + + /** + * Checks if a caller has an invite by a sender's name + * + * @param caller + * @param sender + * @return + */ + public boolean hasInviteFrom(Player caller, String sender) + { + return getInviteBySender(caller.getName(), sender) != null; + } + + /** + * Checks if a caller has an invite by a party id + * + * @param caller + * @param partyId + * @return + */ + public boolean hasInviteTo(String caller, UUID partyId) + { + Set map = _activeInvites.get(caller); + + if (map == null) return false; + + for (InviteData inviteData : map) + { + if (inviteData.getPartyUUID().equals(partyId)) { - newParty = new Party(possible.getName()); - if(_plugin.getClientManager().Get(possible).GetRank().has(Rank.ULTRA)) - { - newParty.setSize(); - } else - { - newParty.setSize(); - } - _plugin.addParty(newParty); - _plugin.getMethodManager().addToParty(possible.getUniqueId(), newParty); + return true; } - _plugin.getMethodManager().addToParty(player.getUniqueId(), newParty); - return; } - String serverFrom = data.getServerFrom(); - - if(accept) - { - _plugin.getPortal().sendPlayerToServer(player, serverFrom); - } - - _partyRedisManager.publish(serverFrom, RedisMessageType.INVITE_PLAYER_RESPONSE, party, - player.getName(), player.getUniqueId().toString(), accept ? InviteResponse.ACCEPTED.name() : InviteResponse.DENIED.name()); + return false; } /** - * Handles a received response via redis + * Remove a player's invite to a party by id * - * @param sender The player sending the request - * @param target The player target - * @param serverFrom The server initiating the request + * @param caller + * @param partyId + * @return */ - public void handleInviteRequest(String sender, String target, String serverFrom) + public InviteData removeInviteTo(String caller, UUID partyId) { - Player player = Bukkit.getPlayerExact(target); - if (player == null) + Set map = _activeInvites.get(caller); + + if (map == null) return null; + + Iterator itr = map.iterator(); + + while (itr.hasNext()) { - //Shouldn't happen, as a "findPLayer" packet will be sent out first. - return; + InviteData ent = itr.next(); + if (ent.getPartyUUID().equals(partyId)) + { + itr.remove(); + return ent; + } } - _players.put(player.getUniqueId(), player.getName()); - inviteTo(player.getUniqueId(), sender, sender, serverFrom); - Lang.INVITE_RECEIVED.send(player, sender); - sendAcceptOrDeny(player, sender); - player.playSound(player.getLocation(), Sound.NOTE_PLING, 1.0F, 1.0F); + + return null; } /** - * Handles the response returned via redis when an invite is handled cross server - * - * @param sender The player sender - * @param target The player target - * @param targetUUID The player targets UUID - * @param response The response to this invite + * Remove a player's invite to a certain party */ - public void handleInviteResponse(String sender, String target, UUID targetUUID, InviteResponse response) + public InviteData removeInvite(Player invitee, String inviter) { - remove(sender, targetUUID); - Player player = Bukkit.getPlayer(sender); - if (player == null) - { - return; - } - String message = F.main("Party", response.format(target)); + Set map = _activeInvites.get(invitee.getName()); - Party party = _plugin.getParty(sender); - String partyName = sender; - if(party != null) + if (map == null) return null; + + Iterator itr = map.iterator(); + + while (itr.hasNext()) { - partyName = party.getName(); + InviteData ent = itr.next(); + if (ent.getInviterName().equalsIgnoreCase(inviter)) + { + itr.remove(); + return ent; + } } - switch (response) - { - case ACCEPTED: - addToPendingJoin(targetUUID, partyName); - break; - case EXPIRED: - case DENIED: - if (party == null) - { - player.sendMessage(message); - return; - } - party.sendMessage(message); - break; - } + return null; } /** @@ -175,202 +157,109 @@ public class PartyInviteManager * * @param player The player's UUID */ - public void removeAll(UUID player) + public void removeAll(Player player) { - _players.remove(player); - _invitedBy.remove(player); - _activeInvites.remove(player); - } - - /** - * Get the name of the party who is awaiting this player to join - * - * @param player The player's UUID - * @return The name of the awaiting party. - */ - public String getPartyWaiting(UUID player) - { - return _awaitingJoin.get(player); - } - - /** - * Remove the party reference that invited this player - * - * @param player The player's UUID - */ - public void removeFromWaiting(UUID player) - { - _awaitingJoin.remove(player); - } - - /** - * Add a player to the active invites map - * - * @param player The player who has been invited - * @param party The party name - */ - public void inviteTo(UUID player, String invitedBy, String party, String server) - { - addToInvite(player, invitedBy, party, server); - _tasks.put(player, new BukkitRunnable() - { - @Override - public void run() - { - if (!isInvitedTo(player, party)) - { - cancel(); - return; - } - InviteData data = remove(party, player); - Player possible = Bukkit.getPlayer(player); - String playerName = _players.remove(player); - if (possible != null) - { - playerName = possible.getName(); - possible.sendMessage(F.main("Party", "Your invite to " + F.name(party) + "'s party has expired")); - } - sendExpired(data.getServerFrom(), party, playerName, player); - } - }.runTaskLater(_plugin.getPlugin(), 20 * 60)); - } - - /** - * Checks to see if a player is invited to a specific party - * - * @param player The player who we want to check against - * @param party The name of the party to check - * @return true if the player has an invite to the specific party - */ - public boolean isInvitedTo(UUID player, String party) - { - if (!_activeInvites.containsKey(player)) - { - return false; - } - List dataList = _activeInvites.get(player); - for (InviteData data : dataList) - { - if (data.getInvitedTo().equalsIgnoreCase(party)) - { - return true; - } - } - return false; - } - - /** - * Remove a player's invite to a certain party - * - * @param party The name of the party - * @param invited The UUID of the player - */ - public InviteData remove(String party, UUID invited) - { - List data = _activeInvites.get(invited); - InviteData temp = null; - for (InviteData inviteData : data) - { - if (inviteData.getInvitedTo().equalsIgnoreCase(party)) - { - temp = inviteData; - break; - } - } - if (temp != null) - { - data.remove(temp); - } - _activeInvites.put(invited, data); - return temp; - } - - /** - * Stop the player's expired task from running - * - * @param player The UUID of the player - */ - public void cancelTask(UUID player) - { - BukkitTask task = _tasks.remove(player); - if(task != null) - { - task.cancel(); - } + _activeInvites.remove(player.getName()); } /** * Retrieves all invites currently pending for a specific player + * * @param player The player * @return All his current pending invites */ - public Collection getAllInvites(Player player) + public List getAllInvites(Player player) { - return _activeInvites.get(player.getUniqueId()); + return new ArrayList<>(_activeInvites.getOrDefault(player.getName(), Collections.emptySet())); } /** - * Send an "ExpiredPartyInvite" redis message + * Add a playerUUID to the active invites map * - * @param server The server to - * @param party The party who initiated the request (can also be a player's name) - * @param playerName The name of the invited player - * @param player The invited player's UUID + * @param inviterName + * @param inviterUUID */ - private void sendExpired(String server, String party, String playerName, UUID player) + public void inviteTo(String targetName, UUID targetUUID, String inviterName, UUID inviterUUID, UUID partyId, String server) { - _plugin.getRedisManager().publish(server, RedisMessageType.INVITE_PLAYER_RESPONSE, party, playerName, player.toString(), InviteResponse.EXPIRED.name()); - } + Set map = _activeInvites.computeIfAbsent(targetName, key -> new HashSet<>()); + InviteData inviteData = new InviteData(inviterName, inviterUUID, partyId, server); - /** - * Marks this player as having an accepted invite - * This is used to control the creation of single player parties, and makes sure a party is created ONLY if a player joins the server successfully. - * - * @param player The UUID of the player - * @param party The name of the party - */ - private void addToPendingJoin(UUID player, String party) - { - _awaitingJoin.put(player, party); - } - - /** - * Add a pending invite for a player - * - * @param invited The invited players UUUD - * @param invitedBy The person who invited him - * @param party The name of the party invited to - * @param server The server the request is from - */ - private void addToInvite(UUID invited, String invitedBy, String party, String server) - { - List inviteDatas = _activeInvites.get(invited); - if (inviteDatas == null) + if (map.add(inviteData)) { - inviteDatas = Lists.newArrayList(); + _tasks.put(targetUUID, _plugin.runSyncLater(new BukkitRunnable() + { + @Override + public void run() + { + if (!hasInviteTo(targetName, partyId)) + { + cancel(); + return; + } + InviteData data = removeInviteTo(targetName, partyId); + Player possible = Bukkit.getPlayer(targetUUID); + if (possible != null) + { + Party curParty = _plugin.getPartyById(partyId); + if (curParty != null) + { + possible.sendMessage(F.main("Party", "Your invite to " + F.name(inviterName) + "'s party has expired")); + } + else + { + UtilPlayer.message(possible, F.main("Party", "Your invite to " + F.name(inviterName) + "'s party has expired. Fortunately, that party no longer exists")); + } + } + } + }, 20 * 60)); + } + + Player player = Bukkit.getPlayer(targetUUID); + if (player != null) + { + Party party = _plugin.getPartyByPlayer(player); + if (party == null) + { + if (server.equals(UtilServer.getServerName())) + { + UtilPlayer.message(player, F.main("Party", "You have been invited to " + F.elem(inviterName) + "'s party! You have 60 seconds to reply")); + } + else + { + UtilPlayer.message(player, F.main("Party", "You have been invited to " + F.elem(inviterName) + "'s party! You have 60 seconds to reply. If you accept, you will be be sent to " + F.elem(server))); + } + } + else + { + if (server.equals(UtilServer.getServerName())) + { + UtilPlayer.message(player, F.main("Party", "You have been invited to " + F.elem(inviterName) + "'s party! You have 60 seconds to reply. If you accept, you will leave your current party")); + } + else + { + UtilPlayer.message(player, F.main("Party", "You have been invited to " + F.elem(inviterName) + "'s party! You have 60 seconds to reply. If you accept, you will leave your current party and you will be be sent to " + F.elem(server))); + } + } + sendAcceptOrDeny(player, inviterName); } - InviteData inviteData = new InviteData(party, server); - inviteDatas.add(inviteData); - _invitedBy.put(invited, invitedBy); - _activeInvites.put(invited, inviteDatas); } /** * Sends a Text Componoent clickable message to a player for easier quick responses to invites * * @param player The player who received the invite - * @param arg The name of the inviting party + * @param arg The name of the inviting party */ - public void sendAcceptOrDeny(Player player, String arg) + private void sendAcceptOrDeny(Player player, String arg) { TextComponent textComponent = new TextComponent(F.main("Party", "Reply: ")); TextComponent accept = new TextComponent("ACCEPT"); accept.setColor(ChatColor.GREEN); accept.setBold(true); - accept.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/partyaccept " + arg)); + accept.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/party cli a " + arg)); accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{ - new TextComponent("Click to join " + F.name(arg) + "'s party") + new TextComponent("Click to join " + F.name(arg) + ChatColor.WHITE + "'s party") })); textComponent.addExtra(accept); @@ -379,9 +268,9 @@ public class PartyInviteManager TextComponent deny = new TextComponent("DENY"); deny.setColor(ChatColor.RED); deny.setBold(true); - deny.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/partydeny " + arg)); + deny.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/party cli d " + arg)); deny.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{ - new TextComponent("Click to decline joining " + F.name(arg) + "'s party") + new TextComponent("Click to decline joining " + F.name(arg) + ChatColor.WHITE + "'s party") })); textComponent.addExtra(deny); @@ -390,13 +279,14 @@ public class PartyInviteManager TextComponent view = new TextComponent("VIEW"); view.setColor(ChatColor.YELLOW); view.setBold(true); - view.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/openinvitesmenu")); + view.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/party cli is")); view.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{ - new TextComponent("Click to view all pending invites.") + new TextComponent("Click to view all pending invites") })); textComponent.addExtra(view); player.spigot().sendMessage(textComponent); + player.playSound(player.getLocation(), Sound.NOTE_PLING, 1.0F, 10.0F); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyJoinManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyJoinManager.java index 88a7ef29c..4ff377c66 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyJoinManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyJoinManager.java @@ -1,137 +1,356 @@ package mineplex.core.party.manager; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.scheduler.BukkitTask; + import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import mineplex.core.command.CommandCenter; import mineplex.core.common.Rank; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilItem; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.party.Lang; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; -import mineplex.core.party.constants.JoinResponseReason; -import mineplex.core.party.redis.RedisMessageType; -import mineplex.serverdata.servers.ServerManager; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; +import mineplex.core.party.constants.PartyRemoveReason; +import mineplex.core.party.rediscommands.PartyTransferRequest; +import mineplex.core.party.rediscommands.PartyTransferResponse; +import mineplex.core.portal.Intent; +import mineplex.core.portal.events.GenericServerTransferEvent; +import mineplex.core.portal.events.ServerTransferEvent; +import mineplex.core.utils.UtilGameProfile; +import mineplex.serverdata.commands.ServerCommandManager; +import mineplex.serverdata.data.MinecraftServer; /** * Manages allocating slots for parties to join */ -public class PartyJoinManager +public class PartyJoinManager implements Listener { - private final PartyManager _plugin; - private final int _maxPLayers; - private final List _transferring; + private final int _maxPlayers; + + private final Map _pendingTransfers = new ConcurrentHashMap<>(); public PartyJoinManager(PartyManager plugin) { _plugin = plugin; - _maxPLayers = plugin.getPlugin().getServer().getMaxPlayers(); - _transferring = Lists.newArrayList(); - } + _maxPlayers = plugin.getPlugin().getServer().getMaxPlayers(); - /** - * Scans through the party to check if all players are some form of VIP - * If the party contains even 1 non-vip, the party cannot be sent to a full server - * - * @param party The party - * @return true if the party contains all VIP's false if it contains even 1 non-vip - */ - public boolean canJoinFullServer(Party party) - { - List players = party.getMembersByUUID().stream().map(Bukkit::getPlayer).collect(Collectors.toList()); - for (Player player : players) + UtilServer.RegisterEvents(this); + + ServerCommandManager.getInstance().registerCommandType(PartyTransferRequest.class, command -> { - Rank rank = _plugin.getClientManager().Get(player).GetRank(); - if (rank == Rank.ALL) + if (!command.isSentToThisServer()) + return; + + _plugin.runSync(() -> { - return false; - } - } - return true; + int currentPlayers = UtilServer.getPlayersCollection().size(); + if (currentPlayers + command.getUnrankedMembers().size() > _maxPlayers && !command.isCanJoinFullServers()) + { + ServerCommandManager.getInstance().publishCommand(new PartyTransferResponse(command, PartyTransferResponse.Result.NOT_ENOUGH_ROOM)); + return; + } + + for (UUID uuid : command.getUnrankedMembers()) + { + _plugin.getClientManager().reserveFor(uuid); + } + + Party newParty = new Party(command); + + _plugin.addParty(newParty); + + for (UUID uuid : command.getAllMembers()) + { + _plugin.putIntoPendingJoin(uuid, newParty.getUniqueId()); + } + + ServerCommandManager.getInstance().publishCommand(new PartyTransferResponse(command, PartyTransferResponse.Result.SUCCESS)); + }); + }); + + ServerCommandManager.getInstance().registerCommandType(PartyTransferResponse.class, command -> + { + if (!command.getOrigin().wasSentFromThisServer()) + return; + + _plugin.runSync(() -> + { + BukkitTask task = _pendingTransfers.get(command.getOrigin().getPartyUUID()); + if (task == null) + { + return; + } + + task.cancel(); + + Party party = _plugin.getPartyById(command.getOrigin().getPartyUUID()); + + switch (command.getResult()) + { + case NOT_ENOUGH_ROOM: + _pendingTransfers.remove(command.getOrigin().getPartyUUID()); + party.sendMessage(F.main("Party", "Sorry, there wasn't enough room for your party in " + F.elem(command.getFromServer()) + ".")); + break; + case SUCCESS: + party.sendMessage(F.main("Party", "Success! I've reserved some room for you in " + F.elem(command.getFromServer()) + ".")); + party.sendMessage(F.main("Party", "You will be transferred shortly.")); + List members = new ArrayList<>(party.getMembers()); + + // Clear the party first. + // We've already got a duplicate on the remote server so let's get rid of this one ASAP + party.clear(); + _plugin.removeParty(party); + + + for (Player player : members) + { + _plugin.getPortal().sendPlayer(player, command.getFromServer()); + } + break; + case UNKNOWN: + _pendingTransfers.remove(command.getOrigin().getPartyUUID()); + party.sendMessage(F.main("Party", "Uh... something went wrong?")); + break; + } + }); + }); } /** * Initiates a request to join a server for a specific party * * @param server The desired server - * @param party The requesting party + * @param party The requesting party */ - public void requestServerJoin(String server, Party party) + private void requestServerJoin(String server, Party party) { - boolean canJoinFull = canJoinFullServer(party); - _plugin.getRedisManager().publish(server, RedisMessageType.PREJOIN_SERVER_REQUEST, - _plugin.getServerName(), party.getOwner(), "" + party.getMembers().size(), "" + canJoinFull); - } - - /** - * Manages a received request - * - * @param serverFrom The server who initiated the request - * @param partySize The size of the party - * @param initiator The player who sent the request - * @param canJoinFull true if the party contains all donators or staff (full joining able players) - */ - public void handleJoinRequest(String serverFrom, int partySize, String initiator, boolean canJoinFull) - { - int currentPlayers = UtilServer.getPlayers().length; - if (currentPlayers >= _maxPLayers || (currentPlayers + partySize) >= _maxPLayers) - { - //Max number of people on. - if (!canJoinFull) - { - _plugin.getRedisManager().publish(serverFrom, RedisMessageType.PREJOIN_SERVER_RESPONSE, initiator, JoinResponseReason.CANNOT_JOIN_FULL.name(), _plugin.getServerName()); - return; - } - } - ServerManager.getServerRepository(_plugin.getRegion()).getServerStatus(_plugin.getServerName()).incrementPlayerCount(partySize); - _plugin.getRedisManager().publish(serverFrom, RedisMessageType.PREJOIN_SERVER_RESPONSE, initiator, JoinResponseReason.SUCCESS.name(), _plugin.getServerName()); - - } - - /** - * Manages a received response - * - * @param playerSender The player who sent the request - * @param server The server responding - * @param reason The reason for the response - */ - public void handleJoinResponse(String playerSender, String server, JoinResponseReason reason) - { - Player player = Bukkit.getPlayer(playerSender); - if (player == null) + if (_pendingTransfers.containsKey(party.getUniqueId())) { + party.sendMessage(F.main("Party", "Please wait until your current transfer is complete")); return; } - Party party = _plugin.getParty(player); + + List unranked = new ArrayList<>(); + List all = new ArrayList<>(); + for (Player player : party.getMembers()) + { + if (_plugin.getClientManager().Get(player).GetRank() == Rank.ALL) + { + unranked.add(player.getUniqueId()); + } + all.add(player.getUniqueId()); + } + + _pendingTransfers.put(party.getUniqueId(), _plugin.runSyncLater(() -> + { + _pendingTransfers.remove(party.getUniqueId()); + + if (party.getMembers().size() == 0) + { + return; + } + + party.sendMessage(F.main("Party", "Aww, the destination server didn't respond :(")); + }, 20 * 5L)); + + System.out.println("Sending transfer request to " + server + " for " + party.getUniqueId() + " " + party.getMembers()); + + party.sendMessage(F.main("Party", "Please wait while I check whether " + F.elem(server) + " has enough room for this party.")); + ServerCommandManager.getInstance().publishCommand(new PartyTransferRequest(party.getUniqueId(), UtilGameProfile.getGameProfile(party.getOwnerAsPlayer().get()), all, unranked, unranked.size() == 0, server)); + } + + @EventHandler + public void onTransferToGenericServer(GenericServerTransferEvent event) + { + Player player = event.getPlayer(); + Party party = _plugin.getPartyByPlayer(player); + if (party == null) { return; } - if (reason != JoinResponseReason.SUCCESS) + + // If the server wants to kick the player, let's not stop it + if (event.getIntent() == Intent.KICK || event.getIntent() == Intent.FORCE_TRANSFER) { - party.sendMessage(reason.getMessage()); + _plugin.removeFromParty(event.getPlayer(), PartyRemoveReason.KICKED); + return; } - party.sendMessage(F.main("Party", "Transferring servers...")); - _plugin.getRedisManager().sendPartyInfo(server, party); - _transferring.addAll(party.getMembersByUUID()); + + event.setCancelled(true); + + if (!party.getOwnerName().equalsIgnoreCase(player.getName())) + { + Lang.NOT_OWNER_SERVER.send(player); + return; + } + + MinecraftServer best = null; + int lowest = Integer.MAX_VALUE; + List serverList = Lists.newArrayList(_plugin.getPortal().getRepository().getServersByGroup(event.getServer().getName())); + for (MinecraftServer server : serverList) + { + int playercount = server.getPlayerCount(); + if (playercount < 20) + { + continue; + } + if (playercount < lowest) + { + lowest = playercount; + if (best == null) + { + best = server; + } + } + } + if (best == null) + { + best = serverList.get(new Random().nextInt(serverList.size())); + } + + party.sendMessage(F.main("Party", F.elem(player.getName()) + " is moving the party to " + F.elem(best.getName()))); + + requestServerJoin(best.getName(), party); } - /** - * Retrieve whether or not the player is currently transferring servers - * We wont need this information again, so calling a remove works fine. - * - * @param player The player - * @return true if the player is transferring servers - */ - public boolean isTransferring(Player player) + @EventHandler + public void onTransfer(ServerTransferEvent event) { - return _transferring.remove(player.getUniqueId()); + Player player = event.getPlayer(); + Party party = _plugin.getPartyByPlayer(player); + + if (party == null) + { + return; + } + + // If the server wants to kick the player, let's not stop it + if (event.getIntent() == Intent.KICK || event.getIntent() == Intent.FORCE_TRANSFER) + { + _plugin.removeFromParty(event.getPlayer(), PartyRemoveReason.KICKED); + + return; + } + + if (_pendingTransfers.containsKey(party.getUniqueId())) + { + return; + } + + event.setCancelled(true); + + if (event.getServer().toUpperCase().startsWith("CLANS-")) + { + party.sendMessage(F.main("Party", "You cannot join a Clans server while in a party!")); + return; + } + + if (!party.getOwnerName().equalsIgnoreCase(player.getName())) + { + Lang.NOT_OWNER_SERVER.send(player); + return; + } + + party.sendMessage(F.main("Party", F.elem(player.getName()) + " is moving the party to " + F.elem(event.getServer()))); + + requestServerJoin(event.getServer(), party); } + public void removePendingJoin(Party party) + { + _pendingTransfers.remove(party.getUniqueId()); + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) + { + Player player = event.getPlayer(); + + if (_plugin.hasPendingJoin(player)) + { + Party pendingParty = _plugin.getPendingParty(player); + _plugin.removePendingJoin(player); + + if (pendingParty == null) + { + UtilPlayer.message(player, F.main("Party", "Uh oh. It seems that in the time it took for you to join this server, your inviter has disbanded their party")); + return; + } + + if (pendingParty.getOwner().getId().equals(event.getPlayer().getUniqueId())) + { + UtilPlayer.message(player, F.main("Party", "Welcome back! Your party is just as you've left it!")); + } + else + { + UtilPlayer.message(player, F.main("Party", "Welcome! Adding you to " + F.elem(pendingParty.getOwnerName()) + "'s party!")); + } + + _plugin.addToParty(player, pendingParty); + } + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) + { + Player player = event.getPlayer(); + + Party party = _plugin.getPartyByPlayer(player); + + _plugin.getInviteManager().removeAll(player); + + if (party == null) + { + return; + } + + PartyRemoveReason reason = PartyRemoveReason.LEFT; + + _plugin.removeFromParty(player, reason); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onInteract(PlayerInteractEntityEvent event) + { + if (UtilItem.isSimilar(event.getPlayer().getItemInHand(), PartyManager.INTERFACE_ITEM, UtilItem.ItemAttribute.NAME)) + { + event.setCancelled(true); + event.getPlayer().updateInventory(); + CommandCenter.getCommands().get("party").Execute(event.getPlayer(), new String[0]); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onClick(PlayerInteractEvent event) + { + if (UtilItem.isSimilar(event.getItem(), PartyManager.INTERFACE_ITEM, UtilItem.ItemAttribute.NAME)) + { + event.setCancelled(true); + CommandCenter.getCommands().get("party").Execute(event.getPlayer(), new String[0]); + } + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyMethodManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyMethodManager.java deleted file mode 100644 index 2e213a6f5..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyMethodManager.java +++ /dev/null @@ -1,347 +0,0 @@ -package mineplex.core.party.manager; - -import com.google.common.collect.Lists; -import mineplex.core.common.util.F; -import mineplex.core.menu.Menu; -import mineplex.core.party.Lang; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import mineplex.core.party.constants.PartyRemoveReason; -import mineplex.core.preferences.Preference; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.UUID; - -/** - * Contains all methods used by the internal UI system - */ -public class PartyMethodManager -{ - - private PartyManager _plugin; - - public PartyMethodManager(PartyManager plugin) - { - _plugin = plugin; - } - - /** - * Invite a player to either a new party or existing one - * - * @param caller The player who initiated the request - * @param target The player's target - */ - public void invite(Player caller, String target) - { - Player possible = Bukkit.getPlayer(target); - Party party = _plugin.getParty(caller); - - if(target.equalsIgnoreCase(caller.getName())) - { - caller.sendMessage(F.main("Party", "You cannot invite yourself!")); - return; - } - - if(party != null) - { - if(!party.getOwner().equalsIgnoreCase(caller.getName())) - { - Lang.NOT_OWNER.send(caller); - return; - } - if(possible != null && _plugin.getInviteManager().isInvitedTo(possible.getUniqueId(), party.getName())) - { - Lang.ALREADY_INVITED.send(caller, target); - return; - } - if(party.getMembers().contains(target)) - { - Lang.ALREADY_MEMBER.send(caller, target); - return; - } - if(_plugin.getParty(target) != null) - { - Lang.PLAYER_IN_DIFFERENT_PARTY.send(caller, target); - return; - } - if(party.getMembers().size() >= party.getSize()) - { - Lang.PARTY_FULL.send(caller); - return; - } - } - - //Same Server - if (possible != null) - { - if(!_plugin.getPreferencesManager().get(possible).isActive(Preference.PARTY_REQUESTS)) - { - caller.sendMessage(F.main("Party> ", F.name(target) + " is not accepting invites at this time.")); - return; - } - - if (party == null) - { - if(_plugin.getParty(target) != null) - { - Lang.PLAYER_IN_DIFFERENT_PARTY.send(caller, target); - return; - } - if(_plugin.getInviteManager().isInvitedTo(possible.getUniqueId(), caller.getName())) - { - Lang.ALREADY_INVITED.send(caller, target); - return; - } - Lang.INVITE_SUCCESS_PLAYER.send(caller, possible.getName()); - } else - { - Lang.SUCCESS_INVITE.send(party, caller.getName(), target); - } - - UUID uuid = possible.getUniqueId(); - - Lang.INVITE_RECEIVED.send(possible, caller.getName(), caller.getName()); - - _plugin.getInviteManager().inviteTo(uuid, caller.getName(), caller.getName(), _plugin.getServerName()); - - _plugin.getInviteManager().sendAcceptOrDeny(possible, caller.getName()); - return; - } - //Only perform this when I actually need to. - boolean can = Bukkit.getMaxPlayers() >= _plugin.getPlugin().getServer().getOnlinePlayers().size(); - if(!can) - { - Lang.SERVER_FULL.send(caller); - return; - } - - //Not on the same server - _plugin.getRedisManager().findAndInvite(target, caller.getName()); - } - - /** - * Responds to a pending invite - * - * @param caller The player who initiated the request - * @param target The player's target - * @param accept true If the player has accepted the invite - */ - public void respondToInvite(Player caller, String target, boolean accept) - { - if(_plugin.getParty(caller) != null) - { - Lang.ALREADY_IN.send(caller); - caller.sendMessage(F.main("Party", "Please leave your party before joining!")); - return; - } - - PartyInviteManager inviteManager = _plugin.getInviteManager(); - - if (!inviteManager.isInvitedTo(caller.getUniqueId(), target)) - { - //He isn't invited to this party. - Lang.NOT_INVITED.send(caller, target); - return; - } - if(!accept) - { - caller.sendMessage(F.main("Party", "You have denied the invite to " + F.name(target)) + "'s party."); - } - - inviteManager.respondToInvite(caller, target, accept); - } - - /** - * Kicks a player from the callers party - * - * @param caller The player who initiated the request - * @param target The player's target - */ - public void forceRemove(Player caller, String target) - { - Party party = _plugin.getParty(caller); - - if (party == null) - { - Lang.NO_PARTY.send(caller); - return; - } - - if (!party.getOwner().equalsIgnoreCase(caller.getName())) - { - Lang.NOT_OWNER.send(caller); - return; - } - - Player playerTarget = Bukkit.getPlayerExact(target); - - if (playerTarget == null) - { - Lang.NOT_MEMBER.send(caller, target); - return; - } - - Party targetParty = _plugin.getParty(playerTarget); - - if (targetParty == null ||!party.getMembers().contains(target)) - { - Lang.NOT_MEMBER.send(caller, target); - return; - } - - removeFromParty(playerTarget.getUniqueId(), PartyRemoveReason.KICKED); - - Lang.REMOVE_PLAYER_KICK.send(targetParty); - } - - /** - * Leaves the players current party if he is in one - * - * @param caller The player who wishes to leave his party - */ - public void leaveParty(Player caller) - { - Party party = _plugin.getParty(caller); - - if (party == null) - { - Lang.NO_PARTY.send(caller); - return; - } - - removeFromParty(caller.getUniqueId(), PartyRemoveReason.LEFT); - Lang.LEFT.send(caller); - } - - /** - * Disbands a players current party, assuming he is the leader - * - * @param caller The player who wishes to disband his party - */ - public void disband(Player caller) - { - Party party = _plugin.getParty(caller); - - if (party == null) - { - Lang.NO_PARTY.send(caller); - return; - } - - if (!party.getOwner().equalsIgnoreCase(caller.getName())) - { - Lang.NOT_OWNER.send(caller); - return; - } - caller.sendMessage(F.main("Party", "You have disbanded your party.")); - disbandParty(party); - } - - public void addToParty(UUID uuid, Party party) - { - _plugin.getPlayerParties().put(uuid, party); - Player player = Bukkit.getPlayer(uuid); - party.onPlayerAdd(player.getName()); - if(!party.getMembersByUUID().contains(uuid)) - { - party.getMembersByUUID().add(uuid); - } - } - - public void addToPartyOnTransfer(UUID uuid, Party party) - { - _plugin.getPlayerParties().put(uuid, party); - } - - public void addToParty(Player player, Party party) - { - addToParty(player.getUniqueId(), party); - } - - public void removeForTransfer(UUID uuid) - { - Party party = _plugin.getPlayerParties().remove(uuid); - if(party == null) - { - return; - } - String player = Bukkit.getPlayer(uuid).getName(); - party.onPlayerRemove(player, PartyRemoveReason.OTHER); - } - - public void removeFromParty(UUID uuid, PartyRemoveReason reason) - { - Party party = _plugin.getPlayerParties().remove(uuid); - if(party == null) - { - return; - } - - Player player = Bukkit.getPlayer(uuid); - - if(player.getOpenInventory() != null) - { - if (Menu.get(player.getUniqueId()) != null) - { - player.closeInventory(); - Menu.remove(player.getUniqueId()); - } - } - - if(reason == PartyRemoveReason.DISBANDED_BY_OWNER) - { - return; - } - party.getMembers().remove(player.getName()); - party.getMembersByUUID().remove(uuid); - party.onPlayerRemove(player.getName(), reason); - - int size = party.getMembers().size(); - if(size <= 1) - { - if(size == 0) - { - _plugin.removeParty(party); - return; - } - _plugin.getPlayerParties().remove(Bukkit.getPlayerExact(party.getMembers().get(0)).getUniqueId()); - party.onPlayerRemove(party.getMembers().get(0), PartyRemoveReason.DISBANDED); - _plugin.removeParty(party); - } - } - - public void removeFromParty(Player player, PartyRemoveReason reason) - { - removeFromParty(player.getUniqueId(), reason); - } - - public void disbandParty(Party party) - { - List members = Lists.newArrayList(party.getMembersByUUID()); - Lang.DISBANDED_BY_OWNER.send(party); - members.forEach(player -> removeFromParty(player, PartyRemoveReason.DISBANDED_BY_OWNER)); - party.getMembers().clear(); - party.getMembersByUUID().clear(); - _plugin.removeParty(party); - } - - public void transferOwner(String newOwner, String oldOwner) - { - Party party = _plugin.getParties().remove(oldOwner); - - if(party == null) - { - return; - } - - _plugin.getParties().put(newOwner, party); - party.setOwner(newOwner); - party.getMembers().remove(oldOwner); - party.getMembers().add(oldOwner); - UUID uuid = Bukkit.getPlayerExact(oldOwner).getUniqueId(); - party.getMembersByUUID().remove(uuid); - party.getMembersByUUID().add(uuid); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyRedisManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyRedisManager.java index 9e0c9529d..4b782736d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyRedisManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/manager/PartyRedisManager.java @@ -1,296 +1,205 @@ package mineplex.core.party.manager; -import com.google.common.collect.Maps; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import mineplex.core.common.util.F; -import mineplex.core.party.Lang; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import mineplex.core.party.constants.InviteResponse; -import mineplex.core.party.constants.JoinResponseReason; -import mineplex.core.party.event.PartyDataReceivedEvent; -import mineplex.core.party.redis.PartyRedisListener; -import mineplex.core.party.redis.RedisMessageType; -import mineplex.core.preferences.Preference; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; - -import java.util.List; +import java.util.HashMap; import java.util.Map; import java.util.UUID; -import static mineplex.core.party.redis.RedisMessageType.INVITE_PLAYER_REQUEST; -import static mineplex.core.party.redis.RedisMessageType.PARTY_INFO; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.core.party.rediscommands.PartyCrossServerInviteAccept; +import mineplex.core.party.rediscommands.PartyCrossServerInviteCommand; +import mineplex.core.party.rediscommands.PartyCrossServerInviteDeny; +import mineplex.core.party.rediscommands.PartyCrossServerInviteResponse; +import mineplex.core.portal.Portal; +import mineplex.core.preferences.Preference; +import mineplex.serverdata.commands.ServerCommandManager; -/** - * Redis system for Parties - */ public class PartyRedisManager { - protected final Gson GSON = new GsonBuilder().create(); - - protected static final String CHANNEL_BASE = "party-pubsub"; - protected static final String FIND_PLAYERS_CHANNEL = "party-player-finder"; - private final Map TASKS = Maps.newHashMap(); + private final Map> _pendingFindResponse = new HashMap<>(); private final PartyManager _plugin; - private final JedisPool _writePool; - private final String _channel; private final String _serverName; - public PartyRedisManager(PartyManager plugin, String serverName, JedisPool writePool, JedisPool readPool) + public PartyRedisManager(PartyManager plugin, String serverName) { _plugin = plugin; _serverName = serverName; - _writePool = writePool; - _channel = CHANNEL_BASE + "-" + serverName; - plugin.runAsync(() -> { - try (Jedis jedis = readPool.getResource()) - { - jedis.subscribe(new PartyRedisListener(this), _channel, FIND_PLAYERS_CHANNEL); - } - }); - } - - /** - * Send a message to a specific server - * - * @param server The destination server - * @param messageType The message to send - * @param args The arguments accompanying the request - */ - public void publish(String server, RedisMessageType messageType, String... args) - { - _plugin.runAsync(() -> { - try (Jedis jedis = _writePool.getResource()) - { - jedis.publish(CHANNEL_BASE + "-" + server, messageType.name() + "@" + messageType.format(args)); - } - }); - } - - /** - * Handle a message received on this server - * - * @param messageType The type of message received - * @param message The contents of the request - */ - public void handle(RedisMessageType messageType, String message) - { - if (messageType == PARTY_INFO) + ServerCommandManager.getInstance().registerCommandType(PartyCrossServerInviteCommand.class, command -> { - handlePartyInfo(message); - return; - } - String[] contents = message.split(","); - if (contents.length < 3) - { - return; - } - String first = contents[0]; - String second = contents[1]; - String third = contents[2]; - Bukkit.getScheduler().runTask(_plugin.getPlugin(), () -> { - switch (messageType) + _plugin.runSync(() -> { - case INVITE_PLAYER_REQUEST: - _plugin.getInviteManager().handleInviteRequest(second, third, first); - break; + Player player = Bukkit.getPlayerExact(command.getTarget()); - case INVITE_PLAYER_RESPONSE: - _plugin.getInviteManager().handleInviteResponse(first, second, UUID.fromString(third), InviteResponse.valueOf(contents[3].toUpperCase())); - break; - - case PLAYER_FIND_REQUEST: - Player player = Bukkit.getPlayerExact(second); - - if (player == null) - { - return; - } - - if(_plugin.getParty(player) != null) - { - publish(first, RedisMessageType.INVITE_PLAYER_ALREADY_IN_PARTY, _serverName, player.getName(), player.getUniqueId().toString(), third); - return; - } - - if(!_plugin.getPreferencesManager().get(player).isActive(Preference.PARTY_REQUESTS)) - { - publish(first, RedisMessageType.INVITE_PLAYER_NOT_ACCEPTING_INVITES, _serverName, player.getName(), player.getUniqueId().toString(), third); - return; - } - - publish(first, RedisMessageType.PLAYER_FIND_RESPONSE, _serverName, player.getName(), player.getUniqueId().toString(), third); - break; - - case INVITE_PLAYER_ALREADY_IN_PARTY: - handleAlreadyIn(second, contents); - break; - - case INVITE_PLAYER_NOT_ACCEPTING_INVITES: - handleNotAccepting(second, contents); - break; - - case PLAYER_FIND_RESPONSE: - UUID uuid = UUID.fromString(third); - cancelTask(second); - - Player inviter = Bukkit.getPlayerExact(contents[3]); - if (_plugin.getInviteManager().isInvitedTo(uuid, inviter.getName())) - { - Lang.ALREADY_INVITED.send(inviter, second); - return; - } - if (_plugin.getParty(inviter) == null) - { - Lang.INVITE_SUCCESS_PLAYER.send(inviter, second); - } else - { - Lang.SUCCESS_INVITE.send(_plugin.getParty(inviter), inviter.getName(), second); - } - _plugin.getInviteManager().inviteTo(uuid, inviter.getName(), inviter.getName(), _plugin.getServerName()); - publish(first, INVITE_PLAYER_REQUEST, _serverName, inviter.getName(), second); - break; - - case PREJOIN_SERVER_REQUEST: - _plugin.getJoinManager().handleJoinRequest(first, Integer.valueOf(third), second, Boolean.valueOf(contents[3])); - break; - - case PREJOIN_SERVER_RESPONSE: - _plugin.getJoinManager().handleJoinResponse(first, third, JoinResponseReason.valueOf(second.toUpperCase())); - break; - } - }); - - } - - private void handleNotAccepting(String second, String[] contents) - { - cancelTask(second); - - Player inviter = Bukkit.getPlayerExact(contents[3]); - inviter.sendMessage(F.main("Party", F.name(second) + " is not accepting invites at this time.")); - } - - private void handleAlreadyIn(String second, String[] contents) - { - cancelTask(second); - Player inviter = Bukkit.getPlayerExact(contents[3]); - Lang.ALREADY_IN.send(inviter, second); - } - - /** - * Initiates inviting a player who is no on the same server - * - * @param player The player target - * @param sender The sending player - */ - public void findAndInvite(String player, String sender) - { - Bukkit.getPlayerExact(sender).sendMessage(F.main("Party", "Locating " + F.elem(player) + "...")); - TASKS.put(player, new BukkitRunnable() - { - @Override - public void run() - { - if(!TASKS.containsKey(player)) + if (player == null || !player.isOnline()) { - cancel(); return; } - TASKS.remove(player); - Player senderPlayer = Bukkit.getPlayerExact(sender); - if (senderPlayer == null) - { - cancel(); - return; - } - if (Bukkit.getPlayerExact(player) != null) - { - cancel(); - return; - } - senderPlayer.sendMessage(F.main("Party", "Could not locate " + F.elem(player) + ".")); - } - }.runTaskLater(_plugin.getPlugin(), 20L * 5)); - _plugin.runAsync(() -> { - try (Jedis jedis = _writePool.getResource()) + if (!_plugin.getPreferencesManager().get(player).isActive(Preference.PARTY_REQUESTS)) + { + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteResponse(PartyCrossServerInviteResponse.Result.TARGET_NOT_ACCEPTING_INVITES, command, player)); + return; + } + + _plugin.getInviteManager().inviteTo(player.getName(), player.getUniqueId(), command.getRequesterName(), command.getRequesterUUID(), command.getPartyUUID(), command.getFromServer()); + + if (_plugin.getPartyByPlayer(player) != null) + { + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteResponse(PartyCrossServerInviteResponse.Result.SUCCESS_IN_PARTY, command, player)); + } + else + { + ServerCommandManager.getInstance().publishCommand(new PartyCrossServerInviteResponse(PartyCrossServerInviteResponse.Result.SUCCESS, command, player)); + } + }); + }); + + ServerCommandManager.getInstance().registerCommandType(PartyCrossServerInviteResponse.class, command -> + { + if (!command.getOrigin().wasSentFromThisServer()) + return; + + _plugin.runSync(() -> { - jedis.publish(FIND_PLAYERS_CHANNEL, RedisMessageType.PLAYER_FIND_REQUEST.format(_serverName, player, sender)); - } + Map pendingTasks = _pendingFindResponse.get(command.getOrigin().getRequesterUUID()); + + if (pendingTasks == null) + return; + + BukkitTask alertTask = pendingTasks.remove(command.getOrigin().getTarget()); + + if (alertTask == null) + return; + + alertTask.cancel(); + + Player caller = Bukkit.getPlayer(command.getOrigin().getRequesterUUID()); + + if (caller == null || !caller.isOnline()) + return; + + switch (command.getResult()) + { + case TARGET_NOT_ACCEPTING_INVITES: + UtilPlayer.message(caller, F.main("Party", "The player " + F.elem(command.getOrigin().getTarget()) + " is not accepting invites!")); + break; + case SUCCESS_IN_PARTY: + { + Party party = _plugin.getPartyByPlayer(command.getOrigin().getRequesterUUID()); + if (party == null) + { + // todo wat do + return; + } + if (!party.getOwnerName().equals(command.getOrigin().getRequesterName())) + { + //todo wat do + } + + _plugin.getInviteManager().inviteTo(command.getTargetName(), command.getTargetUUID(), command.getOrigin().getRequesterName(), command.getOrigin().getRequesterUUID(), command.getOrigin().getPartyUUID(), _plugin.getServerName()); + party.sendMessage(F.main("Party", F.elem(command.getOrigin().getRequesterName()) + " has invited " + F.elem(command.getTargetName()) + " to the party")); + break; + } + case SUCCESS: + { + Party party = _plugin.getPartyByPlayer(command.getOrigin().getRequesterUUID()); + if (party == null) + { + // todo wat do + return; + } + if (!party.getOwnerName().equals(command.getOrigin().getRequesterName())) + { + //todo wat do + } + + _plugin.getInviteManager().inviteTo(command.getTargetName(), command.getTargetUUID(), command.getOrigin().getRequesterName(), command.getOrigin().getRequesterUUID(), command.getOrigin().getPartyUUID(), _plugin.getServerName()); + party.sendMessage(F.main("Party", F.elem(command.getOrigin().getRequesterName()) + " has invited " + F.elem(command.getTargetName()) + " to the party")); + break; + } + case UNKNOWN: + UtilPlayer.message(caller, F.main("Party", "Uh oh, something went wrong while inviting " + F.elem(command.getTargetName()))); + break; + } + }); + }); + + ServerCommandManager.getInstance().registerCommandType(PartyCrossServerInviteAccept.class, command -> + { + _plugin.runSync(() -> + { + Player apparentSender = Bukkit.getPlayer(command.getInviterUUID()); + if (apparentSender != null && apparentSender.isOnline()) + { + _plugin.getInviteManager().removeInviteTo(command.getPlayerName(), command.getPartyUUID()); + + Party partyOfSender = _plugin.getPartyByPlayer(apparentSender); + if (partyOfSender == null) + { + //todo wat do + return; + } + if (!partyOfSender.getUniqueId().equals(command.getPartyUUID())) + { + //todo wat do + return; + } + + if (!partyOfSender.getOwnerName().equals(command.getInviterName())) + { + // todo ignore for now but wat do + } + + // we good + _plugin.putIntoPendingJoin(command.getPlayerUUID(), partyOfSender.getUniqueId()); + Portal.transferPlayer(command.getPlayerName(), _serverName); + } + }); + }); + + ServerCommandManager.getInstance().registerCommandType(PartyCrossServerInviteDeny.class, command -> + { + _plugin.runSync(() -> + { + Player apparentSender = Bukkit.getPlayer(command.getInviterUUID()); + if (apparentSender != null && apparentSender.isOnline()) + { + _plugin.getInviteManager().removeInviteTo(command.getPlayerName(), command.getPartyUUID()); + + Party partyOfSender = _plugin.getPartyByPlayer(apparentSender); + if (partyOfSender == null) + { + UtilPlayer.message(apparentSender, F.main("Party", F.elem(command.getPlayerName()) + " has denied your invite, but it seems you don't have a party anymore")); + return; + } + if (!partyOfSender.getUniqueId().equals(command.getPartyUUID())) + { + UtilPlayer.message(apparentSender, F.main("Party", F.elem(command.getPlayerName()) + " has denied your invite, but it seems that you've made a new party in the meantime")); + return; + } + + if (!partyOfSender.getOwnerName().equals(command.getInviterName())) + { + UtilPlayer.message(apparentSender, F.main("Party", F.elem(command.getPlayerName()) + " has denied your invite, but it seems that you are not the owner of the party anymore")); + return; + } + + UtilPlayer.message(apparentSender, F.main("Party", F.elem(command.getPlayerName()) + " has denied your invite")); + } + }); }); } - /** - * Serializes and sends a party to another server - * - * @param server The destination server - * @param party The party to be sent - */ - public void sendPartyInfo(String server, Party party) + public Map> getPendingFindResponse() { - publish(server, PARTY_INFO, GSON.toJson(party)); - List members = party.getMembersByUUID(); - party.getMembersByUUID().forEach(uuid -> _plugin.getMethodManager().removeForTransfer(uuid)); - members.stream().map(Bukkit::getPlayer).forEach(player1 -> - { - player1.leaveVehicle(); - player1.eject(); - _plugin.getPortal().sendPlayer(player1, server); - }); - _plugin.removeParty(party); - } - - /** - * Deserialize and store a received party's information - * @param json - */ - public void handlePartyInfo(String json) - { - new BukkitRunnable() - { - @Override - public void run() - { - Party party = GSON.fromJson(json, Party.class); - _plugin.addParty(party); - party.getMembersByUUID().forEach(s -> _plugin.getMethodManager().addToPartyOnTransfer(s, party)); - Bukkit.getServer().getPluginManager().callEvent(new PartyDataReceivedEvent(party)); - } - }.runTaskLater(_plugin.getPlugin(), 10L); - } - - /** - * @return This servers name - */ - public String getServerName() - { - return _serverName; - } - - /** - * @return The channel constant for finding players - */ - public String getFinder() - { - return FIND_PLAYERS_CHANNEL; - } - - public void cancelTask(String player) - { - BukkitTask task = TASKS.remove(player); - - if (task != null) - { - task.cancel(); - } + return _pendingFindResponse; } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/PartyRedisListener.java b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/PartyRedisListener.java deleted file mode 100644 index f4c3b4d20..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/PartyRedisListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package mineplex.core.party.redis; - -import mineplex.core.party.manager.PartyRedisManager; -import redis.clients.jedis.JedisPubSub; - -/** - * Handles incoming messages into the Party Redis System - */ -public class PartyRedisListener extends JedisPubSub -{ - - private final PartyRedisManager _redisManager; - - public PartyRedisListener(PartyRedisManager redisManager) - { - _redisManager = redisManager; - } - - @Override - public void onMessage(String channel, String message) - { - if(channel.equalsIgnoreCase(_redisManager.getFinder())) - { - _redisManager.handle(RedisMessageType.PLAYER_FIND_REQUEST, message); - return; - } - RedisMessageType type = RedisMessageType.valueOf(message.split("@")[0].toUpperCase()); - _redisManager.handle(type, message.split("@")[1]); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisMessageType.java b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisMessageType.java deleted file mode 100644 index 533f62c75..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisMessageType.java +++ /dev/null @@ -1,63 +0,0 @@ -package mineplex.core.party.redis; - -/** - * Messages sent within the redis messaging system - * And their corresponding arguments - */ -public enum RedisMessageType -{ - - //Message: SERVER_FROM,PLAYER_TARGET,PLAYER_SENDER - PLAYER_FIND_REQUEST(1, "{0},{1},{2}"), - //Message: SERVER_ON,PLAYER_TARGET_NAME,PLAYER_TARGET_UUID,PLAYER_SENDER - PLAYER_FIND_RESPONSE(2, "{0},{1},{2},{3}"), - - //Message: SERVER_FROM,PLAYER_SENDER,PLAYER_TARGET - INVITE_PLAYER_REQUEST(3, "{0},{1},{2}"), - //Message: PLAYER_SENDER,PLAYER_TARGET_NAME,PLAYER_TARGET_UUID,RESPONSE - INVITE_PLAYER_RESPONSE(4, "{0},{1},{2},{3}"), - //Message: PLAYER_SENDER,PLAYER_TARGET_NAME,PLAYER_TARGET_UUID,RESPONSE - INVITE_PLAYER_ALREADY_IN_PARTY(5, "{0},{1},{2},{3}"), - //Message: PLAYER_SENDER,PLAYER_TARGET_NAME,PLAYER_TARGET_UUID,RESPONSE - INVITE_PLAYER_NOT_ACCEPTING_INVITES(5, "{0},{1},{2},{3}"), - - //Message: SERVER_FROM,PLAYER_INITIATING,PARTY_SIZE,_CAN_JOIN_FULL - PREJOIN_SERVER_REQUEST(6, "{0},{1},{2},{3}"), - //Message: PLAYER_INITIATING,REASON,SERVER - PREJOIN_SERVER_RESPONSE(7, "{0},{1},{2}"), - - //Message: JSON Party - PARTY_INFO(8, "{0}"), - TEST_CONN(9, "{0}") - ; - - private int _id; - private String _contents; - - RedisMessageType(int id, String contents) - { - _id = id; - _contents = contents; - } - - public int getId() - { - return _id; - } - - /** - * Format this message - * @param args The contents to be sent with this message - * @return A formatted message - */ - public String format(String... args) - { - String message = _contents; - for(int i = 0; i < args.length; i++) - { - message = message.replace("{" + i + "}", args[i]); - } - return message; - } - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteAccept.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteAccept.java new file mode 100644 index 000000000..b6c7e80dc --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteAccept.java @@ -0,0 +1,50 @@ +package mineplex.core.party.rediscommands; + +import java.util.UUID; + +import mineplex.serverdata.commands.ServerCommand; + +public class PartyCrossServerInviteAccept extends ServerCommand +{ + private final String _playerName; + private final UUID _playerUUID; + + private final String _inviterName; + private final UUID _inviterUUID; + + private final UUID _partyUUID; + + public PartyCrossServerInviteAccept(String playerName, UUID playerUUID, String inviterName, UUID inviterUUID, UUID partyUUID) + { + _playerName = playerName; + _playerUUID = playerUUID; + _inviterName = inviterName; + _inviterUUID = inviterUUID; + _partyUUID = partyUUID; + } + + public String getPlayerName() + { + return _playerName; + } + + public UUID getPlayerUUID() + { + return _playerUUID; + } + + public String getInviterName() + { + return _inviterName; + } + + public UUID getInviterUUID() + { + return _inviterUUID; + } + + public UUID getPartyUUID() + { + return _partyUUID; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteCommand.java new file mode 100644 index 000000000..d35bc1a0b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteCommand.java @@ -0,0 +1,44 @@ +package mineplex.core.party.rediscommands; + +import java.util.UUID; + +import org.bukkit.entity.Player; + +import mineplex.core.party.Party; +import mineplex.serverdata.commands.ServerCommand; + +public class PartyCrossServerInviteCommand extends ServerCommand +{ + private final String _requesterName; + private final UUID _requesterUUID; + private final String _target; + private final UUID _partyUUID; + + public PartyCrossServerInviteCommand(Player caller, String target, Party destParty) + { + _target = target; + _requesterName = caller.getName(); + _requesterUUID = caller.getUniqueId(); + _partyUUID = destParty.getUniqueId(); + } + + public String getTarget() + { + return _target; + } + + public String getRequesterName() + { + return _requesterName; + } + + public UUID getRequesterUUID() + { + return _requesterUUID; + } + + public UUID getPartyUUID() + { + return _partyUUID; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteDeny.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteDeny.java new file mode 100644 index 000000000..cfc37736b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteDeny.java @@ -0,0 +1,50 @@ +package mineplex.core.party.rediscommands; + +import java.util.UUID; + +import mineplex.serverdata.commands.ServerCommand; + +public class PartyCrossServerInviteDeny extends ServerCommand +{ + private final String _playerName; + private final UUID _playerUUID; + + private final String _inviterName; + private final UUID _inviterUUID; + + private final UUID _partyUUID; + + public PartyCrossServerInviteDeny(String playerName, UUID playerUUID, String inviterName, UUID inviterUUID, UUID partyUUID) + { + _playerName = playerName; + _playerUUID = playerUUID; + _inviterName = inviterName; + _inviterUUID = inviterUUID; + _partyUUID = partyUUID; + } + + public String getPlayerName() + { + return _playerName; + } + + public UUID getPlayerUUID() + { + return _playerUUID; + } + + public String getInviterName() + { + return _inviterName; + } + + public UUID getInviterUUID() + { + return _inviterUUID; + } + + public UUID getPartyUUID() + { + return _partyUUID; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteResponse.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteResponse.java new file mode 100644 index 000000000..bfc49a223 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyCrossServerInviteResponse.java @@ -0,0 +1,58 @@ +package mineplex.core.party.rediscommands; + +import java.util.UUID; + +import org.bukkit.entity.Player; + +import com.google.gson.annotations.SerializedName; + +import mineplex.serverdata.commands.ServerCommand; + +public class PartyCrossServerInviteResponse extends ServerCommand +{ + private final Result _result; + private final PartyCrossServerInviteCommand _origin; + + private final String _targetName; + private final UUID _targetUUID; + + public PartyCrossServerInviteResponse(Result result, PartyCrossServerInviteCommand origin, Player target) + { + _result = result; + _origin = origin; + + _targetName = target.getName(); + _targetUUID = target.getUniqueId(); + } + + public Result getResult() + { + return _result == null ? Result.UNKNOWN : _result; + } + + public PartyCrossServerInviteCommand getOrigin() + { + return _origin; + } + + public String getTargetName() + { + return _targetName; + } + + public UUID getTargetUUID() + { + return _targetUUID; + } + + public enum Result + { + @SerializedName("success-in-party") + SUCCESS_IN_PARTY, + @SerializedName("not-accepting-invites") + TARGET_NOT_ACCEPTING_INVITES, + @SerializedName("success") + SUCCESS, + UNKNOWN + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferRequest.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferRequest.java new file mode 100644 index 000000000..b647deef4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferRequest.java @@ -0,0 +1,53 @@ +package mineplex.core.party.rediscommands; + +import java.util.List; +import java.util.UUID; + +import com.mojang.authlib.GameProfile; + +import mineplex.serverdata.commands.ServerCommand; + +public class PartyTransferRequest extends ServerCommand +{ + private final UUID _partyUUID; + private final List _allMembers; + private final List _unrankedMembers; + private final boolean _canJoinFullServers; + + private final GameProfile _ownerGameProfile; + + public PartyTransferRequest(UUID partyUUID, GameProfile ownerGameProfile, List allMembers, List unrankedMembers, boolean canJoinFullServers, String destServer) + { + super(destServer); + _partyUUID = partyUUID; + _ownerGameProfile = ownerGameProfile; + _allMembers = allMembers; + _unrankedMembers = unrankedMembers; + _canJoinFullServers = canJoinFullServers; + } + + public UUID getPartyUUID() + { + return _partyUUID; + } + + public List getAllMembers() + { + return _allMembers; + } + + public List getUnrankedMembers() + { + return _unrankedMembers; + } + + public boolean isCanJoinFullServers() + { + return _canJoinFullServers; + } + + public GameProfile getOwnerGameProfile() + { + return _ownerGameProfile; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferResponse.java b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferResponse.java new file mode 100644 index 000000000..ee881e537 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/rediscommands/PartyTransferResponse.java @@ -0,0 +1,36 @@ +package mineplex.core.party.rediscommands; + +import com.google.gson.annotations.SerializedName; + +import mineplex.serverdata.commands.ServerCommand; + +public class PartyTransferResponse extends ServerCommand +{ + private final PartyTransferRequest _origin; + private final Result _result; + + public PartyTransferResponse(PartyTransferRequest origin, Result result) + { + _origin = origin; + _result = result; + } + + public PartyTransferRequest getOrigin() + { + return _origin; + } + + public Result getResult() + { + return _result; + } + + public enum Result + { + @SerializedName("not-enough-room") + NOT_ENOUGH_ROOM, + @SerializedName("success") + SUCCESS, + UNKNOWN + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/PartyMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/PartyMenu.java index e66709c56..3c009de31 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/PartyMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/PartyMenu.java @@ -13,15 +13,8 @@ import org.bukkit.Material; */ public abstract class PartyMenu extends Menu { - - protected static final Button PURCHASE_MORE_SLOTS = new IconButton(new ItemBuilder(Material.REDSTONE_BLOCK) - .setTitle(C.cRed + C.Bold + "Locked!") - .setLore(" ", C.cGray + "Purchase a rank @ mineplex.com/shop", C.cGray + "Purchasing a rank increases your", C.cGray + "party size to allow 10 people!") - .build()); - public PartyMenu(String name, PartyManager plugin) { super(name, plugin); } - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/PartyMemberIcon.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/PartyMemberIcon.java index 5be48d2c9..fd15e6a97 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/PartyMemberIcon.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/PartyMemberIcon.java @@ -1,36 +1,52 @@ package mineplex.core.party.ui.button; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilServer; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.party.Party; -import mineplex.core.party.event.PartyMemberKickGUIEvent; -import mineplex.core.party.ui.button.tools.PartyButton; -import org.bukkit.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; +import com.mojang.authlib.GameProfile; + +import mineplex.core.Managers; +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.menu.Menu; +import mineplex.core.party.Lang; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.core.party.constants.PartyRemoveReason; +import mineplex.core.party.ui.button.tools.PartyButton; +import mineplex.core.utils.UtilGameProfile; + /** * The button representing a Party member. */ public class PartyMemberIcon extends PartyButton { + private final String _name; private ItemStack _itemStack; - public PartyMemberIcon(String player, Party party, boolean owner) + public PartyMemberIcon(GameProfile playerProfile, Party party, boolean owner, boolean isOwnerView) { super(null, party, null); ItemBuilder builder = new ItemBuilder(Material.SKULL_ITEM, 1, (byte) 3) - .setTitle(C.cYellow + player) - .setPlayerHead(player); - if(owner) + .setTitle(C.cYellow + playerProfile.getName()); + if (owner) { builder.addLore(" ", C.cGreenB + "Leader"); } + + if (!owner && isOwnerView) + { + builder.addLore(" ", C.cRed + "Shift-Right-Click to kick"); + } _itemStack = builder.build(); + + UtilGameProfile.setGameProfile(playerProfile, _itemStack); + + _name = playerProfile.getName(); } @Override @@ -39,29 +55,23 @@ public class PartyMemberIcon extends PartyButton return _itemStack; } - /** - * Called when a player clicks one of the member icons - * - * @param clicker The player who clicked - * @param clicked The itemstack he clicked - */ - public void onClick(Player clicker, ItemStack clicked) - { - if (!getParty().isOwnerKickMode()) - { - return; - } - if(!getParty().getOwner().equalsIgnoreCase(clicker.getName())) - { - return; - } - String name = ChatColor.stripColor(clicked.getItemMeta().getDisplayName()); - UtilServer.getPluginManager().callEvent(new PartyMemberKickGUIEvent(getParty(), name, clicker)); - } - @Override public void onClick(Player player, ClickType clickType) { + if (!getParty().getOwnerName().equalsIgnoreCase(player.getName())) + { + return; + } + if (clickType == ClickType.SHIFT_RIGHT) + { + Player target = Bukkit.getPlayerExact(_name); + if (target != null && !getParty().isOwner(target) && target != player && getParty().isMember(target)) + { + Lang.REMOVED.send(target); + Managers.require(PartyManager.class).removeFromParty(target, PartyRemoveReason.KICKED); + Menu.get(player.getUniqueId()).resetAndUpdate(); + } + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/LeavePartyButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/LeavePartyButton.java index 174a46ab6..1b746ecc0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/LeavePartyButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/LeavePartyButton.java @@ -32,7 +32,7 @@ public class LeavePartyButton extends Button { return; } - getPlugin().getMethodManager().leaveParty(player); + getPlugin().leaveParty(player); player.closeInventory(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/DenyAllButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/DenyAllButton.java index 7ae041d6f..7afa2d395 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/DenyAllButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/DenyAllButton.java @@ -1,15 +1,16 @@ package mineplex.core.party.ui.button.tools.invite; -import mineplex.core.common.util.C; -import mineplex.core.menu.Button; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.party.PartyManager; -import mineplex.core.party.ui.menus.PartyInvitesMenu; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.menu.Button; +import mineplex.core.party.PartyManager; +import mineplex.core.party.ui.menus.PartyInvitesMenu; + /** * Deny's all invites currently pending */ @@ -17,9 +18,9 @@ public class DenyAllButton extends Button { private static final ItemStack ITEM = new ItemBuilder(Material.REDSTONE_BLOCK) - .setTitle(C.cRed + "Delete all Invites") - .setLore(" ", C.cGray + "This will remove all pending invites.") - .build(); + .setTitle(C.cRed + "Delete all Invites") + .setLore(" ", C.cGray + "This will remove all pending invites.") + .build(); public DenyAllButton(PartyManager plugin) { @@ -29,7 +30,7 @@ public class DenyAllButton extends Button @Override public void onClick(Player player, ClickType clickType) { - getPlugin().getInviteManager().getAllInvites(player).forEach(inviteData -> getPlugin().getMethodManager().respondToInvite(player, inviteData.getInvitedTo(), false)); + getPlugin().getInviteManager().getAllInvites(player).forEach(inviteData -> getPlugin().denyInviteBySender(player, inviteData.getInviterName())); new PartyInvitesMenu(getPlugin()).open(player); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/InviteButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/InviteButton.java index 01478575f..2dfe161e8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/InviteButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/InviteButton.java @@ -1,12 +1,13 @@ package mineplex.core.party.ui.button.tools.invite; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.menu.Button; import mineplex.core.party.PartyManager; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; /** * Represents an invitation, to which a player can accept or deny @@ -19,23 +20,24 @@ public class InviteButton extends Button public InviteButton(String name, PartyManager plugin) { super(new ItemBuilder(Material.SKULL_ITEM) - .setTitle(C.cYellow + name) - .setLore(" ", C.cYellow + "Right-Click " + C.cGray + "to deny the invite", C.cYellow + "Left-Click " + C.cGray + "to accept the invite") - .setData((short) 3) - .setPlayerHead(name) - .build(), plugin); + .setTitle(C.cYellow + name) + .setLore(" ", C.cYellow + "Right-Click " + C.cGray + "to deny the invite", C.cYellow + "Left-Click " + C.cGray + "to accept the invite") + .setData((short) 3) + .setPlayerHead(name) + .build(), plugin); _name = name; } @Override public void onClick(Player player, ClickType clickType) { - if(clickType == ClickType.LEFT) + if (clickType == ClickType.LEFT) { - getPlugin().getMethodManager().respondToInvite(player, _name, true); - } else if(clickType == ClickType.RIGHT) + getPlugin().acceptInviteBySender(player, _name); + } + else if (clickType == ClickType.RIGHT) { - getPlugin().getMethodManager().respondToInvite(player, _name, false); + getPlugin().denyInviteBySender(player, _name); } player.closeInventory(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/NextPageButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/NextPageButton.java index 386cf1962..0412c987d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/NextPageButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/NextPageButton.java @@ -42,7 +42,7 @@ public class NextPageButton extends Button List data = _menu.getDataForPage(_menu.getCurrentPage()); for(int i = 0; i < data.size(); i++) { - _menu.setButton(i + _menu.getStartingSlot(), new InviteButton(data.get(i).getInvitedTo(), getPlugin())); + _menu.setButton(i + _menu.getStartingSlot(), new InviteButton(data.get(i).getInviterName(), getPlugin())); } _menu.update(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/PrevPageButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/PrevPageButton.java index e0bf5d315..91d91806b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/PrevPageButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/invite/PrevPageButton.java @@ -41,7 +41,7 @@ public class PrevPageButton extends Button List data = _menu.getDataForPage(_menu.getCurrentPage()); for(int i = 0; i < data.size(); i++) { - _menu.setButton(i + _menu.getStartingSlot(), new InviteButton(data.get(i).getInvitedTo(), getPlugin())); + _menu.setButton(i + _menu.getStartingSlot(), new InviteButton(data.get(i).getInviterName(), getPlugin())); } _menu.update(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/AddPlayerButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/AddPlayerButton.java index 72bad2bed..ec2a4e0c6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/AddPlayerButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/AddPlayerButton.java @@ -19,7 +19,7 @@ public class AddPlayerButton extends PartyButton private static final ItemStack ITEM = new ItemBuilder(Material.SIGN) .setTitle(C.cYellow + "Invite a Player") - .setLore(" ", C.cGray + "Brings up the Inviting Anvil!", C.cGray + "Simply type a player's name", C.cGray + "and click the paper to invite him") + .setLore(" ", C.cGray + "Brings up the Inviting Anvil!", C.cGray + "Simply type a player's name", C.cGray + "and click the paper to invite them") .build(); public AddPlayerButton(PartyManager plugin, Party party) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/DisbandPartyButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/DisbandPartyButton.java index ce2afa915..5105dd77a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/DisbandPartyButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/DisbandPartyButton.java @@ -32,7 +32,7 @@ public class DisbandPartyButton extends Button { return; } - getPlugin().getMethodManager().disband(player); + getPlugin().disband(player); player.closeInventory(); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/KickPlayerButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/KickPlayerButton.java deleted file mode 100644 index 48069adf2..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/KickPlayerButton.java +++ /dev/null @@ -1,56 +0,0 @@ -package mineplex.core.party.ui.button.tools.owner; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.party.Party; -import mineplex.core.party.ui.PartyMenu; -import mineplex.core.party.ui.button.tools.PartyButton; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.ItemStack; - -/** - * Toggles {@code {@link Party#isOwnerKickMode()}} - */ -public class KickPlayerButton extends PartyButton -{ - - private static final ItemStack ITEM_OFF = new ItemBuilder(Material.IRON_AXE) - .setTitle(C.cYellow + "Kick Players") - .setLore(" ", F.elem("Right-Click") + " to enter " + C.cGreen + "Kick Mode", - C.cGray + "While activated, click on a player's head", C.cGray + "to remove them from the party") - .build(); - - private static final ItemStack ITEM_ON = new ItemBuilder(Material.IRON_AXE) - .setTitle(C.cYellow + "Kick Players") - .setLore(" ", F.elem("Right-Click") + " to leave " + C.cRed + "Kick Mode", - C.cGray + "While activated, click on a player's head", C.cGray + "to remove them from the party") - .setGlow(true) - .build(); - - - public KickPlayerButton(Party party) - { - super(ITEM_OFF, party, null); - } - - @Override - public void onClick(Player player, ClickType clickType) - { - if(clickType != ClickType.RIGHT) - { - return; - } - getParty().setOwnerKickMode(!getParty().isOwnerKickMode()); - if (getParty().isOwnerKickMode()) - { - setItemStack(ITEM_ON); - } else - { - setItemStack(ITEM_OFF); - } - PartyMenu.get(player.getUniqueId()).update(); - } -} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/SelectServerButton.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/SelectServerButton.java index 5c2fed842..676263b1d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/SelectServerButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/button/tools/owner/SelectServerButton.java @@ -1,15 +1,16 @@ package mineplex.core.party.ui.button.tools.owner; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + import mineplex.core.common.util.C; import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.party.Party; import mineplex.core.party.event.PartySelectServerEvent; import mineplex.core.party.ui.button.tools.PartyButton; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.ItemStack; /** * Opens the server selection menu @@ -18,9 +19,9 @@ public class SelectServerButton extends PartyButton { private static final ItemStack ITEM = new ItemBuilder(Material.COMPASS) - .setTitle(C.cYellow + "Select Server") - .setLore(" ", C.cGray + "Brings up the Server Selection GUI") - .build(); + .setTitle(C.cYellow + "Select Server") + .setLore(" ", C.cGray + "Brings up the Server Selection GUI") + .build(); public SelectServerButton(Party party) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyInvitesMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyInvitesMenu.java index fbba8908a..ae7cf1252 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyInvitesMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyInvitesMenu.java @@ -20,6 +20,8 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; +import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -69,7 +71,7 @@ public class PartyInvitesMenu extends PartyMenu buttons[BACK_BUTTON_SLOT] = new BackButton(getPlugin()); - List all = (List) getPlugin().getInviteManager().getAllInvites(player); + List all = getPlugin().getInviteManager().getAllInvites(player); if (all == null || all.isEmpty()) { @@ -81,6 +83,8 @@ public class PartyInvitesMenu extends PartyMenu return pane(buttons); } + all.sort(Comparator.comparing(InviteData::getInviterName)); + buttons[DENY_ALL_BUTTON_SLOW] = new DenyAllButton(getPlugin()); if (_filterBy == null || _filterBy.isEmpty()) @@ -94,7 +98,7 @@ public class PartyInvitesMenu extends PartyMenu if (showFiltered) { - all = all.stream().filter(inviteData -> inviteData.getInvitedTo().contains(_filterBy)).collect(Collectors.toList()); + all = all.stream().filter(inviteData -> inviteData.getInviterName().contains(_filterBy)).collect(Collectors.toList()); } if (showFiltered && all.isEmpty()) @@ -125,7 +129,7 @@ public class PartyInvitesMenu extends PartyMenu buttons[NEXT_PAGE_SLOT] = new NextPageButton(this, getPlugin()); _pagesNeeded = pagesNeeded; - _pagesOfData = Maps.newHashMap(); + _pagesOfData = new HashMap<>(); int page = 0; @@ -150,7 +154,7 @@ public class PartyInvitesMenu extends PartyMenu { for (int i = 0; i < all.size(); i++) { - String to = all.get(i).getInvitedTo(); + String to = all.get(i).getInviterName(); buttons[STARTING_SLOT + i] = new InviteButton(to, getPlugin()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyMainMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyMainMenu.java index 055203db3..d12dc6851 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyMainMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyMainMenu.java @@ -1,22 +1,24 @@ package mineplex.core.party.ui.menus; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; import mineplex.core.menu.Button; +import mineplex.core.menu.Menu; +import mineplex.core.menu.builtin.ButtonOpenInventory; import mineplex.core.party.PartyManager; -import mineplex.core.party.ui.PartyMenu; import mineplex.core.party.ui.button.tools.main.InvitePlayerButton; import mineplex.core.party.ui.button.tools.main.ViewInvitesButton; -import org.bukkit.entity.Player; -/** - * The main GUI for parties. - */ -public class PartyMainMenu extends PartyMenu +public class PartyMainMenu extends Menu { - - private final int INV_SIZE = 9; - - private final int INVITE_PLAYER_BUTTON_SLOT = 3; - private final int VIEW_INVITES_BUTTON_SLOT = 5; + private static final ItemStack VIEW_INVITES_ITEM = new ItemBuilder(Material.BOOK) + .setTitle(C.cYellow + "View Invites") + .setLore(" ", C.cGray + "Manage invites to parties.") + .build(); public PartyMainMenu(PartyManager plugin) { @@ -26,10 +28,10 @@ public class PartyMainMenu extends PartyMenu @Override protected Button[] setUp(Player player) { - Button[] buttons = new Button[INV_SIZE]; + Button[] buttons = new Button[9]; - buttons[INVITE_PLAYER_BUTTON_SLOT] = new InvitePlayerButton(getPlugin()); - buttons[VIEW_INVITES_BUTTON_SLOT] = new ViewInvitesButton(getPlugin()); + buttons[3] = new InvitePlayerButton(getPlugin()); + buttons[5] = new ButtonOpenInventory<>(VIEW_INVITES_ITEM, getPlugin(), () -> new PartyInvitesMenu(getPlugin())); return buttons; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyOwnerMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyOwnerMenu.java index 563cfaef4..0b1c4c071 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyOwnerMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyOwnerMenu.java @@ -1,5 +1,10 @@ package mineplex.core.party.ui.menus; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.entity.Player; + import mineplex.core.menu.Button; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; @@ -8,14 +13,9 @@ import mineplex.core.party.ui.button.PartyMemberIcon; import mineplex.core.party.ui.button.tools.LeavePartyButton; import mineplex.core.party.ui.button.tools.owner.AddPlayerButton; import mineplex.core.party.ui.button.tools.owner.DisbandPartyButton; -import mineplex.core.party.ui.button.tools.owner.KickPlayerButton; import mineplex.core.party.ui.button.tools.owner.SelectServerButton; import mineplex.core.party.ui.button.tools.owner.TransferOwnerButton; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.UUID; +import mineplex.core.utils.UtilGameProfile; /** * The display menu for managing parties by the owner @@ -31,7 +31,6 @@ public class PartyOwnerMenu extends PartyMenu private final int SKIP_TO_SLOT = 29; private final int SKIP_TO_SLOT_2 = 38; private final int ADD_PLAYER_BUTTON_SLOT = 1; - private final int KICK_PLAYER_BUTTON_SLOT = 4; private final int TRANSFER_OWNER_BUTTON_SLOT = 7; private final int SELECT_SERVER_BUTTON_SLOT = 46; private final int LEAVE_PARTY_BUTTON_SLOT = 49; @@ -43,11 +42,6 @@ public class PartyOwnerMenu extends PartyMenu { super("Manage Party", plugin); _party = party; - //We want this disabled by default - if(_party.isOwnerKickMode()) - { - _party.setOwnerKickMode(false); - } } @Override @@ -56,8 +50,6 @@ public class PartyOwnerMenu extends PartyMenu Button[] buttons = new Button[INV_SIZE]; //Tools buttons[ADD_PLAYER_BUTTON_SLOT] = new AddPlayerButton(getPlugin(), _party); - //Kick player - buttons[KICK_PLAYER_BUTTON_SLOT] = new KickPlayerButton(_party); //Transfer ownership buttons[TRANSFER_OWNER_BUTTON_SLOT] = new TransferOwnerButton(_party, getPlugin()); //Go to server @@ -67,23 +59,24 @@ public class PartyOwnerMenu extends PartyMenu //Disband buttons[DISBAND_PARTY_BUTTON_SLOW] = new DisbandPartyButton(getPlugin()); - List members = _party.getMembers(); - members.remove(_party.getOwner()); - buttons[OWNER_HEAD_SLOT] = new PartyMemberIcon(_party.getOwner(), _party, true); + List members = new ArrayList<>(_party.getMembers()); + _party.getOwnerAsPlayer().ifPresent(members::remove); + buttons[OWNER_HEAD_SLOT] = new PartyMemberIcon(_party.getOwner(), _party, true, true); int slot = STARTING_SLOT; //Players - for (String member: members) + for (Player member : members) { if (slot == CUT_OFF_SLOT) { slot = SKIP_TO_SLOT; - } else if (slot == CUT_OFF_SLOT_2) + } + else if (slot == CUT_OFF_SLOT_2) { slot = SKIP_TO_SLOT_2; } - buttons[slot++] = new PartyMemberIcon(Bukkit.getPlayerExact(member).getName(), _party, false); + buttons[slot++] = new PartyMemberIcon(UtilGameProfile.getGameProfile(member), _party, false, true); } return pane(buttons); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyViewMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyViewMenu.java index f907b7875..3037c42a1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyViewMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/PartyViewMenu.java @@ -1,5 +1,10 @@ package mineplex.core.party.ui.menus; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.entity.Player; + import mineplex.core.menu.Button; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; @@ -7,11 +12,7 @@ import mineplex.core.party.ui.PartyMenu; import mineplex.core.party.ui.button.PartyMemberIcon; import mineplex.core.party.ui.button.tools.LeavePartyButton; import mineplex.core.party.ui.button.tools.view.SuggestPlayerButton; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.UUID; +import mineplex.core.utils.UtilGameProfile; /** * The menu a player see's when he is a member, and not an owner, of a party. @@ -33,7 +34,7 @@ public class PartyViewMenu extends PartyMenu public PartyViewMenu(Party party, PartyManager plugin) { - super(party.getName() + "'s Party", plugin); + super(party.getOwnerName() + "'s Party", plugin); _party = party; } @@ -46,23 +47,24 @@ public class PartyViewMenu extends PartyMenu //Suggest Player buttons[SUGGEST_PLAYER_BUTTON_SLOT] = new SuggestPlayerButton(_party, getPlugin()); - List members = _party.getMembers(); - members.remove(_party.getOwner()); - buttons[OWNER_HEAD_SLOT] = new PartyMemberIcon(_party.getOwner(), _party, true); + List members = new ArrayList<>(_party.getMembers()); + _party.getOwnerAsPlayer().ifPresent(members::remove); + buttons[OWNER_HEAD_SLOT] = new PartyMemberIcon(_party.getOwner(), _party, true, false); int slot = STARTING_SLOT; //Players - for (String member : members) + for (Player member : members) { if (slot == CUT_OFF_SLOT) { slot = SKIP_TO_SLOT; - } else if (slot == CUT_OFF_SLOT_2) + } + else if (slot == CUT_OFF_SLOT_2) { slot = SKIP_TO_SLOT_2; } - buttons[slot++] = new PartyMemberIcon(Bukkit.getPlayer(member).getName(), _party, false); + buttons[slot++] = new PartyMemberIcon(UtilGameProfile.getGameProfile(member), _party, false, false); } return pane(buttons); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/InviteFilterMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/InviteFilterMenu.java index 24de3bc87..36c0fd03e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/InviteFilterMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/InviteFilterMenu.java @@ -14,7 +14,7 @@ public class InviteFilterMenu extends PlayerInputActionMenu public InviteFilterMenu(PartyManager partyManager, Player player, Party party) { - super(partyManager, player, party); + super(partyManager, player); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyInvitePlayerMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyInvitePlayerMenu.java index 4e30ebc07..c269ed6dc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyInvitePlayerMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyInvitePlayerMenu.java @@ -14,17 +14,19 @@ public class PartyInvitePlayerMenu extends PlayerNameMenu { private PartyManager _partyManager; + private Party _party; public PartyInvitePlayerMenu(PartyManager partyManager, Player player, Party party) { - super(partyManager, partyManager.getClientManager(), player, party); + super(partyManager, partyManager.getClientManager(), player); _partyManager = partyManager; + this._party = party; } @Override public void onSuccess(String name) { - _partyManager.getMethodManager().invite(_player, name); + _partyManager.invite(_player, name); _player.playSound(_player.getLocation(), Sound.NOTE_PLING, 1, 1.6f); _player.closeInventory(); if (_party == null) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyTransferOwnerMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyTransferOwnerMenu.java index 91305bfdc..a1156970e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyTransferOwnerMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PartyTransferOwnerMenu.java @@ -1,10 +1,14 @@ package mineplex.core.party.ui.menus.input; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + import mineplex.core.anvilMenu.player.PlayerNameMenu; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.party.Lang; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; -import org.bukkit.entity.Player; /** * @@ -13,23 +17,32 @@ public class PartyTransferOwnerMenu extends PlayerNameMenu { private PartyManager _partyManager; + private Party _party; public PartyTransferOwnerMenu(PartyManager partyManager, Player player, Party party) { - super(partyManager, partyManager.getClientManager(), player, party); + super(partyManager, partyManager.getClientManager(), player); _partyManager = partyManager; + this._party = party; } @Override public void onSuccess(String name) { - if(!_party.contains(name)) + Player player = Bukkit.getPlayer(name); + if (player == null) + { + UtilPlayer.message(_player, F.main("Party", "Could not find " + F.elem(name) + "!")); + return; + } + if (!_party.isMember(player)) { Lang.NOT_MEMBER.send(_player, name); return; } - _partyManager.getMethodManager().transferOwner(name, _player.getName()); + + _party.setOwner(player); Lang.TRANSFER_OWNER.send(_party, _player.getName(), name); _player.closeInventory(); _player.chat("/party"); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PlayerSuggestPlayerMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PlayerSuggestPlayerMenu.java index d6fb40f38..bcc8f95f3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PlayerSuggestPlayerMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/ui/menus/input/PlayerSuggestPlayerMenu.java @@ -17,35 +17,42 @@ import org.bukkit.entity.Player; */ public class PlayerSuggestPlayerMenu extends PlayerNameMenu { + private Party _party; public PlayerSuggestPlayerMenu(PartyManager partyManager, Player player, Party party) { - super(partyManager, partyManager.getClientManager(), player, party); + super(partyManager, partyManager.getClientManager(), player); + this._party = party; } @Override public void onSuccess(String name) { - if(_party == null || _party.getOwner() == null) + if(_party == null || _party.getOwnerName() == null) { Lang.NO_PARTY.send(_player); return; } - if(_party.contains(name)) + Player target = Bukkit.getPlayer(name); + + if (target != null) { - Lang.ALREADY_MEMBER.send(_player, name); - return; + if (_party.isMember(target)) + { + Lang.ALREADY_MEMBER.send(_player, name); + return; + } } - Player player = Bukkit.getPlayerExact(_party.getOwner()); + Player player = Bukkit.getPlayerExact(_party.getOwnerName()); _party.sendMessage(C.mHead + "Party> " + F.name(_player.getName()) + " has suggested " + F.name(name) + " be invited."); ChildJsonMessage message = new ChildJsonMessage("").extra(F.main("Party", "Click ")); message.add(F.link("Invite " + name)) .hover(HoverEvent.SHOW_TEXT, C.cGreen + "Clicking this will invite " + C.cYellow + name + C.cGreen + " to the party") - .click(ClickEvent.RUN_COMMAND, "/partyinvite " + name); + .click(ClickEvent.RUN_COMMAND, "/party gui invite " + name); message.add(C.mBody + " to invite them"); message.sendToPlayer(player); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/FlyingPetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/FlyingPetManager.java index c736ea1f5..1779e723c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/FlyingPetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/FlyingPetManager.java @@ -12,7 +12,7 @@ public class FlyingPetManager { /** - * Makes the Fkying pets fly around the player + * Makes the Flying pets fly around the player * Copied from {@link mineplex.core.gadget.gadgets.particle.ParticleFairyData} */ diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java index 842779688..c88da63c7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java @@ -8,7 +8,6 @@ import java.util.Map.Entry; import java.util.UUID; import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.NavigationAbstract; import org.bukkit.Bukkit; @@ -19,7 +18,6 @@ import org.bukkit.SkullType; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPigZombie; import org.bukkit.entity.Ageable; import org.bukkit.entity.Blaze; @@ -53,8 +51,8 @@ import mineplex.core.account.event.ClientWebResponseEvent; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.Rank; import mineplex.core.common.shape.ShapeWings; -import mineplex.core.common.util.F; import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; @@ -70,7 +68,6 @@ import mineplex.core.disguise.disguises.DisguiseGuardian; import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.disguise.disguises.DisguiseZombie; import mineplex.core.donation.DonationManager; -import mineplex.core.events.AddConditionEvent; import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.pet.repository.PetRepository; @@ -104,13 +101,13 @@ public class PetManager extends MiniClientPlugin private ShapeWings _wingsEdge = new ShapeWings(ParticleType.RED_DUST.particleName, new org.bukkit.util.Vector(0.1,0.1,0.1), 1, 0, true, ShapeWings.DEFAULT_ROTATION, ShapeWings.SMALL_ANGEL_WING_PATTERN); public PetManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager - , InventoryManager inventoryManager, DisguiseManager disguiseManager, mineplex.core.creature.Creature creatureModule, BlockRestore restore, String webAddress) + , InventoryManager inventoryManager, DisguiseManager disguiseManager, mineplex.core.creature.Creature creatureModule, BlockRestore restore) { super("Pet Manager", plugin); _creatureModule = creatureModule; _disguiseManager = disguiseManager; - _repository = new PetRepository(plugin, webAddress); + _repository = new PetRepository(); _blockRestore = restore; _donationManager = donationManager; _clientManager = clientManager; @@ -221,7 +218,7 @@ public class PetManager extends MiniClientPlugin witherDisguise.setInvulTime(530); Creature silverfish = (Creature) _creatureModule.SpawnEntity(location, EntityType.SILVERFISH); - UtilEnt.Vegetate(silverfish, true); + UtilEnt.vegetate(silverfish, true); UtilEnt.silence(silverfish, true); silverfish.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0)); pet.setPassenger(silverfish); @@ -316,10 +313,6 @@ public class PetManager extends MiniClientPlugin } else if (pet instanceof Blaze) { - - AddConditionEvent event = new AddConditionEvent("Pet", pet, pet, AddConditionEvent.CoreConditionType.SILENCE, 0, -1, true, Material.SNOW_BALL, (byte) 0, false, false); - Bukkit.getPluginManager().callEvent(event); - DisguiseZombie disguiseZombie = new DisguiseZombie(pet); disguiseZombie.setBaby(true); disguiseZombie.setHelmet(new ItemStack(Material.SKULL_ITEM, 1, (short) SkullType.WITHER.ordinal())); @@ -335,6 +328,7 @@ public class PetManager extends MiniClientPlugin _disguiseManager.disguise(disguiseZombie); FlyingPetManager flyingPetManager = new FlyingPetManager(player, pet); _flyingPets.put(pet, flyingPetManager); + UtilEnt.silence(pet, true); } else if (petType.equals(PetType.GINGERBREAD_MAN)) { @@ -345,18 +339,13 @@ public class PetManager extends MiniClientPlugin zombie.getEquipment().setLeggings(ItemStackFactory.Instance.createColoredLeatherArmor(2, Color.fromRGB(203, 122, 56))); zombie.getEquipment().setBoots(ItemStackFactory.Instance.createColoredLeatherArmor(3, Color.fromRGB(203, 122, 56))); + UtilEnt.silence(zombie, true); + if (Get(player).getPets().get(entityType) != null && Get(player).getPets().get(entityType).length() > 0) { zombie.setCustomName(Get(player).getPets().get(entityType)); zombie.setCustomNameVisible(true); } - - // Makes it silent - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) zombie).getHandle(); - NBTTagCompound tag = new NBTTagCompound(); - nmsEntity.c(tag); - tag.setByte("Silent", (byte) 1); - nmsEntity.f(tag); } _activePetOwnerTypes.put(player.getName(), petType); @@ -369,7 +358,7 @@ public class PetManager extends MiniClientPlugin ((Ageable)pet).setAgeLock(true); } - UtilEnt.Vegetate(pet); + UtilEnt.vegetate(pet); } public Creature getPet(Player player) @@ -635,4 +624,9 @@ public class PetManager extends MiniClientPlugin return _activePetOwners.values(); } + public mineplex.core.creature.Creature getCreatureModule() + { + return _creatureModule; + } + } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/repository/PetRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/repository/PetRepository.java index 2454ff60a..c373aef52 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/repository/PetRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/repository/PetRepository.java @@ -1,46 +1,23 @@ package mineplex.core.pet.repository; -import java.util.List; - -import org.bukkit.plugin.java.JavaPlugin; - -import com.google.gson.reflect.TypeToken; - import mineplex.core.database.MinecraftRepository; import mineplex.core.pet.repository.token.PetChangeToken; -import mineplex.core.pet.repository.token.PetExtraToken; -import mineplex.core.server.remotecall.AsyncJsonWebCall; -import mineplex.core.server.remotecall.JsonWebCall; import mineplex.serverdata.database.DBPool; public class PetRepository extends MinecraftRepository { - private String _webAddress; - - public PetRepository(JavaPlugin plugin, String webAddress) + public PetRepository() { super(DBPool.getAccount()); - - _webAddress = webAddress; } public void AddPet(final PetChangeToken token) { - new AsyncJsonWebCall(_webAddress + "Pets/AddPet").Execute(token); - } - - public void RemovePet(final PetChangeToken token) - { - new AsyncJsonWebCall(_webAddress + "Pets/RemovePet").Execute(token); - } - - public List GetPetExtras(List petExtraTokens) - { - return new JsonWebCall(_webAddress + "Pets/GetPetExtras").Execute(new TypeToken>(){}.getType(), petExtraTokens); + handleAsyncMSSQLCall("Pets/AddPet", token); } public void UpdatePet(final PetChangeToken token) { - new AsyncJsonWebCall(_webAddress + "Pets/UpdatePet").Execute(token); + handleAsyncMSSQLCall("Pets/UpdatePet", token); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/poll/PollRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/poll/PollRepository.java index 850d006c9..b65345cf4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/poll/PollRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/poll/PollRepository.java @@ -10,6 +10,7 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; @@ -17,7 +18,7 @@ import mineplex.serverdata.database.column.ColumnVarChar; /** * Created by Shaun on 8/16/2014. */ -public class PollRepository extends MinecraftRepository +public class PollRepository extends RepositoryBase { private static String CREATE_POLL_TABLE = "CREATE TABLE IF NOT EXISTS polls (id INT NOT NULL AUTO_INCREMENT, enabled BIT(1), question VARCHAR(256) NOT NULL, answerA VARCHAR(256) NOT NULL, answerB VARCHAR(256), answerC VARCHAR(256), answerD VARCHAR(256), coinReward INT NOT NULL, displayType INT DEFAULT 0 NOT NULL, PRIMARY KEY (id));"; private static String CREATE_RELATION_TABLE = "CREATE TABLE IF NOT EXISTS accountPolls (id INT NOT NULL AUTO_INCREMENT, accountId INT NOT NULL, pollId INT NOT NULL, value TINYINT(1) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (accountId) REFERENCES accounts(id), FOREIGN KEY (pollId) REFERENCES polls(id), UNIQUE INDEX accountPollIndex (accountId, pollId));"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/GenericServer.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/GenericServer.java new file mode 100644 index 000000000..02cb2da42 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/GenericServer.java @@ -0,0 +1,28 @@ +package mineplex.core.portal; + +/** + * Groups of servers with no specific id + */ +public enum GenericServer +{ + /** + * The Hubs, such as Lobby-1 + */ + HUB("Lobby"), + /** + * The Clans Hubs, such as ClansHub-1 + */ + CLANS_HUB("ClansHub"); + + private final String _name; + + GenericServer(String name) + { + this._name = name; + } + + public String getName() + { + return _name; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Intent.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Intent.java new file mode 100644 index 000000000..5bf35f346 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Intent.java @@ -0,0 +1,20 @@ +package mineplex.core.portal; + +/** + * The intention for transferring a player. Different intents will cause different behaviours to occur + */ +public enum Intent +{ + /** + * Requested by a player (i.e. /server) + */ + PLAYER_REQUEST, + /** + * Forcibly kicked by the server (i.e. MPS kick) + */ + KICK, + /** + * A transfer was initiated from a remote server (i.e. /send) + */ + FORCE_TRANSFER +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java index c02952384..47300a0e7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java @@ -1,6 +1,20 @@ package mineplex.core.portal; -import com.google.common.collect.Lists; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; @@ -8,189 +22,140 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.Callback; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTabTitle; -import mineplex.core.party.Party; -import mineplex.core.party.event.PartySendToServerEvent; -import mineplex.core.portal.Commands.SendCommand; -import mineplex.core.portal.Commands.ServerCommand; +import mineplex.core.portal.commands.SendCommand; +import mineplex.core.portal.commands.ServerCommand; +import mineplex.core.portal.events.GenericServerTransferEvent; +import mineplex.core.portal.events.ServerTransferEvent; import mineplex.serverdata.Region; import mineplex.serverdata.commands.ServerCommandManager; -import mineplex.serverdata.commands.ServerTransfer; import mineplex.serverdata.commands.TransferCommand; +import mineplex.serverdata.commands.TransferUUIDCommand; import mineplex.serverdata.data.MinecraftServer; import mineplex.serverdata.servers.ServerManager; import mineplex.serverdata.servers.ServerRepository; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Random; public class Portal extends MiniPlugin { // The singleton instance of Portal private static Portal instance; - public static Portal getInstance() { return instance; } - - private ServerRepository _repository; - private CoreClientManager _clientManager; - private HashSet _connectingPlayers = new HashSet(); - - private Region _region; - private String _serverName; - - public Portal(JavaPlugin plugin, CoreClientManager clientManager, String serverName) + + public static Portal getInstance() { - super("Portal", plugin); + return instance; + } + + private final CoreClientManager _clientManager = require(CoreClientManager.class); + + private final ServerRepository _repository; + private final Set _connectingPlayers = Collections.synchronizedSet(new HashSet<>()); + + public Portal() + { + super("Portal"); instance = this; - _clientManager = clientManager; - _region = plugin.getConfig().getBoolean("serverstatus.us") ? Region.US : Region.EU; - _serverName = serverName; - _repository = ServerManager.getServerRepository(_region); - + _repository = ServerManager.getServerRepository(getPlugin().getConfig().getBoolean("serverstatus.us") ? Region.US : Region.EU); + Bukkit.getMessenger().registerOutgoingPluginChannel(getPlugin(), "BungeeCord"); - - // Register the server command type for future use - ServerCommandManager.getInstance().registerCommandType("TransferCommand", TransferCommand.class, new TransferHandler()); + + ServerCommandManager.getInstance().registerCommandType(TransferCommand.class, command -> + { + Player player = Bukkit.getPlayerExact(command.getPlayerName()); + + if (player != null && player.isOnline()) + { + sendPlayerToServer(player, command.getTargetServer(), Intent.FORCE_TRANSFER); + } + }); + ServerCommandManager.getInstance().registerCommandType(TransferUUIDCommand.class, command -> + { + Player player = Bukkit.getPlayer(command.getPlayerUUID()); + + if (player != null && player.isOnline()) + { + sendPlayerToServer(player, command.getTargetServer(), Intent.FORCE_TRANSFER); + } + }); } - @EventHandler - public void join(PlayerJoinEvent event) + public void sendAllPlayersToGenericServer(GenericServer hub, Intent kick) { - Player player = event.getPlayer(); - //Player List - String serverName = _plugin.getConfig().getString("serverstatus.name"); - UtilTabTitle.setHeaderAndFooter(player, C.Bold + "Mineplex Network " + C.cGreen + serverName, "Visit " + C.cGreen + "www.mineplex.com" + ChatColor.RESET + " for News, Forums and Shop"); } - - public void sendAllPlayers(String serverName) - { - for (Player player : Bukkit.getOnlinePlayers()) - { - sendPlayerToServer(player, serverName); - } - } - - public void sendPlayerToServer(Player player, String serverName) - { - sendPlayerToServer(player, serverName, false); - } - - public void sendPlayerToServer(final Player player, final String serverName, boolean draggedByParty) + + public void sendPlayerToGenericServer(Player player, GenericServer genericServer, Intent intent) { if (_connectingPlayers.contains(player.getName())) return; - ServerTransferEvent event = new ServerTransferEvent(player, serverName, draggedByParty); - Bukkit.getPluginManager().callEvent(event); + GenericServerTransferEvent event = new GenericServerTransferEvent(player, genericServer, intent); + UtilServer.CallEvent(event); - final boolean override = serverName.equalsIgnoreCase("Lobby") || serverName.equalsIgnoreCase("ClansHub"); - final Rank playerRank = _clientManager.Get(player).GetRank(); - - if (event.getParty() != null && override) - { - Party party = event.getParty(); - if(!party.getOwner().equalsIgnoreCase(player.getName())) - { - return; - } - sendParty(party); - return; - } - - if (event.getParty() != null && serverName.toUpperCase().startsWith("CLANS-")) - { - event.getParty().sendMessage(F.main(getName(), "You cannot join Clans while in a party!")); - return; - } - - if (override) - { - sendPlayer(player, serverName); - return; - } - - if (event.isCancel()) + if (event.isCancelled()) { return; } - runAsync(() -> { + sendPlayer(player, genericServer.getName()); + } + + public void sendPlayerToServer(Player player, String serverName, Intent intent) + { + if (_connectingPlayers.contains(player.getName())) + return; + + ServerTransferEvent event = new ServerTransferEvent(player, serverName, intent); + UtilServer.CallEvent(event); + + if (event.isCancelled()) + { + return; + } + + Rank playerRank = _clientManager.Get(player).GetRank(); + + runAsync(() -> + { final MinecraftServer server = _repository.getServerStatus(serverName); if (server == null) return; - Bukkit.getServer().getScheduler().runTask(_plugin, () -> { + runSync(() -> + { if (server.getPlayerCount() < server.getMaxPlayerCount() || playerRank.has(Rank.ULTRA)) { sendPlayer(player, serverName); } else + { UtilPlayer.message(player, F.main(getName(), C.cGold + serverName + C.cRed + " is full!")); + } }); }); } - private void sendParty(Party party) - { - ServerRepository repository = ServerManager.getServerRepository(_region); - MinecraftServer best = null; - List serverList = Lists.newArrayList(repository.getServersByGroup("Lobby")); - int lowest = Integer.MAX_VALUE; - for (MinecraftServer server : serverList) - { - int playercount = server.getPlayerCount(); - if (playercount < 20) - { - continue; - } - if (playercount < lowest) - { - lowest = playercount; - if (best == null) - { - best = server; - } - } - } - if (best == null) - { - //Well, fuck. - best = serverList.get(new Random().nextInt(serverList.size())); - } - - PartySendToServerEvent serverEvent = new PartySendToServerEvent(party, best); - getPluginManager().callEvent(serverEvent); - } - public static void transferPlayer(String playerName, String serverName) - { - ServerTransfer serverTransfer = new ServerTransfer(playerName, serverName); - TransferCommand transferCommand = new TransferCommand(serverTransfer); - transferCommand.publish(); + { + new TransferCommand(playerName, serverName).publish(); } - + + public static void transferPlayer(UUID playerUUID, String serverName) + { + new TransferUUIDCommand(playerUUID, serverName).publish(); + } + public void doesServerExist(final String serverName, final Callback callback) { if (callback == null) return; - - Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { - final boolean serverExists = ServerManager.getServerRepository(_region).serverExists(serverName); - Bukkit.getScheduler().runTask(getPlugin(), () -> callback.run(serverExists)); + runAsync(() -> + { + boolean result = _repository.serverExists(serverName); + runSync(() -> callback.run(result)); }); } @@ -200,7 +165,7 @@ public class Portal extends MiniPlugin addCommand(new SendCommand(this)); } - public void sendToHub(Player player, String message) + public void sendToHub(Player player, String message, Intent intent) { if (message != null) { @@ -210,42 +175,50 @@ public class Portal extends MiniPlugin } player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - sendPlayerToServer(player, "Lobby"); + sendPlayerToGenericServer(player, GenericServer.HUB, intent); } - + + /** + * Directly sends a player to the provided server name, bypassing all validation + * + * @param player The player to send + * @param serverName The destination server + */ public void sendPlayer(final Player player, String serverName) { ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); - - try + + try { - out.writeUTF("Connect"); - out.writeUTF(serverName); + out.writeUTF("Connect"); + out.writeUTF(serverName); } - catch (IOException e) + catch (IOException ignored) { - // Can never happen } - finally - { - try - { - out.close(); - } - catch (IOException e) - { - e.printStackTrace(); - } - } - + player.sendPluginMessage(getPlugin(), "BungeeCord", b.toByteArray()); _connectingPlayers.add(player.getName()); - + getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> _connectingPlayers.remove(player.getName()), 20L); - - UtilPlayer.message(player, F.main(getName(), "You have been sent from " + C.cGold + _serverName + C.cGray + " to " + C.cGold + serverName)); + + UtilPlayer.message(player, F.main(getName(), "You have been sent from " + C.cGold + UtilServer.getServerName() + C.cGray + " to " + C.cGold + serverName)); } + @EventHandler + private void setTabHeaderAndFooterOnJoin(PlayerJoinEvent event) + { + UtilTabTitle.setHeaderAndFooter( + event.getPlayer(), + C.Bold + "Mineplex Network " + C.cGreen + UtilServer.getServerName(), + "Visit " + C.cGreen + "www.mineplex.com" + ChatColor.RESET + " for News, Forums and Shop" + ); + } + + public ServerRepository getRepository() + { + return _repository; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java deleted file mode 100644 index 8a19c65c0..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java +++ /dev/null @@ -1,74 +0,0 @@ -package mineplex.core.portal; - -import mineplex.core.party.Party; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class ServerTransferEvent extends Event -{ - - private static final HandlerList _handlers = new HandlerList(); - private Player _player; - private String _server; - private Party _party; - private boolean _draggedByParty; - private boolean _cancel; - - public ServerTransferEvent(Player player, String server, boolean draggedByParty) - { - _player = player; - _server = server; - _draggedByParty = draggedByParty; - } - - public boolean isDraggedByParty() - { - return _draggedByParty; - } - - public void setDraggedByParty(boolean draggedByParty) - { - _draggedByParty = draggedByParty; - } - - public HandlerList getHandlers() - { - return _handlers; - } - - public static HandlerList getHandlerList() - { - return _handlers; - } - - public Player getPlayer() - { - return _player; - } - - public String getServer() - { - return _server; - } - - public boolean isCancel() - { - return _cancel; - } - - public void setCancel(boolean cancel) - { - _cancel = cancel; - } - - public Party getParty() - { - return _party; - } - - public void setParty(Party party) - { - _party = party; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/TransferHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/TransferHandler.java deleted file mode 100644 index 991d1e677..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/portal/TransferHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package mineplex.core.portal; - -import mineplex.serverdata.commands.CommandCallback; -import mineplex.serverdata.commands.ServerCommand; -import mineplex.serverdata.commands.ServerTransfer; -import mineplex.serverdata.commands.TransferCommand; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -public class TransferHandler implements CommandCallback -{ - public void run(ServerCommand command) - { - if (command instanceof TransferCommand) - { - TransferCommand transferCommand = (TransferCommand) command; - ServerTransfer transfer = transferCommand.getTransfer(); - - Player player = Bukkit.getPlayerExact(transfer.getPlayerName()); - - if (player != null && player.isOnline()) - { - Portal.getInstance().sendPlayerToServer(player, transfer.getServerName()); - } - } - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/events/GenericServerTransferEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/events/GenericServerTransferEvent.java new file mode 100644 index 000000000..b0b130e38 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/events/GenericServerTransferEvent.java @@ -0,0 +1,65 @@ +package mineplex.core.portal.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; + +public class GenericServerTransferEvent extends Event implements Cancellable +{ + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Player _player; + private GenericServer _server; + private boolean _cancel = false; + + private Intent _intent; + + public GenericServerTransferEvent(Player player, GenericServer server, Intent intent) + { + _player = player; + _server = server; + _intent = intent; + } + + public Player getPlayer() + { + return _player; + } + + public GenericServer getServer() + { + return _server; + } + + public Intent getIntent() + { + return _intent; + } + + @Override + public boolean isCancelled() + { + return this._cancel; + } + + @Override + public void setCancelled(boolean b) + { + this._cancel = b; + } + + public HandlerList getHandlers() + { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() + { + return HANDLER_LIST; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/events/ServerTransferEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/events/ServerTransferEvent.java new file mode 100644 index 000000000..cdc3d41e0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/events/ServerTransferEvent.java @@ -0,0 +1,64 @@ +package mineplex.core.portal.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import mineplex.core.portal.Intent; + +public class ServerTransferEvent extends Event implements Cancellable +{ + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Player _player; + private String _server; + private boolean _cancel = false; + + private Intent _intent; + + public ServerTransferEvent(Player player, String server, Intent intent) + { + _player = player; + _server = server; + _intent = intent; + } + + public Player getPlayer() + { + return _player; + } + + public String getServer() + { + return _server; + } + + public Intent getIntent() + { + return _intent; + } + + @Override + public boolean isCancelled() + { + return this._cancel; + } + + @Override + public void setCancelled(boolean b) + { + this._cancel = b; + } + + public HandlerList getHandlers() + { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() + { + return HANDLER_LIST; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/Preference.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/Preference.java index aef708f46..fbeb15eb2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/Preference.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/Preference.java @@ -24,7 +24,9 @@ public enum Preference SHOW_PLAYERS(true, PreferenceCategory.USER, Material.EYE_OF_ENDER, "Hub Player Visibility"), SHOW_CHAT(true, PreferenceCategory.USER, Material.PAPER, "Player Chat"), PRIVATE_MESSAGING(true, PreferenceCategory.USER, Material.MAP, "Private Messaging"), - PARTY_REQUESTS(true, PreferenceCategory.USER, Material.SKULL_ITEM, "Party Requests"), + + // TIM WHY DID YOU MAKE THE ID ORDINAL YOU DHAJDHJGHADJHGFAJHFSJDHAJDHSJHJA + PARTY_REQUESTS(true, PreferenceCategory.SOCIAL, Material.SKULL_ITEM, "Party Requests"), INVISIBILITY(false, PreferenceCategory.EXCLUSIVE, Material.NETHER_STAR, "Hub Invisibility & Flight"), FORCE_FIELD(false, PreferenceCategory.EXCLUSIVE, Material.SLIME_BALL, "Hub Forcefield"), @@ -41,8 +43,10 @@ public enum Preference AUTO_JOIN_NEXT_GAME(true, PreferenceCategory.GAME_PLAY, Material.DIAMOND_SWORD, "Auto Join Next Game", "Feel like playing again?", "Enable this, and when you're out", "a 15 second timer will start", "when it ends, it'll send you", "to another game!"), DISABLE_WARNING(true, PreferenceCategory.GAME_PLAY, Material.BARRIER, "Disable Automatic Warning", "Know what you're doing?", "Disable this to not receive", "a message warning you about Auto-Join"), COUNTDOWN_ON_CLICK(false, PreferenceCategory.GAME_PLAY, Material.WATCH, "Countdown to Join", "See that fancy text when you're out?", "If you click it, and this is enabled", "a 15 second time will countdown", "until you are sent to a new game"), - + COMMUNITY_INVITES(true, PreferenceCategory.SOCIAL, Material.BOOK, "Show Community Invites"), + + PARTY_DISPLAY_INVENTORY_UI(true, PreferenceCategory.SOCIAL, Material.CHEST, "Display Parties GUI") ; private static final Map PREFERENCE_MAP = Maps.newHashMap(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java index c3f280d65..a1b7c422e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java @@ -3,13 +3,14 @@ package mineplex.core.preferences; import mineplex.core.database.MinecraftRepository; import mineplex.core.progression.util.SQLStatement; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; -public class PreferencesRepository extends MinecraftRepository +public class PreferencesRepository extends RepositoryBase { private static String UPSERT_ACCOUNT = "INSERT INTO `preferences` VALUES(?, ?, ?) ON DUPLICATE KEY UPDATE `value`= ?"; @@ -91,7 +92,7 @@ public class PreferencesRepository extends MinecraftRepository public void async(Runnable runnable) { - getPlugin().getServer().getScheduler().runTaskAsynchronously(getPlugin(), runnable); + _manager.runAsync(runnable); } /** diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/KitProgressionRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/KitProgressionRepository.java index 6eb391bfb..8683a5cfa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/KitProgressionRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/KitProgressionRepository.java @@ -1,9 +1,12 @@ package mineplex.core.progression; +import mineplex.core.common.util.UtilServer; import mineplex.core.database.MinecraftRepository; import mineplex.core.progression.data.PlayerKit; import mineplex.core.progression.util.SQLStatement; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; + import org.bukkit.Bukkit; import java.sql.Connection; @@ -15,7 +18,7 @@ import java.util.UUID; /** * Handles all things database related. */ -public class KitProgressionRepository extends MinecraftRepository +public class KitProgressionRepository extends RepositoryBase { private final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS `kitProgression` (" + @@ -72,7 +75,7 @@ public class KitProgressionRepository extends MinecraftRepository if (effect == -1) { //Something went wrong uh oh - this.getPlugin().getLogger().severe("Inserting new Kit Data for " + playerKit.getUuid() + " failed!"); + _kitProgressionManager.getPlugin().getLogger().severe("Inserting new Kit Data for " + playerKit.getUuid() + " failed!"); } } catch (SQLException e) { @@ -117,7 +120,7 @@ public class KitProgressionRepository extends MinecraftRepository int effect = executeUpdate(statement); if (effect == -1) { - this.getPlugin().getLogger().severe("Updating default value for" + playerKit.getUuid().toString() + "'s kit failed!"); + _kitProgressionManager.getPlugin().getLogger().severe("Updating default value for" + playerKit.getUuid().toString() + "'s kit failed!"); } } catch (SQLException e) { @@ -236,7 +239,7 @@ public class KitProgressionRepository extends MinecraftRepository private void async(Runnable runnable) { - Bukkit.getScheduler().runTaskAsynchronously(_plugin, runnable); + UtilServer.runAsync(runnable); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/punish/Punish.java b/Plugins/Mineplex.Core/src/mineplex/core/punish/Punish.java index 560cd293d..f72bd4747 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/punish/Punish.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/punish/Punish.java @@ -46,13 +46,13 @@ public class Punish extends MiniPlugin private PunishRepository _repository; private CoreClientManager _clientManager; - public Punish(JavaPlugin plugin, String webServerAddress, CoreClientManager clientManager) + public Punish(JavaPlugin plugin, CoreClientManager clientManager) { super("Punish", plugin); _punishClients = new HashMap(); _clientManager = clientManager; - _repository = new PunishRepository(webServerAddress); + _repository = new PunishRepository(); ServerCommandManager.getInstance().registerCommandType("PunishCommand", mineplex.serverdata.commands.PunishCommand.class, new PunishmentHandler(this)); } @@ -416,11 +416,6 @@ public class Punish extends MiniPlugin }, punishmentId, target, reason, client.getName()); } - public void RemoveBan(String name, String reason) - { - _repository.RemoveBan(name, reason); - } - public CoreClientManager GetClients() { return _clientManager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/punish/PunishRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/punish/PunishRepository.java index 3ed3d380d..01fe48342 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/punish/PunishRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/punish/PunishRepository.java @@ -3,25 +3,24 @@ package mineplex.core.punish; import java.util.List; import com.google.gson.reflect.TypeToken; + import mineplex.core.common.util.Callback; +import mineplex.core.database.MinecraftRepository; import mineplex.core.punish.Tokens.PunishClientToken; import mineplex.core.punish.Tokens.PunishToken; import mineplex.core.punish.Tokens.RemovePunishToken; -import mineplex.core.server.remotecall.AsyncJsonWebCall; -import mineplex.core.server.remotecall.JsonWebCall; +import mineplex.serverdata.database.DBPool; -public class PunishRepository +public class PunishRepository extends MinecraftRepository { - private String _webAddress; - - public PunishRepository(String webServerAddress) + public PunishRepository() { - _webAddress = webServerAddress; + super(DBPool.getAccount()); } - + public void Punish(Callback callback, String target, String category, PunishmentSentence punishment, String reason, double duration, String admin, int severity) { - PunishToken token = new PunishToken(); + PunishToken token = new PunishToken(); token.Target = target; token.Category = category; token.Sentence = punishment.toString(); @@ -30,7 +29,7 @@ public class PunishRepository token.Admin = admin; token.Severity = severity; - new AsyncJsonWebCall(_webAddress + "PlayerAccount/Punish").Execute(String.class, callback, token); + handleMSSQLCall("PlayerAccount/Punish", token, String.class, callback::run); } public void RemovePunishment(Callback callback, int id, String target, String reason, String admin) @@ -41,34 +40,16 @@ public class PunishRepository token.Reason = reason; token.Admin = admin; - new AsyncJsonWebCall(_webAddress + "PlayerAccount/RemovePunishment").Execute(String.class, callback, token); + handleMSSQLCall("PlayerAccount/RemovePunishment", token, String.class, callback::run); } - - public void LoadPunishClient(String target, Callback callback) + + public void LoadPunishClient(String target, Callback callback) { - new AsyncJsonWebCall(_webAddress + "PlayerAccount/GetPunishClient").Execute(PunishClientToken.class, callback, target); + handleMSSQLCall("PlayerAccount/GetPunishClient", target, PunishClientToken.class, callback::run); } - + public void MatchPlayerName(final Callback> callback, final String userName) { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - List tokenList = new JsonWebCall(_webAddress + "PlayerAccount/GetMatches").Execute(new TypeToken>(){}.getType(), userName); - callback.run(tokenList); - } - }); - - asyncThread.start(); - } - - public void RemoveBan(String name, String reason) - { - RemovePunishToken token = new RemovePunishToken(); - token.Target = name; - token.Reason = reason; - - new JsonWebCall(_webAddress + "PlayerAccount/RemoveBan").Execute(String.class, token); + handleMSSQLCall("PlayerAccount/GetMatches", userName, new TypeToken>(){}.getType(), callback::run); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/eternal/EternalGiveawayRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/eternal/EternalGiveawayRepository.java index ab8ce45f3..867d5d5c6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/eternal/EternalGiveawayRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/eternal/EternalGiveawayRepository.java @@ -9,10 +9,11 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.Region; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class EternalGiveawayRepository extends MinecraftRepository +public class EternalGiveawayRepository extends RepositoryBase { private static final String ADD_ETERNAL = "INSERT INTO eternalGiveaway (accountId, region, serverName) VALUES (?, ?, ?)"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/titangiveaway/TitanGiveawayRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/titangiveaway/TitanGiveawayRepository.java index e50c6be44..bc8201eae 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/titangiveaway/TitanGiveawayRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/rankGiveaway/titangiveaway/TitanGiveawayRepository.java @@ -8,11 +8,12 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; import mineplex.serverdata.Region; -public class TitanGiveawayRepository extends MinecraftRepository +public class TitanGiveawayRepository extends RepositoryBase { private static final String ADD_TITAN = "INSERT INTO titanGiveaway (accountId, region, serverName) VALUES (?, ?, ?)"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResourcePackManager.java b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResourcePackManager.java index 2ba415206..8afb55087 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResourcePackManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/resourcepack/ResourcePackManager.java @@ -24,6 +24,8 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.resourcepack.redis.RedisUnloadResPack; import mineplex.core.updater.event.UpdateEvent; @@ -187,7 +189,7 @@ public class ResourcePackManager extends MiniPlugin implements CommandCallback private void returnHubNoResPack(Player player) { player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - _portal.sendPlayerToServer(player, "Lobby"); + _portal.sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } private void returnHubNoResPack(Player player, String message) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java index 0157d87df..dcf425ea8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java @@ -308,6 +308,20 @@ public class RewardManager addHat(Type.OMEGA, HatType.PRESENT, rarity, 5); addHat(Type.OMEGA, HatType.SNOWMAN, rarity, 5); + /*addBalloon(Type.OMEGA,BalloonType.BABY_COW, rarity, 10, 100); + addBalloon(Type.OMEGA, BalloonType.BABY_PIG, rarity, 10, 100); + addBalloon(Type.OMEGA, BalloonType.BABY_SHEEP, rarity, 15, 100);*/ + + // Minestrike Skins + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.P2000_Fire_Elemental, rarity, 100, 500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.M4A4_Howl, rarity, 100, 500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Steyr_AUG_Torque, rarity, 100, 500); + + // Balloons + /*addBalloon(Type.NORMAL, BalloonType.BABY_COW, rarity, 10, 100); + addBalloon(Type.NORMAL, BalloonType.BABY_PIG, rarity, 10, 100); + addBalloon(Type.NORMAL, BalloonType.BABY_SHEEP, rarity, 15, 100);*/ + // INFUSED CHESTS addHat(Type.INFUSED_CHESTS, HatType.PRESENT, rarity, 40, 100); addHat(Type.INFUSED_CHESTS, HatType.SNOWMAN, rarity, 38, 100); @@ -375,7 +389,7 @@ public class RewardManager addGadget(Type.NORMAL, getGadget(ParticlePartyTime.class), rarity, 12); //Game Modifiers MineStrike - addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AWP_Asiimov, rarity, 200); + /*addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AWP_Asiimov, rarity, 200); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.P90_Asiimov, rarity, 200); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.SSG_08_Blood_in_the_Water, rarity, 50); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.Galil_AR_Eco, rarity, 20); @@ -386,7 +400,17 @@ public class RewardManager addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.PP_Bizon_Streak, rarity, 40); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.CZ75_Auto_Tigris, rarity, 100); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.Steyr_AUG_Torque, rarity, 30); - addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.XM1014_Tranquility, rarity, 30); + addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.XM1014_Tranquility, rarity, 30);*/ + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.SSG_08_Blood_in_the_Water, rarity, 150, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Galil_AR_Eco, rarity, 150, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Nova_Koi, rarity, 100, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Knife_M9_Bayonette_Fade, rarity, 30, 2500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.PP_Bizon_Streak, rarity, 150, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.CZ75_Auto_Tigris, rarity, 100, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.XM1014_Tranquility, rarity, 100, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Desert_Eagle_Golden_Gun, rarity, 30, 2500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.P90_Asiimov, rarity, 100, 1000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.SG553_Pulse, rarity, 100, 1000); // VALENTINES @@ -472,6 +496,23 @@ public class RewardManager addGadget(Type.OMEGA, getGadget(ParticleCandyCane.class), rarity, 25); + /*addBalloon(Type.OMEGA, BalloonType.BABY_ZOMBIE, rarity, 25, 500); + addBalloon(Type.OMEGA, BalloonType.BABY_MUSHROOM, rarity, 50, 500); + addBalloon(Type.OMEGA, BalloonType.BABY_OCELOT, rarity, 50, 500); + addBalloon(Type.OMEGA, BalloonType.BABY_WOLF, rarity, 75, 500); + addBalloon(Type.OMEGA, BalloonType.BABY_VILLAGER, rarity, 25, 500); + addBalloon(Type.OMEGA, BalloonType.BABY_SLIME, rarity, 25, 500); + addBalloon(Type.OMEGA, BalloonType.BAT, rarity, 50, 500);*/ + + // Balloons + /*addBalloon(Type.NORMAL, BalloonType.BABY_ZOMBIE, rarity, 25, 500); + addBalloon(Type.NORMAL, BalloonType.BABY_MUSHROOM, rarity, 50, 500); + addBalloon(Type.NORMAL, BalloonType.BABY_OCELOT, rarity, 50, 500); + addBalloon(Type.NORMAL, BalloonType.BABY_WOLF, rarity, 75, 500); + addBalloon(Type.NORMAL, BalloonType.BABY_VILLAGER, rarity, 25, 500); + addBalloon(Type.NORMAL, BalloonType.BABY_SLIME, rarity, 25, 500); + addBalloon(Type.NORMAL, BalloonType.BAT, rarity, 50, 500);*/ + // HAUNTED CHEST addGadget(Type.HAUNTED, getGadget(DoubleJumpHalloween.class), rarity, 10); addHat(Type.HAUNTED, HatType.PUMPKIN, rarity, 10); @@ -551,7 +592,7 @@ public class RewardManager addGadget(Type.NORMAL, getGadget(WinEffectRiseOfTheElderGuardian.class), rarity, 4); //GameModifier MineStrike - addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AWP_Asiimov, rarity, 8); + /*addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AWP_Asiimov, rarity, 8); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.P90_Asiimov, rarity, 8); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.Desert_Eagle_Blaze, rarity, 10); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.Glock_18_Fade, rarity, 20); @@ -560,7 +601,18 @@ public class RewardManager addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.P250_Muertos, rarity, 20); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.FAMAS_Pulse, rarity, 33); addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.SG553_Pulse, rarity, 33); - addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AK_47_Vulcan, rarity, 5); + addMineStrikeSkin(Type.NORMAL, MineStrikeSkin.AK_47_Vulcan, rarity, 5);*/ + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Desert_Eagle_Blaze, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Glock_18_Fade, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.P250_Muertos, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.AK_47_Vulcan, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Knife_Counter_Terrorist_Sword, rarity, 50, 6500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Knife_Terrorist_Sword, rarity, 50, 6500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.Knife_M9_Bayonette_Glass, rarity, 50, 6500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.AK_47_Guardian, rarity, 10, 7500); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.AWP_Asiimov, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.FAMAS_Pulse, rarity, 100, 5000); + addMineStrikeSkin(Type.MINESTRIKE, MineStrikeSkin.XM1014_Pig_Gun, rarity, 10, 7500); //WINTER @@ -650,6 +702,25 @@ public class RewardManager addHat(Type.OMEGA, HatType.GRINCH, rarity, 25); + /*addBalloon(Type.OMEGA, BalloonType.SQUID, rarity, 10, 5000); + addBalloon(Type.OMEGA, BalloonType.SILVERFISH, rarity, 30, 5000); + addBalloon(Type.OMEGA, BalloonType.GUARDIAN, rarity, 30, 5000); + addBalloon(Type.OMEGA, BalloonType.DRAGON_EGG, rarity, 10, 5000); + addBalloon(Type.OMEGA, BalloonType.DIAMOND_BLOCK, rarity, 10, 5000); + addBalloon(Type.OMEGA, BalloonType.IRON_BLOCK, rarity, 20, 5000); + addBalloon(Type.OMEGA, BalloonType.GOLD_BLOCK, rarity, 30, 5000); + addBalloon(Type.OMEGA, BalloonType.EMERALD_BLOCK, rarity, 15, 5000);*/ + + // Balloon + /*addBalloon(Type.NORMAL, BalloonType.SQUID, rarity, 10, 5000); + addBalloon(Type.NORMAL, BalloonType.SILVERFISH, rarity, 30, 5000); + addBalloon(Type.NORMAL, BalloonType.GUARDIAN, rarity, 30, 5000); + addBalloon(Type.NORMAL, BalloonType.DRAGON_EGG, rarity, 10, 5000); + addBalloon(Type.NORMAL, BalloonType.DIAMOND_BLOCK, rarity, 10, 5000); + addBalloon(Type.NORMAL, BalloonType.IRON_BLOCK, rarity, 20, 5000); + addBalloon(Type.NORMAL, BalloonType.GOLD_BLOCK, rarity, 30, 5000); + addBalloon(Type.NORMAL, BalloonType.EMERALD_BLOCK, rarity, 15, 5000);*/ + // HAUNTED addPetReward(Type.HAUNTED, PetType.RABBIT, rarity, 100); addGadget(Type.HAUNTED, getGadget(MorphGrimReaper.class), rarity, 25); @@ -782,6 +853,17 @@ public class RewardManager Gadget gadget = _gadgetManager.getHatGadget(hatType); return addGadget(type, gadget, gadget.getDisplayName(), rarity, weight, shards); } + + /*public UnknownPackageReward addBalloon(Type type, BalloonType balloonType, RewardRarity rarity, int weight) + { + return addBalloon(type, balloonType, rarity, weight, getShards(rarity)); + } + + public UnknownPackageReward addBalloon(Type type, BalloonType balloonType, RewardRarity rarity, int weight, int shards) + { + Gadget gadget = _gadgetManager.getBalloonGadget(balloonType); + return addGadget(type, gadget, gadget.getDisplayName(), rarity, weight, shards); + }*/ public InventoryReward addInventoryReward(RewardPool.Type type, ItemGadget gadget, RewardRarity rarity, int weight) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java index 61306a0b7..0b046295e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java @@ -63,7 +63,7 @@ public class RewardPool MYTHICAL(true), THANKFUL(false), GINGERBREAD(false, 1), - MINESTRIKE(false, 1), + MINESTRIKE(true, 2), CARL_SPINNER(true); private boolean _useDuplicates; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java index 339fc0bf5..4e3cdf4f4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java @@ -2,6 +2,10 @@ package mineplex.core.reward.rewards; import java.util.Random; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; import mineplex.core.reward.RankRewardData; @@ -10,10 +14,6 @@ import mineplex.core.reward.RewardData; import mineplex.core.reward.RewardRarity; import mineplex.core.reward.RewardType; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - public class RankReward extends Reward { private Random _random; @@ -35,9 +35,10 @@ public class RankReward extends Reward else if (_clientManager.Get(player).GetRank() == Rank.ULTRA) rank = Rank.HERO; else if (_clientManager.Get(player).GetRank() == Rank.HERO) rank = Rank.LEGEND; else if ((rewardType == RewardType.MYTHICAL_CHEST || rewardType == RewardType.TRICK_OR_TREAT_CHEST || rewardType == RewardType.THANKFUL_CHEST) && _clientManager.Get(player).GetRank() == Rank.LEGEND) rank = Rank.TITAN; + else if ((rewardType == RewardType.MYTHICAL_CHEST || rewardType == RewardType.TRICK_OR_TREAT_CHEST || rewardType == RewardType.THANKFUL_CHEST) && _clientManager.Get(player).GetRank() == Rank.TITAN) rank = Rank.ETERNAL; if (rewardType == RewardType.MYTHICAL_CHEST && _random.nextDouble() < 0.01) // 1 Percent - rank = Rank.TITAN; + rank = Rank.ETERNAL; if (rank == null) return new RewardData(null, getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); @@ -55,6 +56,7 @@ public class RankReward extends Reward if (_clientManager.Get(player).GetRank() == Rank.ALL) rank = Rank.ULTRA; else if (_clientManager.Get(player).GetRank() == Rank.ULTRA) rank = Rank.HERO; else if (_clientManager.Get(player).GetRank() == Rank.HERO) rank = Rank.LEGEND; + else if (_clientManager.Get(player).GetRank() == Rank.LEGEND) rank = Rank.TITAN; if (rank == null) return new RewardData(null, getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/server/remotecall/AsyncJsonWebCall.java b/Plugins/Mineplex.Core/src/mineplex/core/server/remotecall/AsyncJsonWebCall.java deleted file mode 100644 index 3c2676c69..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/server/remotecall/AsyncJsonWebCall.java +++ /dev/null @@ -1,63 +0,0 @@ -package mineplex.core.server.remotecall; - -import mineplex.core.common.util.Callback; - -public class AsyncJsonWebCall extends JsonWebCall -{ - public AsyncJsonWebCall(String url) - { - super(url); - } - - public void Execute() - { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - AsyncJsonWebCall.super.Execute(); - } - }); - - asyncThread.start(); - } - - public void Execute(final Object argument) - { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - AsyncJsonWebCall.super.Execute(argument); - } - }); - - asyncThread.start(); - } - - public void Execute(final Class callbackClass, final Callback callback) - { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - AsyncJsonWebCall.super.Execute(callbackClass, callback); - } - }); - - asyncThread.start(); - } - - public void Execute(final Class callbackClass, final Callback callback, final Object argument) - { - Thread asyncThread = new Thread(new Runnable() - { - public void run() - { - AsyncJsonWebCall.super.Execute(callbackClass, callback, argument); - } - }); - - asyncThread.start(); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/shop/ShopBase.java b/Plugins/Mineplex.Core/src/mineplex/core/shop/ShopBase.java index e9d26ad8e..6ee09a020 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/shop/ShopBase.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/shop/ShopBase.java @@ -1,13 +1,15 @@ package mineplex.core.shop; -import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.NautHashMap; import mineplex.core.donation.DonationManager; +import mineplex.core.lifetimes.Lifetimed; +import mineplex.core.lifetimes.ListenerComponent; import mineplex.core.npc.event.NpcDamageByEntityEvent; import mineplex.core.npc.event.NpcInteractEntityEvent; import mineplex.core.shop.page.ShopPageBase; import net.minecraft.server.v1_8_R3.EntityPlayer; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory; @@ -16,7 +18,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryDragEvent; @@ -29,7 +30,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; -public abstract class ShopBase implements Listener +public abstract class ShopBase extends ListenerComponent { private NautHashMap _errorThrottling; private NautHashMap _purchaseBlock; @@ -52,7 +53,7 @@ public abstract class ShopBase implements Listene _errorThrottling = new NautHashMap(); _purchaseBlock = new NautHashMap(); - _plugin.registerEvents(this); + _plugin.getLifetime().register(this); } @EventHandler(priority = EventPriority.LOWEST) @@ -150,14 +151,7 @@ public abstract class ShopBase implements Listene { if (_playerPageMap.containsKey(event.getPlayer().getUniqueId()) && _playerPageMap.get(event.getPlayer().getUniqueId()).getTitle() != null && _playerPageMap.get(event.getPlayer().getUniqueId()).getTitle().equalsIgnoreCase(event.getInventory().getTitle())) { - _playerPageMap.get(event.getPlayer().getUniqueId()).playerClosed(); - _playerPageMap.get(event.getPlayer().getUniqueId()).dispose(); - - _playerPageMap.remove(event.getPlayer().getUniqueId()); - - closeShopForPlayer((Player) event.getPlayer()); - - _openedShop.remove(event.getPlayer().getUniqueId()); + removePlayer((Player) event.getPlayer()); } } @@ -169,17 +163,39 @@ public abstract class ShopBase implements Listene if (_playerPageMap.containsKey(event.getPlayer().getUniqueId()) && _playerPageMap.get(event.getPlayer().getUniqueId()).getTitle() != null && _playerPageMap.get(event.getPlayer().getUniqueId()).getTitle().equalsIgnoreCase(event.getInventory().getTitle())) { - _playerPageMap.get(event.getPlayer().getUniqueId()).playerClosed(); - _playerPageMap.get(event.getPlayer().getUniqueId()).dispose(); - - _playerPageMap.remove(event.getPlayer().getUniqueId()); - - closeShopForPlayer((Player) event.getPlayer()); - - _openedShop.remove(event.getPlayer().getUniqueId()); + removePlayer((Player) event.getPlayer()); } } - + + protected void removePlayer(Player player) + { + _playerPageMap.get(player.getUniqueId()).playerClosed(); + _playerPageMap.get(player.getUniqueId()).dispose(); + + _playerPageMap.remove(player.getUniqueId()); + + closeShopForPlayer(player); + + _openedShop.remove(player.getUniqueId()); + } + + @Override + public void deactivate() + { + super.deactivate(); + _playerPageMap.entrySet().stream().map(Map.Entry::getKey).map(Bukkit::getPlayer).forEach(p -> { + if (_playerPageMap.get(p.getName()).getTitle().equals(p.getOpenInventory().getTitle())) + { + p.closeInventory(); + } + removePlayer(p); + }); + _playerPageMap.clear(); + _openedShop.clear(); + _purchaseBlock.clear(); + _errorThrottling.clear(); + } + protected boolean canOpenShop(Player player) { return true; @@ -194,15 +210,8 @@ public abstract class ShopBase implements Listene { if (_playerPageMap.containsKey(event.getPlayer().getUniqueId())) { - _playerPageMap.get(event.getPlayer().getUniqueId()).playerClosed(); - _playerPageMap.get(event.getPlayer().getUniqueId()).dispose(); - + removePlayer(event.getPlayer()); event.getPlayer().closeInventory(); - closeShopForPlayer(event.getPlayer()); - - _playerPageMap.remove(event.getPlayer().getUniqueId()); - - _openedShop.remove(event.getPlayer().getUniqueId()); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ShopPageBase.java b/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ShopPageBase.java index 7f1a8c525..086506dfd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ShopPageBase.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ShopPageBase.java @@ -1,5 +1,14 @@ package mineplex.core.shop.page; + +import mineplex.core.account.CoreClient; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilInv; +import mineplex.core.donation.DonationManager; +import mineplex.core.lifetimes.Lifetimed; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.item.IButton; import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCustom; @@ -11,16 +20,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import mineplex.core.MiniPlugin; -import mineplex.core.account.CoreClient; -import mineplex.core.account.CoreClientManager; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilInv; -import mineplex.core.donation.DonationManager; -import mineplex.core.shop.ShopBase; -import mineplex.core.shop.item.IButton; - -public abstract class ShopPageBase> extends CraftInventoryCustom implements Listener +public abstract class ShopPageBase> extends CraftInventoryCustom implements Listener { protected PluginType _plugin; protected CoreClientManager _clientManager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/spawn/SpawnRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/spawn/SpawnRepository.java index 7e0b5c48f..393a68e1b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/spawn/SpawnRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/spawn/SpawnRepository.java @@ -9,10 +9,11 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnVarChar; -public class SpawnRepository extends MinecraftRepository +public class SpawnRepository extends RepositoryBase { private static String CREATE_SPAWN_TABLE = "CREATE TABLE IF NOT EXISTS spawns (id INT NOT NULL AUTO_INCREMENT, serverName VARCHAR(100), location VARCHAR(100), PRIMARY KEY (id), INDEX serverNameIndex (serverName));"; private static String RETRIEVE_SPAWNS = "SELECT location FROM spawns WHERE serverName = ?;"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java index b9984dde5..518021120 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java @@ -18,9 +18,10 @@ import org.jooq.types.ULong; import mineplex.core.database.MinecraftRepository; import mineplex.database.Tables; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnVarChar; -public class StatsRepository extends MinecraftRepository +public class StatsRepository extends RepositoryBase { private static final String RETRIEVE_STATS = "SELECT id, name FROM stats;"; private static final String INSERT_STAT = "INSERT INTO stats (name) VALUES (?);"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/status/SuicideHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/status/SuicideHandler.java index a3f59cc44..0ec0f1582 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/status/SuicideHandler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/status/SuicideHandler.java @@ -1,6 +1,8 @@ package mineplex.core.status; import mineplex.core.common.util.F; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.serverdata.Region; import mineplex.serverdata.commands.CommandCallback; @@ -42,7 +44,7 @@ public class SuicideHandler implements CommandCallback { public void run() { - Portal.getInstance().sendAllPlayers("Lobby"); + Portal.getInstance().sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); } }, 60L); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java index a5dc99212..2d7d41fc3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java @@ -25,7 +25,7 @@ public class TaskManager extends MiniDbClientPlugin private NautHashMap _tasks = new NautHashMap(); - public TaskManager(JavaPlugin plugin, CoreClientManager clientManager, String webServerAddress) + public TaskManager(JavaPlugin plugin, CoreClientManager clientManager) { super("Task Manager", plugin, clientManager); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java index 27e314049..429e2874d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/task/repository/TaskRepository.java @@ -9,13 +9,14 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; import mineplex.core.task.Task; import mineplex.core.task.TaskClient; -public class TaskRepository extends MinecraftRepository +public class TaskRepository extends RepositoryBase { private static String ADD_ACCOUNT_TASK = "INSERT INTO accountTasks (accountId, taskId) VALUES (?, ?);"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankManager.java b/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankManager.java index 900a3f4f7..44291ba7f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankManager.java @@ -35,7 +35,7 @@ public class ThankManager extends MiniDbClientPlugin _donationManager = donationManager; - _thankRepository = new ThankRepository(plugin); + _thankRepository = new ThankRepository(); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankRepository.java index 67d26ef6a..1e2d752e6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/thank/ThankRepository.java @@ -4,16 +4,17 @@ import mineplex.core.database.MinecraftRepository; import mineplex.database.routines.AddThank; import mineplex.database.routines.ClaimThank; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import org.bukkit.plugin.java.JavaPlugin; import java.sql.SQLException; -public class ThankRepository extends MinecraftRepository +public class ThankRepository extends RepositoryBase { private static final String GET_THANK_DATA = "SELECT SUM(thankAmount) FROM accountThankTransactions WHERE receiverId = ? AND claimed = FALSE"; - public ThankRepository(JavaPlugin plugin) + public ThankRepository() { super(DBPool.getAccount()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/Titles.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/Titles.java index 210405c95..515bcf5ef 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/Titles.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/Titles.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import net.md_5.bungee.api.ChatColor; @@ -47,6 +48,8 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; import mineplex.core.Managers; import mineplex.core.MiniDbClientPlugin; @@ -60,6 +63,8 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilText; @@ -70,7 +75,9 @@ import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler; import mineplex.core.packethandler.PacketInfo; import mineplex.core.titles.commands.TrackCommand; +import mineplex.core.titles.tracks.HappyGaryTrack; import mineplex.core.titles.tracks.Track; +import mineplex.core.titles.tracks.TrackFormat; import mineplex.core.titles.tracks.TrackManager; import mineplex.core.titles.tracks.TrackTier; @@ -84,6 +91,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand // Maps player to their selected track private final Map _selectedTrack = new HashMap<>(); + private final Map _trackAnimationProgress = new HashMap<>(); // Maps player to map of player and the id for the armorstand nametag private final Map> _armorStandIds = new HashMap<>(); @@ -151,16 +159,12 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand { if (Get(event.getPlayer()) != null) { - if (UtilPlayer.getVersion(event.getPlayer()) != MinecraftVersion.Version1_8) + Track track = _trackManager.getTrackById(Get(event.getPlayer()).getTrackId()); + if (track != null && track.getRequirements().getTier(event.getPlayer()) != null) { - Track track = _trackManager.getTrackById(Get(event.getPlayer()).getTrackId()); - if (track != null && track.getRequirements().getTier(event.getPlayer()) != null) - { - toggleActiveTrack(event.getPlayer(), track); - } + toggleActiveTrack(event.getPlayer(), track); } } - giveBook(event.getPlayer(), false); } @EventHandler @@ -169,6 +173,11 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand _armorStandIds.values().forEach(map -> map.keySet().removeIf(key -> key.equals(event.getPlayer().getUniqueId()))); _allIds.values().forEach(map -> map.keySet().removeIf(key -> key.equals(event.getPlayer().getUniqueId()))); _selectedTrack.remove(event.getPlayer().getUniqueId()); + BukkitTask task = _trackAnimationProgress.remove(event.getPlayer().getUniqueId()); + if (task != null) + { + task.cancel(); + } } @EventHandler(priority = EventPriority.LOWEST) @@ -203,7 +212,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand { if (event.isSneaking()) { - updateTitle(event.getPlayer(), null); + updateTitle(event.getPlayer(), (String) null); } else { @@ -253,10 +262,8 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand switch (UtilPlayer.getVersion(player)) { case Version1_9: - giveBook19(player, open); - break; case Version1_8: - giveBook18(player, open); + giveBook19(player, open); break; case ALL: break; @@ -654,6 +661,46 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand if (track.getRequirements().getTier(player) != null) { _selectedTrack.put(player.getUniqueId(), track); + if (!_trackAnimationProgress.containsKey(player.getUniqueId())) + { + _trackAnimationProgress.put(player.getUniqueId(), runSyncTimer(new BukkitRunnable() + { + private AtomicInteger _lastRun = new AtomicInteger(); + private int _frame = 0; + + @Override + public void run() + { + Track curTrack = _selectedTrack.get(player.getUniqueId()); + if (curTrack != null) + { + TrackTier curTier = curTrack.getRequirements().getTier(player); + if (curTier != null) + { + TrackFormat format = curTier.getFormat(); + if (format.isAnimated()) + { + if (_lastRun.get() > format.getDelay()) + { + _lastRun.set(0); + + List lines = format.getAnimatedLines(); + if (_frame >= lines.size()) + { + _frame = 0; + } + + updateTitle(player, lines.get(_frame)); + + _frame++; + } + _lastRun.incrementAndGet(); + } + } + } + } + }, 0L, 1L)); + } UtilPlayer.message(player, F.main("Track", "Your active track has been updated to " + track.getColor() + track.getLongName())); } else @@ -671,6 +718,23 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand } private void updateTitle(Player player, Track track) + { + if (_disabled) + return; + + if (track != null && track.getRequirements().getTier(player) != null) + { + TrackTier currentTier = track.getRequirements().getTier(player); + updateTitle(player, currentTier.getDisplayName()); + } + else + { + updateTitle(player, (String) null); + } + } + + + private void updateTitle(Player player, String str) { if (_disabled) return; @@ -685,7 +749,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand if (other == null) return; - updateArmorStand(player, other, track, entityId); + updateArmorStand(player, other, str, entityId); }); } @@ -725,7 +789,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand summonForEntity19(receiver, player); break; case Version1_8: - // do nothing + summonForEntity18(receiver, player); break; case ALL: // do nothing @@ -737,7 +801,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand { World world = ((CraftWorld) receiver.getWorld()).getHandle(); - DataWatcher armorStandWatcher = getArmorStandWatcher(player, getActiveTrack(player)); + DataWatcher armorStandWatcher = getArmorStandWatcher(player, null); armorStandWatcher.a(10, (byte) 0x10, EntityArmorStand.META_ARMOR_OPTION, (byte) 0x10); // Small DataWatcher squidWatcher = new DataWatcher(new DummyEntity(world)); @@ -807,6 +871,8 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachSlimeToPlayer); ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachSquidtoSlime); ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachArmorStandToSquid); + + updateTitle(player, getActiveTrack(player)); }); } @@ -815,59 +881,45 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand { World world = ((CraftWorld) receiver.getWorld()).getHandle(); - DataWatcher armorStandWatcher = getArmorStandWatcher(player, getActiveTrack(player)); + DataWatcher armorStandWatcher = getArmorStandWatcher(player, null); + armorStandWatcher.a(10, (byte) 0x10, EntityArmorStand.META_ARMOR_OPTION, (byte) 0x10); // Small - List entityIds = new ArrayList<>(); + DataWatcher squidWatcher = new DataWatcher(new DummyEntity(world)); + squidWatcher.a(0, (byte) 0x20, net.minecraft.server.v1_8_R3.Entity.META_ENTITYDATA, (byte) 0x20); - entityIds.add(player.getEntityId()); + DataWatcher slimeWatcher = new DataWatcher(new DummyEntity(world)); + slimeWatcher.a(0, (byte) 0x20, net.minecraft.server.v1_8_R3.Entity.META_ENTITYDATA, (byte) 0x20); + slimeWatcher.a(16, (byte) -1, EntitySlime.META_SIZE, -1); - List packets = new ArrayList<>(); + PacketPlayOutSpawnEntityLiving spawnSlime = new PacketPlayOutSpawnEntityLiving(); + spawnSlime.a = UtilEnt.getNewEntityId(); + spawnSlime.b = EntityType.SLIME.getTypeId(); + spawnSlime.c = MathHelper.floor(player.getLocation().getX() * 32.0D); + spawnSlime.d = -150; + spawnSlime.e = MathHelper.floor(player.getLocation().getZ() * 32.0D); + spawnSlime.i = 0; + spawnSlime.j = 0; + spawnSlime.k = 0; + spawnSlime.f = 0; + spawnSlime.g = 0; + spawnSlime.h = 0; + spawnSlime.uuid = UUID.randomUUID(); + spawnSlime.l = slimeWatcher; - for (int i = 0; i < 11; i++) - { - DataWatcher slimeWatcher0 = new DataWatcher(new DummyEntity(world)); - slimeWatcher0.a(0, (byte) 0x20, net.minecraft.server.v1_8_R3.Entity.META_ENTITYDATA, (byte) 0x20); - slimeWatcher0.a(16, (byte) -1, EntitySlime.META_SIZE, -1); - - DataWatcher silverfishWatcher0 = new DataWatcher(new DummyEntity(world)); - silverfishWatcher0.a(0, (byte) 0x20, net.minecraft.server.v1_8_R3.Entity.META_ENTITYDATA, (byte) 0x20); - - PacketPlayOutSpawnEntityLiving spawnSlime = new PacketPlayOutSpawnEntityLiving(); - spawnSlime.a = UtilEnt.getNewEntityId(); - spawnSlime.b = EntityType.SLIME.getTypeId(); - spawnSlime.c = MathHelper.floor(player.getLocation().getX() * 32.0D); - spawnSlime.d = -150; - spawnSlime.e = MathHelper.floor(player.getLocation().getZ() * 32.0D); - spawnSlime.i = 0; - spawnSlime.j = 0; - spawnSlime.k = 0; - spawnSlime.f = 0; - spawnSlime.g = 0; - spawnSlime.h = 0; - spawnSlime.uuid = UUID.randomUUID(); - spawnSlime.l = slimeWatcher0; - - PacketPlayOutSpawnEntityLiving spawnSilverfish = new PacketPlayOutSpawnEntityLiving(); - spawnSilverfish.a = UtilEnt.getNewEntityId(); - spawnSilverfish.b = EntityType.SILVERFISH.getTypeId(); - spawnSilverfish.c = MathHelper.floor(player.getLocation().getX() * 32.0D); - spawnSilverfish.d = -150; - spawnSilverfish.e = MathHelper.floor(player.getLocation().getZ() * 32.0D); - spawnSilverfish.i = 0; - spawnSilverfish.j = 0; - spawnSilverfish.k = 0; - spawnSilverfish.f = 0; - spawnSilverfish.g = 0; - spawnSilverfish.h = 0; - spawnSilverfish.uuid = UUID.randomUUID(); - spawnSilverfish.l = silverfishWatcher0; - - entityIds.add(spawnSlime.a); - entityIds.add(spawnSilverfish.a); - - packets.add(spawnSlime); - packets.add(spawnSilverfish); - } + PacketPlayOutSpawnEntityLiving spawnSquid = new PacketPlayOutSpawnEntityLiving(); + spawnSquid.a = UtilEnt.getNewEntityId(); + spawnSquid.b = EntityType.WOLF.getTypeId(); + spawnSquid.c = MathHelper.floor(player.getLocation().getX() * 32.0D); + spawnSquid.d = -150; + spawnSquid.e = MathHelper.floor(player.getLocation().getZ() * 32.0D); + spawnSquid.i = 0; + spawnSquid.j = 0; + spawnSquid.k = 0; + spawnSquid.f = 0; + spawnSquid.g = 0; + spawnSquid.h = 0; + spawnSquid.uuid = UUID.randomUUID(); + spawnSquid.l = squidWatcher; PacketPlayOutSpawnEntityLiving spawnArmorStand = new PacketPlayOutSpawnEntityLiving(); spawnArmorStand.a = UtilEnt.getNewEntityId(); @@ -883,45 +935,50 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand spawnArmorStand.h = 0; spawnArmorStand.uuid = UUID.randomUUID(); spawnArmorStand.l = armorStandWatcher; - packets.add(spawnArmorStand); - entityIds.add(spawnArmorStand.a); - for (int i = 0; i < entityIds.size() - 1; i++) - { - int a = entityIds.get(i); - int b = entityIds.get(i + 1); + PacketPlayOutAttachEntity attachSlimeToPlayer = new PacketPlayOutAttachEntity(); + attachSlimeToPlayer.a = 0; + attachSlimeToPlayer.b = spawnSlime.a; + attachSlimeToPlayer.c = player.getEntityId(); - PacketPlayOutAttachEntity attachSlimeToPlayer = new PacketPlayOutAttachEntity(); - attachSlimeToPlayer.a = 0; - attachSlimeToPlayer.b = b; - attachSlimeToPlayer.c = a; + PacketPlayOutAttachEntity attachSquidtoSlime = new PacketPlayOutAttachEntity(); + attachSquidtoSlime.a = 0; + attachSquidtoSlime.b = spawnSquid.a; + attachSquidtoSlime.c = spawnSlime.a; - packets.add(attachSlimeToPlayer); - } - - entityIds.remove(player.getEntityId()); + PacketPlayOutAttachEntity attachArmorStandToSquid = new PacketPlayOutAttachEntity(); + attachArmorStandToSquid.a = 0; + attachArmorStandToSquid.b = spawnArmorStand.a; + attachArmorStandToSquid.c = spawnSquid.a; _armorStandIds.computeIfAbsent(player.getEntityId(), key -> new HashMap<>()).put(receiver.getUniqueId(), spawnArmorStand.a); - _allIds.computeIfAbsent(player.getEntityId(), key -> new HashMap<>()).put(receiver.getUniqueId(), entityIds); + _allIds.computeIfAbsent(player.getEntityId(), key -> new HashMap<>()).put(receiver.getUniqueId(), Arrays.asList(spawnSlime.a, spawnSquid.a, spawnArmorStand.a)); runSync(() -> { - for (Packet p : packets) - { - ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(p); - } + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(spawnSlime); + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(spawnSquid); + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(spawnArmorStand); + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachSlimeToPlayer); + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachSquidtoSlime); + ((CraftPlayer) receiver).getHandle().playerConnection.networkManager.handle(attachArmorStandToSquid); + + updateTitle(player, getActiveTrack(player)); }); } - private void updateArmorStand(Player owner, Player receiver, Track currentTrack, int entityId) + private void updateArmorStand(Player owner, Player receiver, String newName, int entityId) { + if (_disabled) + return; + switch (UtilPlayer.getVersion(receiver)) { case Version1_9: - updateArmorStand19(owner, receiver, currentTrack, entityId); + updateArmorStand19(owner, receiver, newName, entityId); break; case Version1_8: - // do nothing + updateArmorStand18(owner, receiver, newName, entityId); break; case ALL: // do nothing @@ -929,9 +986,9 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand } } - private void updateArmorStand19(Player owner, Player player, Track track, int entityId) + private void updateArmorStand19(Player owner, Player player, String newName, int entityId) { - DataWatcher armorStandWatcher = getArmorStandWatcher(owner, track); + DataWatcher armorStandWatcher = getArmorStandWatcher(owner, newName); armorStandWatcher.a(10, (byte) 0x10, EntityArmorStand.META_ARMOR_OPTION, (byte) 0x10); // Small PacketPlayOutEntityMetadata entityMetadata = new PacketPlayOutEntityMetadata(); @@ -941,9 +998,9 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand ((CraftPlayer) player).getHandle().playerConnection.networkManager.handle(entityMetadata); } - private void updateArmorStand18(Player owner, Player player, Track track, int entityId) + private void updateArmorStand18(Player owner, Player player, String newName, int entityId) { - DataWatcher armorStandWatcher = getArmorStandWatcher(owner, track); + DataWatcher armorStandWatcher = getArmorStandWatcher(owner, newName); PacketPlayOutEntityMetadata entityMetadata = new PacketPlayOutEntityMetadata(); entityMetadata.a = entityId; @@ -985,7 +1042,7 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand } } - private DataWatcher getArmorStandWatcher(Player ownerOfTrack, Track existingTitle) + private DataWatcher getArmorStandWatcher(Player ownerOfTrack, String newName) { World world = ((CraftWorld) ownerOfTrack.getWorld()).getHandle(); @@ -993,10 +1050,9 @@ public class Titles extends MiniDbClientPlugin implements IPacketHand armorStandWatcher.a(0, (byte) 0x20, net.minecraft.server.v1_8_R3.Entity.META_ENTITYDATA, (byte) 0x20); armorStandWatcher.a(1, (short) 300, net.minecraft.server.v1_8_R3.Entity.META_AIR, 0); - if (existingTitle != null && existingTitle.getRequirements().getTier(ownerOfTrack) != null) + if (newName != null && !newName.isEmpty()) { - TrackTier currentTier = existingTitle.getRequirements().getTier(ownerOfTrack); - armorStandWatcher.a(2, currentTier.getDisplayName(), net.minecraft.server.v1_8_R3.Entity.META_CUSTOMNAME, currentTier.getDisplayName()); + armorStandWatcher.a(2, newName, net.minecraft.server.v1_8_R3.Entity.META_CUSTOMNAME, newName); armorStandWatcher.a(3, (byte) 1, net.minecraft.server.v1_8_R3.Entity.META_CUSTOMNAME_VISIBLE, true); } else diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/commands/TrackCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/commands/TrackCommand.java index 59b92290f..0617028ff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/commands/TrackCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/commands/TrackCommand.java @@ -3,6 +3,7 @@ package mineplex.core.titles.commands; import org.bukkit.entity.Player; import mineplex.core.Managers; +import mineplex.core.account.CoreClientManager; import mineplex.core.command.CommandBase; import mineplex.core.common.MinecraftVersion; import mineplex.core.common.Rank; @@ -26,12 +27,6 @@ public class TrackCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { - if (UtilPlayer.getVersion(caller) == MinecraftVersion.Version1_8) - { - UtilPlayer.message(caller, F.main("Track", "Titles are not available for 1.8.x!")); - return; - } - if (args.length == 0) { if (Plugin.getActiveTrack(caller) == null) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/HappyGaryTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/HappyGaryTrack.java new file mode 100644 index 000000000..fe75d1bf4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/HappyGaryTrack.java @@ -0,0 +1,36 @@ +package mineplex.core.titles.tracks; + +import java.util.Set; + +import net.md_5.bungee.api.ChatColor; + +import com.google.common.collect.Sets; + +import mineplex.core.Managers; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.Rank; + +public class HappyGaryTrack extends Track +{ + private final CoreClientManager _coreClientManager = Managers.require(CoreClientManager.class); + + protected HappyGaryTrack() + { + super("happygary", ChatColor.GOLD, "Happy Gary", "Happy Gary", "ᐛ", true); + special(); + getRequirements() + .addTier(new TrackTier( + "☆゚°˖* ᕕ(ᐛ)ᕗ", + null, + player -> _coreClientManager.hasRank(player, Rank.ADMIN), + new TrackFormat(ChatColor.GOLD, ChatColor.GOLD) + .animated(1, + "☆゚°˖* ᕕ(ᐛ)ᕗ", + "*☆゚°˖ ᕕ(ᐛ)ᕗ", + "˖*☆゚° ᕕ(ᐛ)ᕗ", + "°˖*☆゚ ᕕ(ᐛ)ᕗ", + "゚°˖*☆ ᕕ(ᐛ)ᕗ" + ) + )); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TableFlipTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TableFlipTrack.java new file mode 100644 index 000000000..4924fe3ef --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TableFlipTrack.java @@ -0,0 +1,39 @@ +package mineplex.core.titles.tracks; + +import net.md_5.bungee.api.ChatColor; + +import mineplex.core.Managers; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.Rank; + +public class TableFlipTrack extends Track +{ + private final CoreClientManager _coreClientManager = Managers.require(CoreClientManager.class); + + protected TableFlipTrack() + { + super("tableflip", ChatColor.AQUA, "Tableflip", "Tableflip", "(╯°□°)╯ ︵ ┻━┻", true); + special(); + getRequirements() + .addTier(new TrackTier( + "(╯°□°)╯ ︵ ┻━┻", + null, + player -> _coreClientManager.hasRank(player, Rank.ADMIN), + new TrackFormat(ChatColor.AQUA, ChatColor.AQUA) + .animated(5, + "(\\°-°)\\ ┬┬", + "(\\°-°)\\ ┬┬", + "(\\°-°)\\ ┬┬", + "(\\°□°)\\ ┬┬", + "(-°□°)- ┬┬", + "(╯°□°)╯ ︵ ]", + "(╯°□°)╯ ︵ ┻━┻", + "(╯°□°)╯ ︵ [", + "(╯°□°)╯ ︵ ┬┬", + "(╯°□°)╯ ︵ ┬┬", + "(╯°□°)╯ ︵ ┬┬", + "(╯°□°)╯ ︵ ┬┬" + ) + )); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackFormat.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackFormat.java index 9cf7b4f63..de3fb1d3d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackFormat.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackFormat.java @@ -1,13 +1,22 @@ package mineplex.core.titles.tracks; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.chat.ComponentSerializer; public class TrackFormat { private final ChatColor _chatColor; private final ChatColor _magicPrefixSuffix; + private List _lines; + private int _ticks; + public TrackFormat(ChatColor color) { this(color, null); @@ -19,6 +28,23 @@ public class TrackFormat this._magicPrefixSuffix = prefixSuffixColor; } + public TrackFormat animated(int ticks, String... lines) + { + _ticks = ticks; + _lines = new ArrayList<>(); + for (String line : lines) + { + ComponentBuilder builder = new ComponentBuilder(""); + preFormat(builder); + builder.append(line); + format(builder); + builder.append("", ComponentBuilder.FormatRetention.NONE); + postFormat(builder); + _lines.add(BaseComponent.toLegacyText(builder.create())); + } + return this; + } + public void preFormat(ComponentBuilder component) { if (_magicPrefixSuffix != null) @@ -64,4 +90,19 @@ public class TrackFormat { return this._chatColor; } + + public List getAnimatedLines() + { + return _lines; + } + + public boolean isAnimated() + { + return _lines != null && !_lines.isEmpty(); + } + + public int getDelay() + { + return _ticks; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackManager.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackManager.java index 5f7a23720..1e6e3b91c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/TrackManager.java @@ -24,6 +24,8 @@ public class TrackManager extends MiniPlugin registerTrack(new SnekTrack()); registerTrack(new DongerTrack()); registerTrack(new WizardTrack()); + registerTrack(new TableFlipTrack()); + registerTrack(new HappyGaryTrack()); registerTrack(new PowerPlayTrack()); registerTrack(new MineplexMasteryTrack()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/WizardTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/WizardTrack.java index 4b194350e..768c67620 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/WizardTrack.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/WizardTrack.java @@ -10,6 +10,7 @@ import com.google.common.collect.Sets; public class WizardTrack extends Track { private static final Set OWNERS = Sets.newHashSet( + "b86b54da-93dd-46f9-be33-27bd92aa36d7", "2016b565-0a63-4a2d-800b-b786ac256288" ); @@ -23,6 +24,13 @@ public class WizardTrack extends Track null, player -> OWNERS.contains(player.getUniqueId().toString().toLowerCase()), new TrackFormat(ChatColor.DARK_PURPLE, ChatColor.DARK_PURPLE) + .animated(5, + "(ノ◕ヮ◕)ノ*", + "(ノ◕ヮ◕)ノ*:・゚", + "(ノ◕ヮ◕)ノ*:・゚✧", + "(ノ◕ヮ◕)ノ*:・゚✧", + "(ノ◕ヮ◕)ノ*:・゚✧" + ) )); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/tournament/TournamentRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/tournament/TournamentRepository.java index 00783c52d..97382390b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/tournament/TournamentRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/tournament/TournamentRepository.java @@ -12,11 +12,12 @@ import mineplex.core.database.MinecraftRepository; import mineplex.core.tournament.data.Tournament; import mineplex.core.tournament.data.TournamentInviteStatus; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class TournamentRepository extends MinecraftRepository +public class TournamentRepository extends RepositoryBase { private static String REGISTER_FOR_TOURNAMENT = "INSERT INTO tournamentTeams(accountId, tournamentId, status) VALUES (?, ?, ?);"; private static String UNREGISTER_FOR_TOURNAMENT = "DELETE FROM TTI FROM tournamentTeamInvites AS TTI INNER JOIN tournamentTeams AS TT ON TT.id = TTI.teamId WHERE TTI.accountId = ? AND TT.tournamentId = ?;"; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java index ea864c012..0c045710e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java @@ -356,8 +356,7 @@ public class TreasurePage extends ShopPageBase gingerbreadLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); } - // Minestrike Chests not being released in this update! - /*List minestrikeLore = Lists.newArrayList(); + List minestrikeLore = Lists.newArrayList(); minestrikeLore.add(" "); minestrikeLore.add(F.value("Minestrike Chests Owned", "" + minestrikeCount)); minestrikeLore.add(" "); @@ -372,7 +371,7 @@ public class TreasurePage extends ShopPageBase minestrikeLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + "20000 Treasure Shards"); minestrikeLore.add(" "); minestrikeLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); - }*/ + } ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false); @@ -382,7 +381,7 @@ public class TreasurePage extends ShopPageBase ShopItem legendary = new ShopItem(Material.ENDER_CHEST, C.cRed + C.Bold + "Mythical Treasure", legendaryLore.toArray(new String[0]), 0, false, false); ItemStack illuminated = new ShopItem(Material.SEA_LANTERN, C.cDAqua + C.Bold + "Illuminated Treasure", illuminatedLore.toArray(new String[0]), 0, false, false); ItemStack omega = SkinData.OMEGA_CHEST.getSkull(C.cAquaB + "Omega Treasure", omegaLore); - //ItemStack minestrike = new ShopItem(Material.GLASS, C.cGoldB + "Minestrike Treasure", minestrikeLore.toArray(new String[0]), 0, false, false); + ItemStack minestrike = new ShopItem(Material.GLASS, C.cGoldB + "Minestrike Treasure", minestrikeLore.toArray(new String[0]), 0, false, false); // Seasonal chests ItemStack christmas = SkinData.PRESENT.getSkull(C.cDGreen + C.Bold + "Winter Holiday Treasure", christmasLore); @@ -403,7 +402,7 @@ public class TreasurePage extends ShopPageBase TreasurePageItem mythicalTreasureItem = new TreasurePageItem(legendary, legendaryCount, TreasureType.MYTHICAL); TreasurePageItem illuminatedTreasureItem = new TreasurePageItem(illuminated, illuminatedCount, TreasureType.ILLUMINATED); TreasurePageItem omegaTreasureItem = new TreasurePageItem(omega, omegaCount, TreasureType.OMEGA); - //TreasurePageItem minestrikeTreasureItem = new TreasurePageItem(minestrike, minestrikeCount, TreasureType.MINESTRIKE); + TreasurePageItem minestrikeTreasureItem = new TreasurePageItem(minestrike, minestrikeCount, TreasureType.MINESTRIKE); // Seasonal chests TreasurePageItem winterTreasureItem = new TreasurePageItem(christmas, christmasCount, TreasureType.CHRISTMAS); @@ -418,7 +417,7 @@ public class TreasurePage extends ShopPageBase _normalTreasures.add(mythicalTreasureItem); _normalTreasures.add(illuminatedTreasureItem); _normalTreasures.add(omegaTreasureItem); - //_normalTreasures.add(minestrikeTreasureItem); + _normalTreasures.add(minestrikeTreasureItem); _seasonalTreasures.add(winterTreasureItem); _seasonalTreasures.add(freedomTreasureItem); @@ -440,9 +439,9 @@ public class TreasurePage extends ShopPageBase addChest(treasurePageItem, specialDisplayPositions[i]); i++; } - i = 0; } + i = 0; int[] normalDisplayPositions = getNormalDisplayOrder(); for (TreasurePageItem treasurePageItem : _normalTreasures) { @@ -508,8 +507,8 @@ public class TreasurePage extends ShopPageBase private int[] getNormalDisplayOrder() { - int seasonalTreasuresSize = _seasonalTreasures.size(); - switch (seasonalTreasuresSize) + int normalTreasuresSize = _normalTreasures.size(); + switch (normalTreasuresSize) { case 5: return new int[]{20, 22, 24, 39, 41}; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java b/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java index a55271856..04a0acdde 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java @@ -1,5 +1,9 @@ package mineplex.core.twofactor; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -21,7 +25,6 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; -import org.bukkit.metadata.FixedMetadataValue; import com.warrenstrange.googleauth.GoogleAuthenticator; @@ -39,8 +42,8 @@ import mineplex.serverdata.database.DBPool; @ReflectivelyCreateMiniPlugin public class TwoFactorAuth extends MiniClientPlugin { - private static final String TFA_SETUP = "twofactor:setup"; - private static final String TFA_AUTHENTICATING = "twofactor:authenticating"; + private final Map setupData = new HashMap<>(); + private final Set authenticating = new HashSet<>(); private static final GoogleAuthenticator authenticator = new GoogleAuthenticator(); private final CoreClientManager _clientManager = Managers.require(CoreClientManager.class); @@ -106,7 +109,7 @@ public class TwoFactorAuth extends MiniClientPlugin player.getInventory().setHeldItemSlot(slot); player.getInventory().setItemInHand(stack); - player.setMetadata(TFA_SETUP, new FixedMetadataValue(_plugin, secret)); + setupData.put(player.getUniqueId(), secret); player.sendMessage(F.main("2FA", "Setting up two-factor authentication.")); } @@ -127,7 +130,7 @@ public class TwoFactorAuth extends MiniClientPlugin { // Hooray 2FA player.sendMessage(F.main("2FA", "Please enter your two-factor auth code")); - player.setMetadata(TFA_AUTHENTICATING, new FixedMetadataValue(_plugin, true)); + authenticating.add(player.getUniqueId()); } else { @@ -139,12 +142,11 @@ public class TwoFactorAuth extends MiniClientPlugin public void onQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP)) + if (setupData.remove(player.getUniqueId()) != null) { player.setItemInHand(null); - player.removeMetadata(TFA_SETUP, _plugin); } - player.removeMetadata(TFA_AUTHENTICATING, _plugin); + authenticating.remove(player.getUniqueId()); } @EventHandler(priority = EventPriority.LOWEST) @@ -152,12 +154,13 @@ public class TwoFactorAuth extends MiniClientPlugin { Player player = event.getPlayer(); - String secret = null; - if (player.hasMetadata(TFA_SETUP)) + String secret = null; // Check setup data first + + if (setupData.containsKey(player.getUniqueId())) { - secret = player.getMetadata(TFA_SETUP).get(0).asString(); + secret = setupData.get(player.getUniqueId()); } - else if (player.hasMetadata(TFA_AUTHENTICATING)) + else if (authenticating.contains(player.getUniqueId())) { secret = Get(player).getSecretKey().get(); } @@ -192,7 +195,7 @@ public class TwoFactorAuth extends MiniClientPlugin player.sendMessage(F.main("2FA", "Authorized for 24 hours.")); - if (player.hasMetadata(TFA_SETUP)) + if (setupData.containsKey(player.getUniqueId())) { // Remove setup map + save secret player.setItemInHand(null); @@ -220,8 +223,8 @@ public class TwoFactorAuth extends MiniClientPlugin _repository.saveLogin(player, player.getAddress().getAddress().toString().substring(1)); - player.removeMetadata(TFA_SETUP, _plugin); - player.removeMetadata(TFA_AUTHENTICATING, _plugin); + setupData.remove(player.getUniqueId()); + authenticating.remove(player.getUniqueId()); } // Cancel relevant events @@ -230,7 +233,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onChangeHeldItem(PlayerItemHeldEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP)) + if (setupData.containsKey(player.getUniqueId())) { event.setCancelled(true); } @@ -240,7 +243,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onClick(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setCancelled(true); } @@ -250,7 +253,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onDrag(InventoryDragEvent event) { Player player = (Player) event.getWhoClicked(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setCancelled(true); } @@ -260,7 +263,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onDrop(PlayerDropItemEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setCancelled(true); } @@ -270,7 +273,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setCancelled(true); } @@ -280,7 +283,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onInteractWithEntity(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setCancelled(true); } @@ -290,7 +293,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onCommand(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { event.setMessage("/"); event.setCancelled(true); @@ -301,7 +304,7 @@ public class TwoFactorAuth extends MiniClientPlugin public void onMove(PlayerMoveEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata(TFA_SETUP) || player.hasMetadata(TFA_AUTHENTICATING)) + if (setupData.containsKey(player.getUniqueId()) || authenticating.contains(player.getUniqueId())) { if (Recharge.Instance.use(player, "two-factor message cooldown", 3000L, false, false)) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java index 3a865298c..71aff9639 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java @@ -6,6 +6,8 @@ import java.io.FilenameFilter; import java.io.IOException; import java.util.Properties; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.updater.command.BuildVersionCommand; import mineplex.core.updater.command.RestartServerCommand; import org.apache.commons.codec.digest.DigestUtils; @@ -79,7 +81,7 @@ public class FileUpdater extends MiniPlugin for (Player player : Bukkit.getOnlinePlayers()) { player.sendMessage(F.main("Updater", message)); - _portal.sendPlayerToServer(player, "Lobby"); + _portal.sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } } } @@ -108,7 +110,7 @@ public class FileUpdater extends MiniPlugin { public void run() { - _portal.sendAllPlayers("Lobby"); + _portal.sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); } }, 60L); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java index de7e613fe..e37961ef9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java @@ -1,6 +1,8 @@ package mineplex.core.updater; import mineplex.core.common.util.F; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.serverdata.Region; import mineplex.serverdata.commands.CommandCallback; @@ -60,7 +62,7 @@ public class RestartHandler implements CommandCallback, Listener { public void run() { - Portal.getInstance().sendAllPlayers("Lobby"); + Portal.getInstance().sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); } }, 60L); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilGameProfile.java b/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilGameProfile.java index 4d48e4ccc..5ee0a41ce 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilGameProfile.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilGameProfile.java @@ -1,16 +1,5 @@ package mineplex.core.utils; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.mojang.authlib.GameProfile; -import mineplex.core.Managers; -import mineplex.core.profileCache.ProfileCacheManager; -import mineplex.core.thread.ThreadPool; -import net.minecraft.server.v1_8_R3.EntityPlayer; -import net.minecraft.server.v1_8_R3.MinecraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.UUID; @@ -19,6 +8,23 @@ import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.regex.Pattern; +import net.minecraft.server.v1_8_R3.EntityPlayer; +import net.minecraft.server.v1_8_R3.MinecraftServer; + +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.mojang.authlib.GameProfile; + +import mineplex.core.Managers; +import mineplex.core.profileCache.ProfileCacheManager; +import mineplex.core.thread.ThreadPool; + public class UtilGameProfile { private static final Cache TEXTURES = CacheBuilder.newBuilder() @@ -28,13 +34,12 @@ public class UtilGameProfile /** * Get a {@link GameProfile} given a username. - * + *

* If you desperately must block the current thread, you may pass a null Consumer and use Future.get() * * @param username The username of the player - * @param nonNull If true, an OfflinePlayer GameProfile will be returned should the username not be valid - * @param fetched The Consumer which will receive the GameProfile instance. This Consumer will not be called on the main thread - * + * @param nonNull If true, an OfflinePlayer GameProfile will be returned should the username not be valid + * @param fetched The Consumer which will receive the GameProfile instance. This Consumer will not be called on the main thread * @return The GameProfile - always an unique instance */ public static Future getProfileByName(String username, boolean nonNull, Consumer fetched) @@ -95,7 +100,6 @@ public class UtilGameProfile * Clones a GameProfile * * @param input The GameProfile to clone - * * @return A copy of the GameProfile */ public static GameProfile clone(GameProfile input) @@ -112,7 +116,6 @@ public class UtilGameProfile * Convert a string to a legal username equivalent * * @param in The original username - * * @returns A legal version of the username (with illegal characters stripped out */ public static String legalize(String in) @@ -122,6 +125,7 @@ public class UtilGameProfile private static final Field GAME_PROFILE_NAME_FIELD; private static final Field GAME_PROFILE_ID_FIELD; + private static final Field SKULL_META_PROFILE_FIELD; static { @@ -131,6 +135,8 @@ public class UtilGameProfile GAME_PROFILE_NAME_FIELD.setAccessible(true); GAME_PROFILE_ID_FIELD = GameProfile.class.getDeclaredField("id"); GAME_PROFILE_ID_FIELD.setAccessible(true); + SKULL_META_PROFILE_FIELD = Class.forName("org.bukkit.craftbukkit.v1_8_R3.inventory.CraftMetaSkull").getDeclaredField("profile"); + SKULL_META_PROFILE_FIELD.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); @@ -174,4 +180,28 @@ public class UtilGameProfile { return clone(((CraftPlayer) player).getProfile()); } + + public static void setGameProfile(Player player, ItemStack stack) + { + setGameProfile(getGameProfile(player), stack); + } + + public static void setGameProfile(GameProfile profile, ItemStack stack) + { + ItemMeta meta = stack.getItemMeta(); + if (meta instanceof SkullMeta) + { + SkullMeta skullMeta = (SkullMeta) meta; + try + { + SKULL_META_PROFILE_FIELD.set(skullMeta, profile); + } + catch (IllegalAccessException e) + { + e.printStackTrace(); + } + + stack.setItemMeta(skullMeta); + } + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilScheduler.java b/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilScheduler.java index d83cda20f..c0c9ff0e3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilScheduler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/utils/UtilScheduler.java @@ -1,21 +1,22 @@ package mineplex.core.utils; import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; public class UtilScheduler { - public static void runEvery(UpdateType speed, Runnable action) + public static BukkitTask runEvery(UpdateType speed, Runnable action) { Plugin plugin = UtilServer.getPlugin(); - plugin.getServer().getScheduler().runTaskTimer(plugin, action, 0, (int) Math.ceil(speed.getMilliseconds() / 50.0)); + return plugin.getServer().getScheduler().runTaskTimer(plugin, action, 0, (int) Math.ceil(speed.getMilliseconds() / 50.0)); } - public static void runAsyncEvery(UpdateType speed, Runnable action) + public static BukkitTask runAsyncEvery(UpdateType speed, Runnable action) { Plugin plugin = UtilServer.getPlugin(); - plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, action, 0, (int) Math.ceil(speed.getMilliseconds() / 50.0)); + return plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, action, 0, (int) Math.ceil(speed.getMilliseconds() / 50.0)); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/valentines/ValentinesGiftRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/valentines/ValentinesGiftRepository.java index 16c5e85c5..99fdd9cc3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/valentines/ValentinesGiftRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/valentines/ValentinesGiftRepository.java @@ -2,10 +2,11 @@ package mineplex.core.valentines; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import org.bukkit.plugin.java.JavaPlugin; -public class ValentinesGiftRepository extends MinecraftRepository +public class ValentinesGiftRepository extends RepositoryBase { private String GIVE_GIFT = "INSERT INTO accountValentinesGift (senderId, targetId) VALUES (?, ?);"; diff --git a/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/LoggingComponent.java b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/LoggingComponent.java new file mode 100644 index 000000000..d2f61d538 --- /dev/null +++ b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/LoggingComponent.java @@ -0,0 +1,32 @@ +package mineplex.core.lifetimes; + +import java.util.List; + +public class LoggingComponent implements PhasedComponent { + private final List _events; + private final String _name; + + public LoggingComponent(List events, String name) + { + _events = events; + this._name = name; + } + + @Override + public void activate() + { + _events.add(this._name + " activated"); + } + + @Override + public void deactivate() + { + _events.add(this._name + " deactivated"); + } + + @Override + public void setPhase(Object phase) + { + _events.add(this._name + " setPhase " + phase); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/PhasedLifetimeTest.java b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/PhasedLifetimeTest.java new file mode 100644 index 000000000..3d62001c8 --- /dev/null +++ b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/PhasedLifetimeTest.java @@ -0,0 +1,99 @@ +package mineplex.core.lifetimes; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class PhasedLifetimeTest +{ + PhasedLifetime _lifetime = new PhasedLifetime<>(); + List _events = new ArrayList<>(); + @Test + public void testTwoPhaseComponent() + { + Assert.assertFalse(_lifetime.isActive()); + _lifetime.register(new LoggingComponent(_events, "component"), Arrays.asList(Phase.A, Phase.B)); + _lifetime.start(Phase.A); + Assert.assertTrue(_lifetime.isActive()); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A"), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B"), _events); + _lifetime.setPhase(Phase.C); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B", "component setPhase C", "component deactivated"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B", "component setPhase C", "component deactivated"), _events); + Assert.assertFalse(_lifetime.isActive()); + } + @Test + public void testGlobalComponent() + { + _lifetime.register(new LoggingComponent(_events, "component")); + _lifetime.start(Phase.A); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A"), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B", "component deactivated"), _events); + } + + @Test + public void testLateRegistration() + { + _lifetime.start(Phase.A); + _lifetime.register(new LoggingComponent(_events, "component"), Arrays.asList(Phase.A, Phase.B)); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A"), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase A", "component setPhase B", "component deactivated"), _events); + } + @Test + public void testSinglePhase() + { + _lifetime.register(new LoggingComponent(_events, "component"), Collections.singletonList(Phase.B)); + _lifetime.start(Phase.A); + Assert.assertEquals(Collections.emptyList(), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase B"), _events); + _lifetime.setPhase(Phase.C); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase B", "component setPhase C", "component deactivated"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase B", "component setPhase C", "component deactivated"), _events); + } + @Test + public void testComponentLifetimes() + { + _lifetime.register(new LoggingComponent(_events, "component"), Collections.singletonList(Phase.B)).register(new LoggingComponent(_events, "child")); + _lifetime.start(Phase.A); + Assert.assertEquals(Collections.emptyList(), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "child activated", "component setPhase B"), _events); + _lifetime.setPhase(Phase.C); + Assert.assertEquals(Arrays.asList("component activated", "child activated","component setPhase B", "component setPhase C", "child deactivated", "component deactivated"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "child activated", "component setPhase B", "component setPhase C", "child deactivated", "component deactivated"), _events); + } + @Test + public void testEarlyShutdown() + { + _lifetime.register(new LoggingComponent(_events, "component"), Arrays.asList(Phase.B, Phase.C)); + _lifetime.start(Phase.A); + Assert.assertEquals(Collections.emptyList(), _events); + _lifetime.setPhase(Phase.B); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase B"), _events); + _lifetime.end(); + Assert.assertEquals(Arrays.asList("component activated", "component setPhase B", "component deactivated"), _events); + + } + enum Phase + { + A, + B, + C, + ; + } +} diff --git a/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/SimpleLifetimeTest.java b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/SimpleLifetimeTest.java new file mode 100644 index 000000000..061a1decc --- /dev/null +++ b/Plugins/Mineplex.Core/test/mineplex/core/lifetimes/SimpleLifetimeTest.java @@ -0,0 +1,41 @@ +package mineplex.core.lifetimes; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SimpleLifetimeTest +{ + private final SimpleLifetime _lifetime = new SimpleLifetime(); + private final List _events = new ArrayList<>(); + @Test + public void testAddition() + { + _lifetime.register(new LoggingComponent(_events,"a")); + _lifetime.start(); + _lifetime.end(); + Assert.assertEquals(_events, Arrays.asList("a activated", "a deactivated")); + } + @Test + public void testLateAddition() + { + _lifetime.start(); + _lifetime.register(new LoggingComponent(_events,"a")); + _lifetime.end(); + Assert.assertEquals(_events, Arrays.asList("a activated", "a deactivated")); + } + @Test + public void testActivationOrder() + { + _lifetime.register(new LoggingComponent(_events,"a")); + _lifetime.register(new LoggingComponent(_events,"b")); + _lifetime.start(); + _lifetime.end(); + Assert.assertEquals(_events, Arrays.asList("a activated", "b activated", "b deactivated", "a deactivated")); + } + + +} diff --git a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java index 178f4bbf0..f9bf43da3 100644 --- a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java +++ b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java @@ -54,7 +54,7 @@ public class Enjin extends MiniPlugin implements CommandExecutor _clientManager = clientManager; _donationManager = donationManager; _inventoryManager = inventoryManager; - _punish = new Punish(plugin, plugin.GetWebServerAddress(), clientManager); + _punish = new Punish(plugin, clientManager); _purchaseManager = new PurchaseManager(plugin); _powerPlayClubRepository = new PowerPlayClubRepository(plugin, clientManager, donationManager); diff --git a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/EnjinTranslator.java b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/EnjinTranslator.java index bdfb4cac3..60451cab7 100644 --- a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/EnjinTranslator.java +++ b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/EnjinTranslator.java @@ -1,5 +1,6 @@ package mineplex.enjinTranslator; +import mineplex.core.common.Constants; import mineplex.core.account.CoreClientManager; import mineplex.core.command.CommandCenter; import mineplex.core.donation.DonationManager; @@ -11,20 +12,18 @@ import static mineplex.core.Managers.require; public class EnjinTranslator extends JavaPlugin { - private String WEB_CONFIG = "webServer"; - @Override public void onEnable() { - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); //Static Modules CommandCenter.Initialize(this); //Core Modules - CoreClientManager clientManager = new CoreClientManager(this, GetWebServerAddress()); + CoreClientManager clientManager = new CoreClientManager(this); CommandCenter.Instance.setClientManager(clientManager); DonationManager donationManager = require(DonationManager.class); @@ -37,8 +36,7 @@ public class EnjinTranslator extends JavaPlugin public String GetWebServerAddress() { - String webServerAddress = getConfig().getString(WEB_CONFIG); - return webServerAddress; + return getConfig().getString(Constants.WEB_CONFIG_KEY); } } diff --git a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/TempRepository.java b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/TempRepository.java index 12c20bcff..91ddd00c9 100644 --- a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/TempRepository.java +++ b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/TempRepository.java @@ -4,10 +4,11 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class TempRepository extends MinecraftRepository +public class TempRepository extends RepositoryBase { private static String INSERT_CLIENT_INVENTORY = "INSERT INTO accountInventory (accountId, itemId, count) SELECT accounts.id, 5, ? FROM accounts WHERE accounts.name = ? ON DUPLICATE KEY UPDATE count=count + VALUES(count);"; diff --git a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/purchase/data/PurchaseRepository.java b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/purchase/data/PurchaseRepository.java index 946b00303..ba90e4807 100644 --- a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/purchase/data/PurchaseRepository.java +++ b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/purchase/data/PurchaseRepository.java @@ -9,12 +9,13 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnBoolean; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class PurchaseRepository extends MinecraftRepository +public class PurchaseRepository extends RepositoryBase { private static String INSERT_ACCOUNT_PURCHASE = "INSERT INTO accountPurchases (accountId, packageId, amount, date, success) VALUES (?, ?, ?, now(), ?);"; diff --git a/Plugins/Mineplex.Game.Clans.Core/src/mineplex/game/clans/core/repository/ClanRepository.java b/Plugins/Mineplex.Game.Clans.Core/src/mineplex/game/clans/core/repository/ClanRepository.java index 26b4e0926..f0078e3d7 100644 --- a/Plugins/Mineplex.Game.Clans.Core/src/mineplex/game/clans/core/repository/ClanRepository.java +++ b/Plugins/Mineplex.Game.Clans.Core/src/mineplex/game/clans/core/repository/ClanRepository.java @@ -13,6 +13,7 @@ import mineplex.core.common.util.Callback; import mineplex.core.common.util.NautHashMap; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.Column; import mineplex.serverdata.database.column.ColumnBoolean; @@ -36,7 +37,7 @@ import org.jooq.DSLContext; import static mineplex.database.Tables.*; import static org.jooq.impl.DSL.*; -public class ClanRepository extends MinecraftRepository +public class ClanRepository extends RepositoryBase { private static String CREATE_CLAN_TABLE = "CREATE TABLE IF NOT EXISTS clans (id INT NOT NULL AUTO_INCREMENT, serverId INT NOT NULL, name VARCHAR(100), description VARCHAR(140), home VARCHAR(140), admin BIT(1), dateCreated DATETIME, lastOnline DATETIME, energy INT, PRIMARY KEY (id), INDEX clanName (name));"; private static String CREATE_ACCOUNT_CLAN_TABLE = "CREATE TABLE IF NOT EXISTS accountClan (id INT NOT NULL AUTO_INCREMENT, accountId INT, clanId INT, clanRole VARCHAR(140), PRIMARY KEY (id), FOREIGN KEY (accountId) REFERENCES accounts(id), FOREIGN KEY (clanId) REFERENCES clans(id), INDEX clanIdIndex (clanId));"; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 797159206..77d03be9b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -10,6 +10,7 @@ import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.plugin.java.JavaPlugin; import org.spigotmc.SpigotConfig; +import mineplex.core.common.Constants; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; import mineplex.core.TimingsFix; @@ -77,7 +78,6 @@ import static mineplex.core.Managers.require; public class Clans extends JavaPlugin { public static final String MAP = "Season 2"; - private String WEB_CONFIG = "webServer"; // Modules private CoreClientManager _clientManager; @@ -90,17 +90,15 @@ public class Clans extends JavaPlugin Bukkit.setSpawnRadius(0); // Configs - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); - String webServerAddress = getConfig().getString(WEB_CONFIG); - // Logger.initialize(this); // Static Modules CommandCenter.Initialize(this); - _clientManager = new CoreClientManager(this, webServerAddress); + _clientManager = new CoreClientManager(this); CommandCenter.Instance.setClientManager(_clientManager); require(TimingsFix.class); @@ -132,12 +130,12 @@ public class Clans extends JavaPlugin Give.Initialize(this); Teleport teleport = new Teleport(this, _clientManager); - Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); + Portal portal = new Portal(); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager); - Punish punish = new Punish(this, webServerAddress, _clientManager); + Punish punish = new Punish(this, _clientManager); DisguiseManager disguiseManager = require(DisguiseManager.class); Creature creature = new Creature(this); @@ -254,7 +252,7 @@ public class Clans extends JavaPlugin GearManager customGear = new GearManager(this, packetHandler, _clientManager, _donationManager); HologramManager hologram = new HologramManager(this, packetHandler); - _clansManager = new ClansManager(this, clansBans, serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, inventory, webServerAddress); + _clansManager = new ClansManager(this, clansBans, serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, inventory); new Recipes(this); new Farming(this); new BuildingShop(_clansManager, _clientManager, _donationManager); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 3fb75c743..864afce86 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -72,6 +72,8 @@ import mineplex.core.movement.Movement; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; import mineplex.core.personalServer.PersonalServerManager; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; @@ -250,7 +252,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati // Spawn area - public ClansManager(JavaPlugin plugin, ClansBanManager clansBans, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, InventoryManager inventoryManager, String webServerAddress) + public ClansManager(JavaPlugin plugin, ClansBanManager clansBans, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, InventoryManager inventoryManager) { super("Clans Manager", plugin); @@ -286,7 +288,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati _worldEvent = new WorldEventManager(plugin, this, _damageManager, _lootManager, blockRestore, _clanRegions, null); - _taskManager = new TaskManager(plugin, _clientManager, webServerAddress); + _taskManager = new TaskManager(plugin, _clientManager); ClanTips = new ClanTips(plugin, this, preferencesManager); @@ -339,8 +341,8 @@ public class ClansManager extends MiniClientPluginimplements IRelati itemIgnore.add("Proximity Explosive"); itemIgnore.add("Proximity Zapper"); - ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, _damageManager, energy, fire, _projectileManager, webServerAddress, itemIgnore); - SkillFactory skillManager = new SkillFactory(plugin, _damageManager, this, _combatManager, _condition, _projectileManager, _disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy, webServerAddress); + ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, _damageManager, energy, fire, _projectileManager, itemIgnore); + SkillFactory skillManager = new SkillFactory(plugin, _damageManager, this, _combatManager, _condition, _projectileManager, _disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy); skillManager.RemoveSkill("Dwarf Toss", "Block Toss"); skillManager.removeSkill("Whirlwind Axe"); skillManager.removeSkill("Shield Smash"); @@ -378,7 +380,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati }); _worldEvent.setFactory(skillManager); - _classManager = new ClassManager(plugin, _clientManager, donationManager, skillManager, itemFactory, webServerAddress); + _classManager = new ClassManager(plugin, _clientManager, donationManager, skillManager, itemFactory); // Register redis based server commands ServerCommandManager.getInstance().registerCommandType(ClanDeleteCommand.class, new ClanDeleteCommandHandler()); @@ -1269,7 +1271,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati { if (event.getMessage().toLowerCase().equals("/lobby") || event.getMessage().toLowerCase().equals("/hub") || event.getMessage().toLowerCase().equals("/leave")) { - Portal.getInstance().sendPlayerToServer(event.getPlayer(), "ClansHub"); + Portal.getInstance().sendPlayerToGenericServer(event.getPlayer(), GenericServer.CLANS_HUB, Intent.PLAYER_REQUEST); event.setCancelled(true); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java index 5360b625c..3d5c798cc 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java @@ -4,6 +4,7 @@ import mineplex.core.Managers; import mineplex.core.account.CoreClientManager; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import org.bukkit.plugin.java.JavaPlugin; @@ -14,7 +15,7 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; -public class ClansBanRepository extends MinecraftRepository +public class ClansBanRepository extends RepositoryBase { private static final String BAN_PLAYER = "INSERT INTO clanBans (uuid, admin, reason, banTime, unbanTime, permanent, removed) VALUES (?, ?, ?, ?, ?, ?, ?);"; private static final String REMOVE_BAN = "UPDATE clanBans SET removed = 1 WHERE id = ?;"; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerRepository.java index 8f3eec8f2..8d236bcd9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerRepository.java @@ -13,13 +13,14 @@ import mineplex.core.database.MinecraftRepository; import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClansManager; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; /** * Database repository class for banners */ -public class BannerRepository extends MinecraftRepository +public class BannerRepository extends RepositoryBase { private static final String CREATE = "CREATE TABLE IF NOT EXISTS clanBanners (clanId INT NOT NULL," + "baseColor VARCHAR(15)," diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java index fc736b4f8..ba36f3406 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java @@ -24,7 +24,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemHeldEvent; @@ -32,13 +31,10 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.world.ChunkLoadEvent; -import org.bukkit.event.world.ChunkUnloadEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; -import com.google.common.base.Objects; import com.google.common.collect.HashMultiset; import com.google.common.collect.Iterables; import com.google.common.collect.Multisets; @@ -46,7 +42,7 @@ import com.google.common.collect.Multisets; import mineplex.core.MiniPlugin; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.portal.ServerTransferEvent; +import mineplex.core.portal.events.ServerTransferEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/repository/ClanNameBlacklistRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/repository/ClanNameBlacklistRepository.java index 979b90e03..662900a31 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/repository/ClanNameBlacklistRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/repository/ClanNameBlacklistRepository.java @@ -10,10 +10,11 @@ import mineplex.core.common.util.Callback; import mineplex.core.database.MinecraftRepository; import mineplex.game.clans.clans.nameblacklist.ClansBlacklist; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnTimestamp; import mineplex.serverdata.database.column.ColumnVarChar; -public class ClanNameBlacklistRepository extends MinecraftRepository +public class ClanNameBlacklistRepository extends RepositoryBase { private static final String CREATE = "CREATE TABLE IF NOT EXISTS clanNameBlacklist (" + "clanName VARCHAR(20) NOT NULL, " diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/PortalRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/PortalRepository.java index 852ee779a..789de1e55 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/PortalRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/PortalRepository.java @@ -3,6 +3,7 @@ package mineplex.game.clans.clans.nether; import mineplex.core.common.util.UtilWorld; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnBoolean; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; @@ -12,7 +13,7 @@ import org.bukkit.plugin.java.JavaPlugin; /** * Database repository class for nether portals */ -public class PortalRepository extends MinecraftRepository +public class PortalRepository extends RepositoryBase { private static final String CREATE = "CREATE TABLE IF NOT EXISTS clansNetherPortals (id INT NOT NULL AUTO_INCREMENT," + "cornerOne VARCHAR(30)," diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/OutpostRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/OutpostRepository.java index 1b4f57a41..e6b53a15d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/OutpostRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/OutpostRepository.java @@ -18,12 +18,13 @@ import mineplex.game.clans.clans.siege.outpost.OutpostState; import mineplex.game.clans.clans.siege.outpost.OutpostType; import mineplex.game.clans.clans.siege.repository.tokens.OutpostToken; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnByte; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnTimestamp; import mineplex.serverdata.database.column.ColumnVarChar; -public class OutpostRepository extends MinecraftRepository +public class OutpostRepository extends RepositoryBase { private OutpostManager _manager; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java index ac68d6ef9..8f69a596d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java @@ -16,11 +16,12 @@ import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.siege.SiegeManager; import mineplex.game.clans.clans.siege.repository.tokens.SiegeWeaponToken; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnTimestamp; import mineplex.serverdata.database.column.ColumnVarChar; -public class SiegeWeaponRepository extends MinecraftRepository +public class SiegeWeaponRepository extends RepositoryBase { private static final String CREATE = "CREATE TABLE IF NOT EXISTS clansSiegeWeapons (uniqueId INT NOT NULL," + "serverId INT NOT NULL," diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index fab2296fb..9a558b8c5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -1,14 +1,9 @@ package mineplex.game.clans.clans.siege.weapon; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; import org.bukkit.entity.Slime; @@ -41,13 +36,11 @@ import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClansGame; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.siege.SiegeManager; -import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent; import mineplex.game.clans.clans.siege.repository.tokens.SiegeWeaponToken; import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile; import mineplex.game.clans.clans.siege.weapon.util.AccessRule; import mineplex.game.clans.clans.siege.weapon.util.AccessType; import mineplex.game.clans.clans.siege.weapon.util.WeaponStateInfo; -import mineplex.game.clans.core.repository.ClanTerritory; public class Cannon extends SiegeWeapon { @@ -324,7 +317,7 @@ public class Cannon extends SiegeWeapon Slime filler = _location.getWorld().spawn(_location.clone(), Slime.class); UtilEnt.silence(filler, true); - UtilEnt.Vegetate(filler); + UtilEnt.vegetate(filler); filler.setSize(-1); filler.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false)); @@ -334,7 +327,7 @@ public class Cannon extends SiegeWeapon Slime playerMount = _location.getWorld().spawn(_location.clone(), Slime.class); UtilEnt.silence(playerMount, true); - UtilEnt.Vegetate(playerMount); + UtilEnt.vegetate(playerMount); playerMount.setSize(-1); playerMount.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false)); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/repository/FieldRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/repository/FieldRepository.java index 131f591fd..5b4de59bd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/repository/FieldRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/repository/FieldRepository.java @@ -9,13 +9,14 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnByte; import mineplex.serverdata.database.column.ColumnDouble; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class FieldRepository extends MinecraftRepository +public class FieldRepository extends RepositoryBase { private static String ALL_STRING = "ALL"; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java index 1d0dd2814..60eac7a0f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java @@ -195,7 +195,7 @@ public class CombatLogNPC skel.setMetadata("CombatLogNPC", new FixedMetadataValue(ClansManager.getInstance().getPlugin(), player.getUniqueId().toString())); skel.teleport(spawnLoc); skel.setHealth(_spawnHealth); - UtilEnt.Vegetate(skel); + UtilEnt.vegetate(skel); UtilEnt.silence(skel, true); skel.getEquipment().setHelmet(player.getInventory().getHelmet()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/restart/RestartManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/restart/RestartManager.java index f2ff39fdc..15a29eb5c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/restart/RestartManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/restart/RestartManager.java @@ -10,9 +10,12 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.slack.SlackAPI; import mineplex.core.slack.SlackMessage; @@ -38,7 +41,7 @@ public class RestartManager extends MiniPlugin super("Restart Manager", plugin); _serverName = plugin.getConfig().getString("serverstatus.name"); - _testServer = plugin.getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); + _testServer = UtilServer.isTestServer(); int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if (inRestartZone(hour)) @@ -143,7 +146,7 @@ public class RestartManager extends MiniPlugin if (System.currentTimeMillis() >= _restartTime) { _restarting = true; - Portal.getInstance().sendAllPlayers("ClansHub"); + Portal.getInstance().sendAllPlayersToGenericServer(GenericServer.CLANS_HUB, Intent.KICK); runSyncLater(() -> { if (!_testServer) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/travel/TravelPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/travel/TravelPage.java index 6140d1ad2..25b584e64 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/travel/TravelPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/travel/TravelPage.java @@ -15,6 +15,8 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilBlock; import mineplex.core.donation.DonationManager; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.shop.item.IButton; import mineplex.core.shop.page.ShopPageBase; @@ -138,7 +140,7 @@ public class TravelPage extends ShopPageBase { public void onClick(Player player, ClickType clickType) { - Portal.getInstance().sendPlayerToServer(player, "Lobby"); + Portal.getInstance().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.PLAYER_REQUEST); } }); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/FinishCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/FinishCommand.java index e0e32c1dc..f402cc601 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/FinishCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/FinishCommand.java @@ -4,6 +4,7 @@ import org.bukkit.entity.Player; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; +import mineplex.core.common.util.UtilServer; import mineplex.game.clans.tutorial.TutorialManager; public class FinishCommand extends CommandBase @@ -16,8 +17,7 @@ public class FinishCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { - boolean testServer = Plugin.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); - if (_commandCenter.GetClientManager().hasRank(caller, testServer ? Rank.ALL : Rank.JNR_DEV)) + if (_commandCenter.GetClientManager().hasRank(caller, UtilServer.isTestServer() ? Rank.ALL : Rank.JNR_DEV)) { Plugin.finishTutorial(caller); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/TutorialCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/TutorialCommand.java index f13e5bfde..137b4135f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/TutorialCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/command/TutorialCommand.java @@ -4,6 +4,7 @@ import mineplex.core.command.MultiCommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.game.clans.tutorial.TutorialManager; import org.bukkit.entity.Player; @@ -26,8 +27,7 @@ public class TutorialCommand extends MultiCommandBase @Override public void Execute(Player caller, String[] args) { - boolean testServer = Plugin.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); - if (_commandCenter.GetClientManager().hasRank(caller, testServer ? Rank.ALL : Rank.JNR_DEV)) + if (_commandCenter.GetClientManager().hasRank(caller, UtilServer.isTestServer() ? Rank.ALL : Rank.JNR_DEV)) { super.Execute(caller, args); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/AttackEnemyObjective.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/AttackEnemyObjective.java index 2b6449d02..2bf5e0555 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/AttackEnemyObjective.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/AttackEnemyObjective.java @@ -94,7 +94,7 @@ public class AttackEnemyObjective extends OrderedObjective shooter.setCustomName(name); shooter.setCustomNameVisible(true); - UtilEnt.Vegetate(shooter); + UtilEnt.vegetate(shooter); shooter.teleport(location); shooter.setHealth(shooter.getMaxHealth()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/repository/TutorialRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/repository/TutorialRepository.java index fa25b8465..a81ababe2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/repository/TutorialRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/repository/TutorialRepository.java @@ -7,10 +7,11 @@ import mineplex.core.common.util.EnclosedObject; import mineplex.core.common.util.UUIDFetcher; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class TutorialRepository extends MinecraftRepository +public class TutorialRepository extends RepositoryBase { private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS clansTutorial (uuid VARCHAR(36), timesPlayed INT, PRIMARY KEY (uuid));"; private static final String GET = "SELECT * FROM clansTutorial WHERE uuid = ?;"; diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerShop.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerShop.java index 23065a997..e56cdcda7 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerShop.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerShop.java @@ -29,7 +29,7 @@ public class ClansServerShop extends ShopBase @Override protected boolean canOpenShop(Player player) { - Party party = getPlugin().getPartyManager().getParty(player); + Party party = getPlugin().getPartyManager().getPartyByPlayer(player); if (party != null) { diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansTransferManager.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansTransferManager.java index 982f4904d..d98215e77 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansTransferManager.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansTransferManager.java @@ -19,6 +19,7 @@ import mineplex.core.npc.event.NpcInteractEntityEvent; import mineplex.core.party.Lang; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.recharge.Recharge; import mineplex.core.shop.page.ShopPageBase; @@ -124,21 +125,10 @@ public class ClansTransferManager extends MiniDbClientPlugin */ public void selectServer(Player player, ServerInfo serverInfo) { - Party party = _party.getParty(player); - if (party != null) - { - if(!party.getOwner().equalsIgnoreCase(player.getName())) - { - Lang.NOT_OWNER_SERVER.send(player); - return; - } - _party.getJoinManager().requestServerJoin(serverInfo.Name, party); - return; - } player.leaveVehicle(); player.eject(); - _portal.sendPlayerToServer(player, serverInfo.Name); + _portal.sendPlayerToServer(player, serverInfo.Name, Intent.PLAYER_REQUEST); } @EventHandler @@ -192,7 +182,7 @@ public class ClansTransferManager extends MiniDbClientPlugin UtilAction.velocity(player, UtilAlg.getTrajectory(player.getLocation(), _hub.GetSpawn()), 1, true, 0.5, 0, 1.0, true); return; } - if (_party.getParty(player) != null) + if (_party.getPartyByPlayer(player) != null) { player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, .6f); player.sendMessage(F.main("Party", "You cannot join Clans while in a party.")); @@ -235,7 +225,7 @@ public class ClansTransferManager extends MiniDbClientPlugin } if (event.getNpc().getName().contains("Return")) { - _portal.sendToHub(event.getPlayer(), "Returning to Mineplex!"); + _portal.sendToHub(event.getPlayer(), "Returning to Mineplex!", Intent.PLAYER_REQUEST); } } @@ -254,7 +244,7 @@ public class ClansTransferManager extends MiniDbClientPlugin } if (event.getNpc().getName().contains("Return") && Recharge.Instance.use(player, "Return to Mineplex", 1000, false, false)) { - _portal.sendToHub(player, "Returning to Mineplex!"); + _portal.sendToHub(player, "Returning to Mineplex!", Intent.PLAYER_REQUEST); } } diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java index 8357a531b..1fa316aae 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java @@ -3,7 +3,6 @@ package mineplex.clanshub; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -99,6 +98,8 @@ import mineplex.core.pet.PetManager; import mineplex.core.playerCount.PlayerCountManager; import mineplex.core.playwire.PlayWireManager; import mineplex.core.poll.PollManager; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.preferences.Preference; import mineplex.core.preferences.PreferencesManager; @@ -293,7 +294,7 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter { public void run() { - _portal.sendAllPlayers("Lobby"); + _portal.sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() { @@ -332,7 +333,7 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter { public void run() { - _portal.sendPlayerToServer(event.getPlayer(), "ClansHub"); + _portal.sendPlayerToGenericServer(event.getPlayer(), GenericServer.CLANS_HUB, Intent.KICK); } }); @@ -477,7 +478,7 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter //Party Chat if (event.getMessage().charAt(0) == '#') { - Party party = _partyManager.getParty(player); + Party party = _partyManager.getPartyByPlayer(player); if (party != null) { event.getRecipients().clear(); @@ -485,13 +486,7 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter 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); - } + event.getRecipients().addAll(party.getMembers()); } else { diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/salesannouncements/SalesAnnouncementRepository.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/salesannouncements/SalesAnnouncementRepository.java index 3ff006b7a..6876ba6f2 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/salesannouncements/SalesAnnouncementRepository.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/salesannouncements/SalesAnnouncementRepository.java @@ -11,11 +11,12 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.Callback; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnBoolean; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class SalesAnnouncementRepository extends MinecraftRepository +public class SalesAnnouncementRepository extends RepositoryBase { private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS salesAnnouncements (id INT NOT NULL AUTO_INCREMENT, ranks VARCHAR(250), message VARCHAR(256), enabled BOOL, PRIMARY KEY (id));"; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 4a0bec73e..01e74bb2c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -89,6 +89,8 @@ import mineplex.core.pet.PetManager; import mineplex.core.playerCount.PlayerCountManager; import mineplex.core.playwire.PlayWireManager; import mineplex.core.poll.PollManager; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.preferences.Preference; import mineplex.core.preferences.PreferencesManager; @@ -100,6 +102,7 @@ import mineplex.core.stats.StatsManager; import mineplex.core.status.ServerStatusManager; import mineplex.core.task.TaskManager; import mineplex.core.thank.ThankManager; +import mineplex.core.titles.Titles; import mineplex.core.treasure.TreasureManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -422,7 +425,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess { public void run() { - _portal.sendAllPlayers("Lobby"); + _portal.sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() { @@ -483,7 +486,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess { public void run() { - _portal.sendPlayerToServer(event.getPlayer(), "Lobby"); + _portal.sendPlayerToGenericServer(event.getPlayer(), GenericServer.HUB, Intent.KICK); } }); @@ -498,10 +501,8 @@ public class HubManager extends MiniClientPlugin implements IChatMess public void AdminOP(PlayerJoinEvent event) { // Give developers operator on their servers - boolean testServer = _plugin.getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); - Rank minimum = Rank.OWNER; - if (testServer) + if (UtilServer.isTestServer() || UtilServer.isDevServer()) { minimum = Rank.JNR_DEV; } @@ -555,6 +556,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess //only give it in the hub player.getInventory().setItem(PartyManager.INTERFACE_SLOT, PartyManager.INTERFACE_ITEM); + require(Titles.class).giveBook(player, false); } @EventHandler @@ -621,7 +623,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess //Party Chat if (event.getMessage().charAt(0) == '@') { - Party party = _partyManager.getParty(player); + Party party = _partyManager.getPartyByPlayer(player); if (party != null) { event.getRecipients().clear(); @@ -629,13 +631,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess 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 (String uuid: party.getMembers()) - { - Player other = Bukkit.getPlayer(uuid); - - if (other != null) - event.getRecipients().add(other); - } + event.getRecipients().addAll(party.getMembers()); } else { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/mail/MailRepository.java b/Plugins/Mineplex.Hub/src/mineplex/hub/mail/MailRepository.java index 5668be269..e4440d29c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/mail/MailRepository.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/mail/MailRepository.java @@ -10,12 +10,13 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; import mineplex.database.Tables; import mineplex.database.tables.records.MailRecord; +import mineplex.serverdata.database.RepositoryBase; import org.jooq.DSLContext; import org.jooq.Result; import org.jooq.impl.DSL; -public class MailRepository extends MinecraftRepository +public class MailRepository extends RepositoryBase { private MailManager _manager; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HalloweenSpookinessManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HalloweenSpookinessManager.java index 3f033bcd6..10e7b7068 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HalloweenSpookinessManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/HalloweenSpookinessManager.java @@ -113,7 +113,7 @@ public class HalloweenSpookinessManager extends MiniPlugin Skeleton skeleton = loc.getWorld().spawn(loc, Skeleton.class); UtilEnt.silence(skeleton, true); - UtilEnt.Vegetate(skeleton); + UtilEnt.vegetate(skeleton); UtilEnt.ghost(skeleton, true, false); skeleton.getEquipment().setItemInHand(ItemStackFactory.Instance.CreateStack(0)); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java index cdb17aa96..73ef20d70 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java @@ -159,7 +159,7 @@ public class SoccerManager extends MiniPlugin _ball = mid.getWorld().spawn(mid, Slime.class); _ball.setSize(2); - UtilEnt.Vegetate(_ball); + UtilEnt.vegetate(_ball); UtilEnt.ghost(_ball, true, false); _ballVel = new Vector(0,-0.1,0); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/basketball/BasketballGame.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/basketball/BasketballGame.java index 0b5660ee7..122cd21be 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/basketball/BasketballGame.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/basketball/BasketballGame.java @@ -97,7 +97,7 @@ public class BasketballGame implements Listener { _velocity = -7; Entity e = loc.getWorld().spawnEntity(loc, EntityType.SLIME); - UtilEnt.Vegetate(e, true); + UtilEnt.vegetate(e, true); UtilEnt.ghost(e, true, false); ((Slime)e).setSize(1); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/salesannouncements/SalesAnnouncementRepository.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/salesannouncements/SalesAnnouncementRepository.java index ffe83b83a..844a3b5ee 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/salesannouncements/SalesAnnouncementRepository.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/salesannouncements/SalesAnnouncementRepository.java @@ -11,11 +11,12 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.Callback; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.column.ColumnBoolean; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; -public class SalesAnnouncementRepository extends MinecraftRepository +public class SalesAnnouncementRepository extends RepositoryBase { private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS salesAnnouncements (id INT NOT NULL AUTO_INCREMENT, ranks VARCHAR(250), message VARCHAR(256), enabled BOOL, PRIMARY KEY (id));"; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java index 48efd5a9d..52e3b0bdf 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java @@ -8,14 +8,13 @@ import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.page.ShopPageBase; import mineplex.hub.queue.PlayerMatchStatus; import mineplex.hub.queue.QueueManager; -import org.bukkit.Bukkit; + import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import java.util.List; -import java.util.stream.Collectors; public class QueuePage extends ShopPageBase { @@ -130,15 +129,15 @@ public class QueuePage extends ShopPageBase private void queuePlayer(int gameType, Player player) { - Party party = getPlugin().getPartyManager().getParty(player); + Party party = getPlugin().getPartyManager().getPartyByPlayer(player); if(party == null) { getPlugin().queuePlayer(gameType, player); return; } - if(party.getOwner().equalsIgnoreCase(player.getName())) + if(party.getOwnerName().equalsIgnoreCase(player.getName())) { - List players = party.getMembers().stream().map(Bukkit::getPlayer).collect(Collectors.toList()); + List players = party.getMembers(); getPlugin().queuePlayer(gameType, players.toArray(new Player[players.size()])); } buildPage(); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java index 7f1b163fc..5d65e8c20 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java @@ -29,22 +29,6 @@ public class QueueShop extends ShopBase return new QueuePage(getPlugin(), this, getClientManager(), getDonationManager(), " " + ChatColor.UNDERLINE + "Queuer 9001", player); } - @Override - protected boolean canOpenShop(Player player) - { - Party party = getPlugin().getPartyManager().getParty(player); - - if (party != null && !player.getName().equalsIgnoreCase(party.getOwner())) - { - player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, .6f); - player.sendMessage(F.main("Party", "Only Party Leaders can join games.")); - player.sendMessage(F.main("Party", "Type " + C.cGreen + "/party leave" + C.cGray + " if you wish to leave your party.")); - return false; - } - - return true; - } - @EventHandler public void UpdatePages(UpdateEvent event) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 5d5816056..1b98fc853 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -20,6 +20,7 @@ import mineplex.core.party.Lang; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; import mineplex.core.party.event.PartySelectServerEvent; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.shop.ShopBase; import mineplex.core.status.ServerStatusManager; @@ -453,21 +454,10 @@ public class ServerManager extends MiniPlugin implements BrawlShopProvider public void selectServer(Player player, ServerInfo serverInfo) { - Party party = _partyManager.getParty(player); - if(party != null) - { - if(!party.getOwner().equalsIgnoreCase(player.getName())) - { - Lang.NOT_OWNER_SERVER.send(player); - return; - } - _partyManager.getJoinManager().requestServerJoin(serverInfo.Name, party); - return; - } player.leaveVehicle(); player.eject(); - _portal.sendPlayerToServer(player, serverInfo.Name); + _portal.sendPlayerToServer(player, serverInfo.Name, Intent.PLAYER_REQUEST); } /** diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/MinestrikeServerTypePage.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/MinestrikeServerTypePage.java new file mode 100644 index 000000000..cebdda3ca --- /dev/null +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/MinestrikeServerTypePage.java @@ -0,0 +1,58 @@ + +package mineplex.hub.server.ui; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.hub.server.ServerManager; +import mineplex.serverdata.data.ServerGroup; + +public class MinestrikeServerTypePage extends ShopPageBase +{ + + private ServerGroup _serverGroup; + + public MinestrikeServerTypePage(ServerManager plugin, ServerNpcShop shop, CoreClientManager clientManager, + DonationManager donationManager, Player player, ServerGroup serverGroup) + { + super(plugin, shop, clientManager, donationManager, serverGroup.getServerNpcName(), player, 27); + + _serverGroup = serverGroup; + + buildPage(); + } + + @Override + protected void buildPage() + { + setItem(12, new ItemBuilder(Material.SKULL_ITEM, 1, (byte) 3).setTitle(C.Reset + C.cYellow + "MineStrike Classic") + .addLore(new String[] + { + C.Reset + "", + C.Reset + C.cGreen + "Click to Play", + }).build()); + + setItem(14, new ItemBuilder(Material.SKULL_ITEM, 2, (byte) 3).setTitle(C.Reset + C.cYellow + "StrikeGames") + .addLore(new String[] + { + C.Reset + "", + C.Reset + C.cGray + "Survival Games with MineStrike weapons", + C.Reset + "", + C.Reset + C.cGreen + "Click to Play" + }).build()); + + getButtonMap().put(12, (player, __) -> getShop().openPageForPlayer(player, new ServerNpcPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), "MineStrike", player, "MS"))); + getButtonMap().put(14, (player, __) -> getShop().openPageForPlayer(player, new ServerNpcPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), "StrikeGames", player, "MS2"))); + } + + public void Update() + { + getButtonMap().clear(); + buildPage(); + } +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java index 491f3ff0e..735066e80 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java @@ -1,16 +1,13 @@ package mineplex.hub.server.ui; +import org.bukkit.entity.Player; + import mineplex.core.account.CoreClientManager; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; import mineplex.core.donation.DonationManager; -import mineplex.core.party.Party; import mineplex.core.shop.ShopBase; import mineplex.core.shop.page.ShopPageBase; import mineplex.hub.server.ServerManager; import mineplex.serverdata.data.ServerGroup; -import org.bukkit.Sound; -import org.bukkit.entity.Player; public class ServerNpcShop extends ShopBase { @@ -26,31 +23,20 @@ public class ServerNpcShop extends ShopBase @Override protected ShopPageBase> buildPagesFor(Player player) { - if (_serverGroup.getPrefix().equalsIgnoreCase("SSM") || _serverGroup.getPrefix().equalsIgnoreCase("SKY") || _serverGroup.getPrefix().equalsIgnoreCase("HG")) + switch (_serverGroup.getPrefix().toUpperCase()) { - return new ServerTypePage(getPlugin(), this, getClientManager(), getDonationManager(), player, _serverGroup); - } - else - { - return new ServerNpcPage(getPlugin(), this, getClientManager(), getDonationManager(), _serverGroup.getServerNpcName(), player, _serverGroup.getPrefix()); - } - - } + case "SSM": + case "SKY": + case "HG": + return new ServerTypePage(getPlugin(), this, getClientManager(), getDonationManager(), player, _serverGroup); - @Override - protected boolean canOpenShop(Player player) - { - Party party = getPlugin().getPartyManager().getParty(player); + case "MS": + return new MinestrikeServerTypePage(getPlugin(), this, getClientManager(), getDonationManager(), player, _serverGroup); - if (party != null && !player.getName().equalsIgnoreCase(party.getOwner())) - { - player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, .6f); - player.sendMessage(F.main("Party", "Only Party Leaders can join games.")); - player.sendMessage(F.main("Party", "Type " + C.cGreen + "/party leave" + C.cGray + " if you wish to leave your party.")); - return false; + default: + return new ServerNpcPage(getPlugin(), this, getClientManager(), getDonationManager(), _serverGroup.getServerNpcName(), player, _serverGroup.getPrefix()); } - - return true; + } public void UpdatePages() diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClanMoveServerShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClanMoveServerShop.java index 84f99ce39..ad1cf8335 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClanMoveServerShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClanMoveServerShop.java @@ -36,7 +36,7 @@ public class ClanMoveServerShop extends ShopBase @Override protected boolean canOpenShop(Player player) { - Party party = getPlugin().getPartyManager().getParty(player); + Party party = getPlugin().getPartyManager().getPartyByPlayer(player); if (party != null) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClansServerShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClansServerShop.java index 7ab0eb1b6..34238b6ba 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClansServerShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/clans/ClansServerShop.java @@ -27,7 +27,7 @@ public class ClansServerShop extends ShopBase @Override protected boolean canOpenShop(Player player) { - Party party = getPlugin().getPartyManager().getParty(player); + Party party = getPlugin().getPartyManager().getPartyByPlayer(player); if (party != null) { diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java index 4afa557f3..d54b4149b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java @@ -49,7 +49,7 @@ public class ClassManager extends MiniClientPlugin implements IClas private ConcurrentHashMap> _messageSuppressed; public ClassManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, - SkillFactory skillFactory, ItemFactory itemFactory, String webAddress) + SkillFactory skillFactory, ItemFactory itemFactory) { super("Class Manager", plugin); @@ -58,7 +58,7 @@ public class ClassManager extends MiniClientPlugin implements IClas _donationManager = donationManager; _skillFactory = skillFactory; _itemFactory = itemFactory; - _repository = new ClassRepository(webAddress); + _repository = new ClassRepository(); _classes = new HashMap(); _classSalesPackageIdMap = new HashMap(); _messageSuppressed = new ConcurrentHashMap>(); @@ -67,7 +67,7 @@ public class ClassManager extends MiniClientPlugin implements IClas } public ClassManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, GadgetManager gadgetManager, - SkillFactory skillFactory, ItemFactory itemFactory, String webAddress) + SkillFactory skillFactory, ItemFactory itemFactory) { super("Class Manager", plugin); @@ -77,7 +77,7 @@ public class ClassManager extends MiniClientPlugin implements IClas _gadgetManager = gadgetManager; _skillFactory = skillFactory; _itemFactory = itemFactory; - _repository = new ClassRepository(webAddress); + _repository = new ClassRepository(); _classes = new HashMap(); _classSalesPackageIdMap = new HashMap(); _messageSuppressed = new ConcurrentHashMap>(); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/ClassRepository.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/ClassRepository.java index 829315b8a..5de148ac0 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/ClassRepository.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/ClassRepository.java @@ -1,32 +1,18 @@ package mineplex.minecraft.game.classcombat.Class.repository; -import java.util.List; - -import com.google.gson.reflect.TypeToken; - -import mineplex.core.server.remotecall.AsyncJsonWebCall; -import mineplex.core.server.remotecall.JsonWebCall; -import mineplex.minecraft.game.classcombat.Class.repository.token.ClassToken; +import mineplex.core.database.MinecraftRepository; import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken; +import mineplex.serverdata.database.DBPool; -public class ClassRepository +public class ClassRepository extends MinecraftRepository { - private String _webAddress; - - public ClassRepository(String webAddress) + public ClassRepository() { - _webAddress = webAddress; - } - - public List GetClasses(List pvpClasses) - { - return new JsonWebCall(_webAddress + "Dominate/GetClasses").Execute(new TypeToken>() - { - }.getType(), pvpClasses); + super(DBPool.getAccount()); } public void SaveCustomBuild(CustomBuildToken token) { - new AsyncJsonWebCall(_webAddress + "PlayerAccount/SaveCustomBuild").Execute(token); + handleAsyncMSSQLCall("PlayerAccount/SaveCustomBuild", token); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java index 2da9df000..bd50cddd3 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java @@ -4,6 +4,7 @@ import java.util.HashMap; import org.bukkit.Bukkit; import org.bukkit.Effect; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -112,7 +113,7 @@ public class Blink extends SkillActive //Lock Players for (Player cur : player.getWorld().getPlayers()) { - if (cur.equals(player)) + if (cur.equals(player) || cur.getGameMode() == GameMode.SPECTATOR) continue; if (UtilMath.offset(newTarget, cur.getLocation()) > 1) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java index 43b9624ec..8c6261db8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java @@ -3,7 +3,6 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Set; import java.util.UUID; import org.bukkit.Material; @@ -17,7 +16,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.updater.event.UpdateEvent; @@ -95,7 +93,7 @@ public class Illusion extends SkillActive Skeleton skel = player.getWorld().spawn(player.getLocation(), Skeleton.class); skel.teleport(player.getLocation()); - UtilEnt.Vegetate(skel); + UtilEnt.vegetate(skel); UtilEnt.silence(skel, true); skel.setMaxHealth(14); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/RopedArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/RopedArrow.java index 524aca959..8b6f4e2bc 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/RopedArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/RopedArrow.java @@ -91,7 +91,7 @@ public class RopedArrow extends SkillActive _arrows.add(event.getProjectile()); - UtilEnt.Leash(player, event.getProjectile(), false, false); + UtilEnt.leash(player, event.getProjectile(), false, false); } @EventHandler diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java index 8bc9f565b..ffc77893f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java @@ -98,7 +98,6 @@ import mineplex.minecraft.game.classcombat.Skill.Ranger.WolfsFury; import mineplex.minecraft.game.classcombat.Skill.Ranger.WolfsPounce; import mineplex.minecraft.game.classcombat.Skill.repository.SkillRepository; import mineplex.minecraft.game.classcombat.Skill.repository.token.SkillToken; -import mineplex.minecraft.game.classcombat.item.Throwable.ProximityManager; import mineplex.minecraft.game.core.IRelation; import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; @@ -128,13 +127,13 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory private HashMap _skillMap; private HashMap _skillSalesPackageMap; - public SkillFactory(JavaPlugin plugin, DamageManager damageManager, IRelation relation, - CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager, DisguiseManager disguiseManager, - BlockRestore blockRestore, Fire fire, Movement movement, Teleport teleport, Energy energy, String webAddress) + public SkillFactory(JavaPlugin plugin, DamageManager damageManager, IRelation relation, + CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager, DisguiseManager disguiseManager, + BlockRestore blockRestore, Fire fire, Movement movement, Teleport teleport, Energy energy) { super("Skill Factory", plugin); - _repository = new SkillRepository(webAddress); + _repository = new SkillRepository(); _damageManager = damageManager; _relation = relation; _combatManager = combatManager; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/repository/SkillRepository.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/repository/SkillRepository.java index 1d923bfe9..b9f244dc8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/repository/SkillRepository.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/repository/SkillRepository.java @@ -4,20 +4,19 @@ import java.util.List; import com.google.gson.reflect.TypeToken; -import mineplex.core.server.remotecall.JsonWebCall; import mineplex.minecraft.game.classcombat.Skill.repository.token.SkillToken; +import mineplex.core.database.MinecraftRepository; +import mineplex.serverdata.database.DBPool; -public class SkillRepository +public class SkillRepository extends MinecraftRepository { - private String _webAddress; - - public SkillRepository(String webAddress) + public SkillRepository() { - _webAddress = webAddress; + super(DBPool.getAccount()); } - - public List GetSkills(List skills) + + public List GetSkills(List skills) { - return new JsonWebCall(_webAddress + "Dominate/GetSkills").Execute(new TypeToken>(){}.getType(), skills); + return handleSyncMSSQLCall("Dominate/GetSkills", skills, new TypeToken>(){}.getType()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java index d6c49bf34..4351a0801 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java @@ -33,12 +33,12 @@ public class ItemFactory extends MiniPlugin implements IItemFactory private HashMap _items; private HashSet _ignore; - public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, String webAddress) + public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager) { - this(plugin, blockRestore, condition, damage, energy, fire, projectileManager, webAddress, new HashSet()); + this(plugin, blockRestore, condition, damage, energy, fire, projectileManager, new HashSet()); } - public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, String webAddress, HashSet ignore) + public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, HashSet ignore) { super("Item Factory", plugin); @@ -67,10 +67,10 @@ public class ItemFactory extends MiniPlugin implements IItemFactory e.printStackTrace(); } - PopulateFactory(webAddress); + PopulateFactory(); } - private void PopulateFactory(String webAddress) + private void PopulateFactory() { _items.clear(); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemRepository.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemRepository.java deleted file mode 100644 index 16ff6926d..000000000 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -package mineplex.minecraft.game.classcombat.item.repository; - -import java.util.List; - -import com.google.gson.reflect.TypeToken; - -import mineplex.core.server.remotecall.JsonWebCall; - -public class ItemRepository -{ - private String _webAddress; - - public ItemRepository(String webAddress) - { - _webAddress = webAddress; - } - - public List GetItems(List items) - { - return new JsonWebCall(_webAddress + "Dominate/GetItems").Execute(new TypeToken>(){}.getType(), items); - } -} diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemToken.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemToken.java deleted file mode 100644 index 9a819d4b0..000000000 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/repository/ItemToken.java +++ /dev/null @@ -1,11 +0,0 @@ -package mineplex.minecraft.game.classcombat.item.repository; - -import mineplex.core.donation.repository.GameSalesPackageToken; - -public class ItemToken -{ - public String Name; - public String Material; - - public GameSalesPackageToken SalesPackage; -} diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderCreature.java index a4b657260..c438f7351 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderCreature.java @@ -5,7 +5,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map.Entry; import org.bukkit.Bukkit; @@ -20,8 +19,6 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -import com.google.common.collect.Lists; - import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; @@ -61,7 +58,7 @@ public class SpiderCreature extends EventCreature @Override protected void spawnCustom() { - UtilEnt.Vegetate(getEntity()); + UtilEnt.vegetate(getEntity()); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderMinionCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderMinionCreature.java index 15eb9a843..1fb301cd2 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderMinionCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/broodmother/SpiderMinionCreature.java @@ -49,7 +49,7 @@ public class SpiderMinionCreature extends EventCreature @Override protected void spawnCustom() { - UtilEnt.Vegetate(getEntity(), true); + UtilEnt.vegetate(getEntity(), true); getEntity().setVelocity(new Vector(UtilMath.rr(0.5, true), 0.4, UtilMath.rr(0.4, true))); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java index be4e87f8c..b2fefc3ba 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/ironwizard/GolemCreature.java @@ -40,7 +40,6 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; public class GolemCreature extends EventCreature @@ -124,7 +123,7 @@ public class GolemCreature extends EventCreature @Override protected void spawnCustom() { - UtilEnt.Vegetate(getEntity()); + UtilEnt.vegetate(getEntity()); // EntityInsentient creature = (EntityInsentient) ((CraftEntity) getEntity()).getHandle(); // creature.Vegetated = false; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/SkeletonCreature.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/SkeletonCreature.java index 45cae347e..36e892a07 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/SkeletonCreature.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/SkeletonCreature.java @@ -79,7 +79,7 @@ public class SkeletonCreature extends EventCreature @Override protected void spawnCustom() { - UtilEnt.Vegetate(getEntity()); + UtilEnt.vegetate(getEntity()); getEntity().setSkeletonType(SkeletonType.WITHER); getEntity().getEquipment().setItemInHand(new ItemStack(Material.RECORD_6)); //Meridian Scepter getEntity().getEquipment().setItemInHandDropChance(0.f); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/abilities/SkeletonArcherShield.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/abilities/SkeletonArcherShield.java index c393c73e3..558cbcfb6 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/abilities/SkeletonArcherShield.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/boss/skeletonking/abilities/SkeletonArcherShield.java @@ -82,7 +82,7 @@ public class SkeletonArcherShield extends BossAbility protected void spawnCustom() { getEntity().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0)); - UtilEnt.Vegetate(getEntity()); + UtilEnt.vegetate(getEntity()); UtilEnt.ghost(getEntity(), true, false); Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true)).normalize().multiply(_seperator); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatComponent.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatComponent.java index 45a9d5c51..8f308e43c 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatComponent.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatComponent.java @@ -4,6 +4,7 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.UUID; import mineplex.core.common.util.F; @@ -39,12 +40,12 @@ public class CombatComponent } } - public void AddDamage(String source, double dmg, List mod) + public void AddDamage(String source, double dmg, List mod, Map metadata) { if (source == null) source = "-"; - GetDamage().addFirst(new CombatDamage(source, dmg, mod)); + GetDamage().addFirst(new CombatDamage(source, dmg, mod, metadata)); LastDamage = System.currentTimeMillis(); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatDamage.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatDamage.java index c0dedb230..b2997285a 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatDamage.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatDamage.java @@ -1,7 +1,8 @@ package mineplex.minecraft.game.core.combat; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import mineplex.minecraft.game.core.damage.DamageChange; @@ -10,14 +11,20 @@ public class CombatDamage private String _name; private double _dmg; private long _time; - private List _mod = new ArrayList<>(); + private List _mod; + private Map _metadata; public CombatDamage(String name, double dmg, List mod) + { + this(name, dmg, mod, new HashMap<>()); + } + public CombatDamage(String name, double dmg, List mod, Map metadata) { _name = name; _dmg = dmg; _time = System.currentTimeMillis(); _mod = mod; + _metadata = metadata; } public String GetName() @@ -39,4 +46,17 @@ public class CombatDamage { return _mod; } + + /** + * Retrieves metadata that was associated with this damage via + * {@link mineplex.minecraft.game.core.damage.CustomDamageEvent#setMetadata(String, Object)}. + *

+ * There is no standardized metadata that should be expected. Metadata is meant to be used + * on a per-minigame basis to store additional information about the damage. + * @return a non-null map containing the metadata + */ + public Map getMetadata() + { + return _metadata; + } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java index c2f6329e5..89a04fe90 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java @@ -3,6 +3,7 @@ package mineplex.minecraft.game.core.combat; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.entity.LivingEntity; @@ -48,12 +49,17 @@ public class CombatLog } public void Attacked(String damagerName, double damage, - LivingEntity damagerEnt, String attackName, List mod) + LivingEntity damagerEnt, String attackName, List mod) + { + this.Attacked(damagerName, damage, damagerEnt, attackName, mod, new HashMap<>()); + } + public void Attacked(String damagerName, double damage, + LivingEntity damagerEnt, String attackName, List mod, Map metadata) { // Add Attacked CombatComponent comp = GetEnemy(damagerName, damagerEnt); - comp.AddDamage(attackName, damage, mod); + comp.AddDamage(attackName, damage, mod, metadata); // Set Last LastDamager = comp; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java index b6591802f..6e6147792 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java @@ -307,11 +307,10 @@ public class CombatManager extends MiniPlugin Get((Player)event.GetDamagerEntity(true)).SetLastCombatEngaged(System.currentTimeMillis()); Get(event.GetDamageePlayer()).SetLastCombatEngaged(System.currentTimeMillis()); } - Get(event.GetDamageePlayer()).Attacked( UtilEnt.getName(event.GetDamagerEntity(true)), (int) event.GetDamage(), event.GetDamagerEntity(true), - reason, event.GetDamageMod()); + reason, event.GetDamageMod(), event.getMetadata()); } // Damager is WORLD else @@ -409,9 +408,9 @@ public class CombatManager extends MiniPlugin if (event.GetReason() != null) reason = event.GetReason(); - + Get(event.GetDamageePlayer()).Attacked(source, - (int) event.GetDamage(), null, reason, event.GetDamageMod()); + (int) event.GetDamage(), null, reason, event.GetDamageMod(), event.getMetadata()); } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java index ec3781d43..a4830cb56 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/CustomDamageEvent.java @@ -2,7 +2,9 @@ package mineplex.minecraft.game.core.damage; import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; +import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; @@ -29,6 +31,7 @@ public class CustomDamageEvent extends Event implements Cancellable private HashMap _knockbackMod = new HashMap(); + private Map _metadata = new HashMap<>(); //Ents private LivingEntity _damageeEntity; private Player _damageePlayer; @@ -368,6 +371,34 @@ public class CustomDamageEvent extends Event implements Cancellable return IsCancelled(); } + /** + * Associates the provided metadata key with the provided value. + * Metadata can later be retrieved from individual {@link + * mineplex.minecraft.game.core.combat.CombatDamage} instances acquired + * from the {@link mineplex.minecraft.game.core.combat.CombatLog}. + * + * @param key non-null key to associate the value with + * @param value nullable value + * @throws IllegalArgumentException if key is null + */ + public void setMetadata(String key, Object value) + { + Validate.notNull(key); + _metadata.put(key, value); + } + + /** + * Gets all Metadata associated with this event. There is + * no standardized metadata that should be expected. + * + * @see #setMetadata(String, Object) + * @return non-null map of metadata + */ + public Map getMetadata() + { + return _metadata; + } + @Override @Deprecated /** diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java index ebb331257..f1905d25a 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java @@ -345,7 +345,7 @@ public class DamageManager extends MiniPlugin Player damagee = event.GetDamageePlayer(); //Not Survival - if (damagee.getGameMode() != GameMode.SURVIVAL) + if (damagee.getGameMode() != GameMode.SURVIVAL && damagee.getGameMode() != GameMode.ADVENTURE) { event.SetCancelled("Damagee in Creative"); return; @@ -373,7 +373,7 @@ public class DamageManager extends MiniPlugin Player damager = event.GetDamagerPlayer(true); //Not Survival - if (damager.getGameMode() != GameMode.SURVIVAL) + if (damager.getGameMode() != GameMode.SURVIVAL && damager.getGameMode() != GameMode.ADVENTURE) { event.SetCancelled("Damager in Creative"); return; diff --git a/Plugins/Mineplex.ServerData/pom.xml b/Plugins/Mineplex.ServerData/pom.xml index 40275a893..a407f6de4 100644 --- a/Plugins/Mineplex.ServerData/pom.xml +++ b/Plugins/Mineplex.ServerData/pom.xml @@ -28,5 +28,14 @@ redis.clients jedis + + com.mineplex + spigot + + + org.jooq + jooq + 3.5.2 + diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java index 8d8f2daf3..6838a7df8 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/Utility.java @@ -1,5 +1,7 @@ package mineplex.serverdata; +import java.lang.reflect.Type; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import mineplex.serverdata.servers.ConnectionData; @@ -11,6 +13,16 @@ import redis.clients.jedis.exceptions.JedisConnectionException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.util.UUIDTypeAdapter; /** * Utility offers various necessary utility-based methods for use in Mineplex.ServerData. @@ -23,7 +35,11 @@ public class Utility private static long _millisTimeDifference; // The Gson instance used to serialize/deserialize objects in JSON form. - private static Gson _gson = new GsonBuilder().create(); + private static Gson _gson = new GsonBuilder() + .registerTypeAdapter(GameProfile.class, new GameProfileSerializer()) + .registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()) + .registerTypeAdapter(UUID.class, new UUIDTypeAdapter()) + .create(); public static Gson getGson() { return _gson; } // map of all instantiated connection pools, distinguished by their ip:port combination @@ -171,4 +187,50 @@ public class Utility _millisTimeDifference = (currentTime * 1000) - System.currentTimeMillis(); } + + + private static class GameProfileSerializer implements JsonSerializer, JsonDeserializer + { + private GameProfileSerializer() + { + } + + public GameProfile deserialize(JsonElement var1, Type var2, JsonDeserializationContext var3) throws JsonParseException + { + JsonObject var4 = (JsonObject) var1; + UUID var5 = var4.has("id") ? (UUID) var3.deserialize(var4.get("id"), UUID.class) : null; + String var6 = var4.has("name") ? var4.getAsJsonPrimitive("name").getAsString() : null; + GameProfile gameProfile = new GameProfile(var5, var6); + + if (var4.has("properties")) + { + PropertyMap propertyMap = var3.deserialize(var4.get("properties"), PropertyMap.class); + gameProfile.getProperties().putAll(propertyMap); + } + + return gameProfile; + } + + public JsonElement serialize(GameProfile var1, Type var2, JsonSerializationContext var3) + { + JsonObject var4 = new JsonObject(); + + if (var1.getId() != null) + { + var4.add("id", var3.serialize(var1.getId())); + } + + if (var1.getName() != null) + { + var4.addProperty("name", var1.getName()); + } + + if (var1.getProperties() != null) + { + var4.add("properties", var3.serialize(var1.getProperties())); + } + + return var4; + } + } } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/ServerCommand.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/ServerCommand.java index d4da082b3..de588f1d2 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/ServerCommand.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/ServerCommand.java @@ -1,21 +1,24 @@ package mineplex.serverdata.commands; +import java.util.UUID; + public abstract class ServerCommand { + private final UUID _commandId = UUID.randomUUID(); + private final String _fromServer = ServerCommandManager.getInstance().getServerName(); // The names of servers targetted to receive this ServerCommand. - private String _fromServer; private String[] _targetServers; - - /** - * Class constructor - * @param targetServers - */ + + public ServerCommand() + { + _targetServers = new String[0]; + } + public ServerCommand(String... targetServers) { _targetServers = targetServers; - _fromServer = ServerCommandManager.getInstance().getServerName(); } public void setTargetServers(String... targetServers) @@ -32,6 +35,11 @@ public abstract class ServerCommand return _targetServers; } + + public String getFromServer() + { + return this._fromServer; + } /** * Run the command on it's destination target server. @@ -69,4 +77,26 @@ public abstract class ServerCommand { ServerCommandManager.getInstance().publishCommand(this); } + + public boolean wasSentFromThisServer() + { + return ServerCommandManager.getInstance().getServerName().equals(_fromServer); + } + + public boolean isSentToThisServer() + { + for (String targetServer : _targetServers) + { + if (ServerCommandManager.getInstance().getServerName().equals(targetServer)) + { + return true; + } + } + return false; + } + + public UUID getCommandId() + { + return _commandId; + } } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferCommand.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferCommand.java index 15ac416ba..84abfa91e 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferCommand.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferCommand.java @@ -1,31 +1,24 @@ package mineplex.serverdata.commands; -/** - * The TransferCommand is sent across the server network to notify - * servers to transfer players to other destinations. - * @author Ty - * - */ public class TransferCommand extends ServerCommand { + private final String _playerName; + private final String _targetServer; - // The ServerTransfer to be sent to another server for enactment - private ServerTransfer _transfer; - public ServerTransfer getTransfer() { return _transfer; } - - /** - * Class constructor - * @param transfer - the {@link ServerTransfer} to notify another server of - */ - public TransferCommand(ServerTransfer transfer) + public TransferCommand(String playerName, String targetServer) { - _transfer = transfer; + _playerName = playerName; + _targetServer = targetServer; } - - @Override - public void run() + + public String getPlayerName() { - // Utilitizes a callback functionality to seperate dependencies + return _playerName; + } + + public String getTargetServer() + { + return _targetServer; } } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferUUIDCommand.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferUUIDCommand.java new file mode 100644 index 000000000..78ee73283 --- /dev/null +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/commands/TransferUUIDCommand.java @@ -0,0 +1,25 @@ +package mineplex.serverdata.commands; + +import java.util.UUID; + +public class TransferUUIDCommand extends ServerCommand +{ + private final UUID _playerUUID; + private final String _targetServer; + + public TransferUUIDCommand(UUID playerUUID, String targetServer) + { + _playerUUID = playerUUID; + _targetServer = targetServer; + } + + public UUID getPlayerUUID() + { + return _playerUUID; + } + + public String getTargetServer() + { + return _targetServer; + } +} diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/DBPool.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/DBPool.java index be17d13f2..d948b6e73 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/DBPool.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/DBPool.java @@ -18,6 +18,7 @@ public final class DBPool private static DataSource MINEPLEX_STATS; private static DataSource PLAYER_STATS; private static DataSource SERVER_STATS; + private static DataSource MSSQL_MOCK; private static DataSource openDataSource(String url, String username, String password) { @@ -38,6 +39,14 @@ public final class DBPool return source; } + public static DataSource getMssqlMock() + { + if (MSSQL_MOCK == null) + loadDataSources(); + + return MSSQL_MOCK; + } + public static DataSource getAccount() { if (ACCOUNT == null) @@ -138,6 +147,8 @@ public final class DBPool PLAYER_STATS = openDataSource("jdbc:mysql://" + dbHost, userName, password); else if (dbSource.toUpperCase().equalsIgnoreCase("SERVER_STATS")) SERVER_STATS = openDataSource("jdbc:mysql://" + dbHost, userName, password); + else if (dbSource.toUpperCase().equalsIgnoreCase("MSSQL_MOCK")) + MSSQL_MOCK = openDataSource("jdbc:mysql://" + dbHost, userName, password); } } } diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/RepositoryBase.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/RepositoryBase.java index 8a175212d..f5066fea9 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/RepositoryBase.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/database/RepositoryBase.java @@ -8,6 +8,10 @@ import java.sql.Statement; import javax.sql.DataSource; +import org.jooq.DSLContext; +import org.jooq.SQLDialect; +import org.jooq.impl.DSL; + import mineplex.serverdata.database.column.Column; public abstract class RepositoryBase @@ -291,4 +295,9 @@ public abstract class RepositoryBase exception.printStackTrace(); } } + + protected DSLContext jooq() + { + return DSL.using(DBPool.getAccount(), SQLDialect.MYSQL); + } } \ No newline at end of file diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java index ca1225e2f..1cb6ac7b3 100644 --- a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java @@ -1,6 +1,8 @@ package mineplex.staffServer; import com.mojang.authlib.GameProfile; + +import mineplex.core.common.Constants; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; import mineplex.core.chat.Chat; @@ -39,32 +41,28 @@ import static mineplex.core.Managers.require; public class StaffServer extends JavaPlugin { - private String WEB_CONFIG = "webServer"; - @Override public void onEnable() { - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); - - String webServerAddress = getConfig().getString(WEB_CONFIG); - + //Static Modules CommandCenter.Initialize(this); - CoreClientManager clientManager = new CoreClientManager(this, webServerAddress, Rank.DEVELOPER); + CoreClientManager clientManager = new CoreClientManager(this, Rank.DEVELOPER); CommandCenter.Instance.setClientManager(clientManager); Recharge.Initialize(this); DonationManager donationManager = require(DonationManager.class); - Punish punish = new Punish(this, webServerAddress, clientManager); + Punish punish = new Punish(this, clientManager); new NpcManager(this, new Creature(this)); ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager)); PreferencesManager preferenceManager = new PreferencesManager(this, null, clientManager); preferenceManager.GiveItem = false; - Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName()); + Portal portal = new Portal(); EloManager eloManager = new EloManager(this, clientManager); StatsManager statsManager = new StatsManager(this, clientManager); new Chat(this, null, clientManager, preferenceManager, new AchievementManager(statsManager, clientManager, donationManager, null, eloManager), serverStatusManager.getCurrentServerName()); diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupportRepository.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupportRepository.java index b8fdcd27d..286c3ac9c 100644 --- a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupportRepository.java +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupportRepository.java @@ -4,8 +4,9 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; -public class CustomerSupportRepository extends MinecraftRepository +public class CustomerSupportRepository extends RepositoryBase { public CustomerSupportRepository(JavaPlugin plugin) { diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordRepository.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordRepository.java index a751ca133..b3d1986f1 100644 --- a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordRepository.java +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordRepository.java @@ -9,10 +9,11 @@ import mineplex.core.database.MinecraftRepository; import org.bukkit.plugin.java.JavaPlugin; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnVarChar; -public class PasswordRepository extends MinecraftRepository +public class PasswordRepository extends RepositoryBase { private static String CREATE_SERVER_PASSWORD_TABLE = "CREATE TABLE IF NOT EXISTS serverPassword (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), password VARCHAR(100), PRIMARY KEY (id));"; private static String RETRIEVE_SERVER_PASSWORD = "SELECT password FROM serverPassword WHERE server = ?;"; diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/salespackage/SalesPackageManager.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/salespackage/SalesPackageManager.java index 1f26eaad6..352fe54a3 100644 --- a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/salespackage/SalesPackageManager.java +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/salespackage/SalesPackageManager.java @@ -61,7 +61,7 @@ public class SalesPackageManager extends MiniPlugin _statsManager = statsManager; _powerPlayRepo = powerPlayRepo; - _petRepo = new PetRepository(plugin, plugin.getConfig().getString("webServer")); + _petRepo = new PetRepository(); //Strutt20 asked me to remove some of the stuff from the menu diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index 83a02e812..34bba48d8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -10,10 +10,12 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.spigotmc.SpigotConfig; +import mineplex.core.common.Constants; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; import mineplex.core.PacketsInteractionFix; import mineplex.core.TimingsFix; + import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; @@ -79,9 +81,7 @@ import nautilus.game.arcade.game.GameServerConfig; import static mineplex.core.Managers.require; public class Arcade extends JavaPlugin -{ - private String WEB_CONFIG = "webServer"; - +{ //Modules private CoreClientManager _clientManager; private DonationManager _donationManager; @@ -99,17 +99,15 @@ public class Arcade extends JavaPlugin DeleteFolders(); //Configs - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); - - String webServerAddress = getConfig().getString(WEB_CONFIG); //Logger.initialize(this); //Static Modules CommandCenter.Initialize(this); - _clientManager = new CoreClientManager(this, webServerAddress); + _clientManager = new CoreClientManager(this); CommandCenter.Instance.setClientManager(_clientManager); require(ProfileCacheManager.class); @@ -139,7 +137,7 @@ public class Arcade extends JavaPlugin ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager)); LeaderboardManager leaderboardManager = new LeaderboardManager(this, _clientManager); Teleport teleport = new Teleport(this, _clientManager); - Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); + Portal portal = new Portal(); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); DisguiseManager disguiseManager = require(DisguiseManager.class); @@ -147,7 +145,7 @@ public class Arcade extends JavaPlugin NpcManager npcmanager = new NpcManager(this, creature); _damageManager = new DamageManager(this, new CombatManager(this), npcmanager, disguiseManager, null); - Punish punish = new Punish(this, webServerAddress, _clientManager); + Punish punish = new Punish(this, _clientManager); require(AntiHack.class); @@ -171,20 +169,21 @@ public class Arcade extends JavaPlugin //Inventory InventoryManager inventoryManager = new InventoryManager(this, _clientManager); - PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore, webServerAddress); + PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); BoosterManager boosterManager = new BoosterManager(this, _serverConfiguration.getServerGroup().getBoosterGroup(), _clientManager, _donationManager, inventoryManager, thankManager); CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, null, boosterManager); cosmeticManager.setInterfaceSlot(6); + gadgetManager.setActiveItemSlot(3); cosmeticManager.disableTeamArmor(); CustomDataManager customDataManager = new CustomDataManager(this, _clientManager); //Arcade Manager PollManager pollManager = new PollManager(this, _clientManager, _donationManager); - _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, statsManager, incognito, achievementManager, disguiseManager, creature, teleport, new Blood(this), chat, portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, webServerAddress, pollManager, npcmanager, customDataManager, punish, eloManager, thankManager, boosterManager); + _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, statsManager, incognito, achievementManager, disguiseManager, creature, teleport, new Blood(this), chat, portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, pollManager, npcmanager, customDataManager, punish, eloManager, thankManager, boosterManager); require(AntihackLogger.class).registerMetadata(new GameInfoMetadata()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 6d7198a69..d474e2a2d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -4,6 +4,8 @@ import java.io.File; import java.util.ArrayList; import java.util.HashSet; +import net.minecraft.server.v1_8_R3.EntityLiving; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -82,6 +84,7 @@ import mineplex.core.movement.Movement; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; import mineplex.core.party.PartyManager; +import mineplex.core.party.event.PartySelectServerEvent; import mineplex.core.personalServer.PersonalServerManager; import mineplex.core.pet.PetManager; import mineplex.core.playwire.PlayWireManager; @@ -120,6 +123,7 @@ import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; import mineplex.minecraft.game.core.fire.Fire; import mineplex.serverdata.Region; + import nautilus.game.arcade.addons.SoupAddon; import nautilus.game.arcade.addons.TeamArmorAddon; import nautilus.game.arcade.booster.GameBoosterManager; @@ -165,7 +169,6 @@ import nautilus.game.arcade.managers.lobby.current.NewGameLobbyManager; import nautilus.game.arcade.managers.lobby.legacy.LegacyGameLobbyManager; import nautilus.game.arcade.player.ArcadePlayer; import nautilus.game.arcade.shop.ArcadeShop; -import net.minecraft.server.v1_8_R3.EntityLiving; public class ArcadeManager extends MiniPlugin implements IRelation { @@ -265,7 +268,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation CoreClientManager clientManager, DonationManager donationManager, DamageManager damageManager, StatsManager statsManager, IncognitoManager incognitoManager, AchievementManager achievementManager, DisguiseManager disguiseManager, Creature creature, Teleport teleport, Blood blood, Chat chat, Portal portal, PreferencesManager preferences, InventoryManager inventoryManager, PacketHandler packetHandler, - CosmeticManager cosmeticManager, ProjectileManager projectileManager, PetManager petManager, HologramManager hologramManager, String webAddress, PollManager pollManager, + CosmeticManager cosmeticManager, ProjectileManager projectileManager, PetManager petManager, HologramManager hologramManager, PollManager pollManager, NpcManager npcManager, CustomDataManager customDataManager, Punish punish, EloManager eloManager, ThankManager thankManager, BoosterManager boosterManager) { super("Game Manager", plugin); @@ -309,9 +312,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation _packetHandler = packetHandler; - _partyManager = new PartyManager(plugin, portal, _clientManager, preferences); + _partyManager = new PartyManager(); _statsManager = statsManager; - _taskManager = new TaskManager(plugin, clientManager, webAddress); + _taskManager = new TaskManager(plugin, clientManager); _achievementManager = achievementManager; _inventoryManager = inventoryManager; _cosmeticManager = cosmeticManager; @@ -351,8 +354,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation TitanGiveawayManager titanGiveaway = new TitanGiveawayManager(getPlugin(), clientManager, serverStatusManager); EternalGiveawayManager eternalGiveawayManager = new EternalGiveawayManager(getPlugin(), clientManager, serverStatusManager); - //new HolidayManager(this, titanGiveaway, eternalGiveawayManager); IsHolidayEnabled = false; + if (IsHolidayEnabled) + new HolidayManager(this, titanGiveaway, eternalGiveawayManager); new ValentinesGiftManager(plugin, clientManager, _bonusManager.getRewardManager(), inventoryManager, _cosmeticManager.getGadgetManager(), statsManager); new GameTestingManager(this); @@ -367,14 +371,14 @@ public class ArcadeManager extends MiniPlugin implements IRelation _energy = new Energy(plugin); _itemFactory = new ItemFactory(_plugin, _blockRestore, _conditionManager, damageManager, _energy, - _fire, _projectileManager, webAddress); + _fire, _projectileManager); _skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(), _conditionManager, _projectileManager, _disguiseManager, _blockRestore, _fire, new Movement(plugin), teleport, - _energy, webAddress); + _energy); - _classManager = new ClassManager(plugin, clientManager, donationManager, _cosmeticManager.getGadgetManager(), _skillFactory, _itemFactory, - webAddress); + _classManager = new ClassManager(plugin, clientManager, donationManager, _cosmeticManager.getGadgetManager(), _skillFactory, _itemFactory + ); _classShopManager = new ClassShopManager(_plugin, _classManager, _skillFactory, _itemFactory, _achievementManager, clientManager); @@ -957,10 +961,16 @@ public class ArcadeManager extends MiniPlugin implements IRelation event.setMotd(ChatColor.YELLOW + "In Progress" + extrainformation); } - if (this.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + if (UtilServer.isTestServer(false)) event.setMotd(ChatColor.GOLD + "Private Mineplex Test Server"); } + @EventHandler + public void onClickCompassPartyIcon(PartySelectServerEvent event) + { + UtilPlayer.message(event.getPlayer(), F.main("Party", "This option cannot be used here")); + } + @EventHandler public void MessageJoin(PlayerJoinEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 7e403f6d9..66bef53c0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -214,6 +214,11 @@ public enum GameType Gladiators(Gladiators.class, GameDisplay.Gladiators), Skyfall(SoloSkyfall.class, GameDisplay.Skyfall), SkyfallTeams(TeamSkyfall.class, GameDisplay.SkyfallTeams, new GameType[]{GameType.Skyfall}, false), + StrikeGames(StrikeGames.class, new GameMode[]{}, GameDisplay.StrikeGames, new Pair[] + { + Pair.create(MinecraftVersion.Version1_8, "http://file.mineplex.com/ResStrikeGames18.zip"), + Pair.create(MinecraftVersion.Version1_9, "http://file.mineplex.com/ResStrikeGames19.zip") + }, true, new GameType[]{GameType.SurvivalGames}, false, false), BouncyBalls(BouncyBalls.class, GameDisplay.BouncyBalls), @@ -253,11 +258,11 @@ public enum GameType new GameMode(OverpoweredSurvival.class, GameType.SurvivalGames, "OP Survival Games"), new GameMode(UHCSurvivalgames.class, GameType.SurvivalGames, "UHC Survivalgames"), new GameMode(ChangingKits.class, GameType.SurvivalGames, "Changing Kits"), - new GameMode(StrikeGames.class, GameType.SurvivalGames, "Strike Games", new Pair[] - { - Pair.create(MinecraftVersion.Version1_8, "http://file.mineplex.com/ResStrikeGames18.zip"), - Pair.create(MinecraftVersion.Version1_9, "http://file.mineplex.com/ResStrikeGames19.zip") - }, true), + //new GameMode(StrikeGames.class, GameType.SurvivalGames, "Strike Games", new Pair[] + //{ + // Pair.create(MinecraftVersion.Version1_8, "http://file.mineplex.com/ResStrikeGames18.zip"), + // Pair.create(MinecraftVersion.Version1_9, "http://file.mineplex.com/ResStrikeGames19.zip") + //}, true), new GameMode(TinyWinners.class, GameType.Micro, "Tiny Winners"), new GameMode(OverpoweredMicroBattles.class, GameType.Micro, "OP Micro Battles"), new GameMode(CookieFight.class, GameType.Micro, "Cookie Fight"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/booster/GameBoosterManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/booster/GameBoosterManager.java index 52d1f27fc..832ba44f4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/booster/GameBoosterManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/booster/GameBoosterManager.java @@ -84,7 +84,7 @@ public class GameBoosterManager extends MiniPlugin { Booster booster = event.getBooster(); - boolean isTesting = event.getBoosterGroup().equalsIgnoreCase("Testing"); + boolean isTesting = UtilServer.isTestServer(); if (event.getBoosterGroup().equals(_boosterGroup)) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/CancelNextGameCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/CancelNextGameCommand.java index 8ac096981..ea04eefa4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/CancelNextGameCommand.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/CancelNextGameCommand.java @@ -19,6 +19,6 @@ public class CancelNextGameCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { - Plugin.getNextBestGameManager().cancel(caller, Plugin.getPartyManager().getParty(caller)); + Plugin.getNextBestGameManager().cancel(caller, Plugin.getPartyManager().getPartyByPlayer(caller)); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java index fbb89b22d..410a5454d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java @@ -7,6 +7,7 @@ import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; public class RequiredRankCommand extends CommandBase { @@ -22,7 +23,7 @@ public class RequiredRankCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { - if(!_manager.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + if(!UtilServer.isTestServer()) { UtilPlayer.message(caller, F.main("Command", "This is not a test server..")); return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java index bdf234ebf..539d26453 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/SetCommand.java @@ -5,6 +5,8 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import org.bukkit.ChatColor; @@ -100,7 +102,7 @@ public class SetCommand extends CommandBase GameType type = matches.get(0); Plugin.GetGame().setGame(type, caller, true); - if(Plugin.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + if(UtilServer.isTestServer()) { Plugin.GetGameList().clear(); Plugin.GetGameList().add(type); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index d2864e5e5..17e88e026 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -13,6 +13,9 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; +import mineplex.core.lifetimes.Lifetimed; +import mineplex.core.lifetimes.ListenerComponent; +import mineplex.core.lifetimes.PhasedLifetime; import org.apache.commons.lang3.tuple.Triple; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -109,9 +112,8 @@ import nautilus.game.arcade.world.WorldData; import net.minecraft.server.v1_8_R3.EntityItem; import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity; -public abstract class Game implements Listener +public abstract class Game extends ListenerComponent implements Lifetimed { - private final static int MAX_TICK_SPEED_MEASUREMENT = 40; public long getGameLiveTime() @@ -135,6 +137,7 @@ public abstract class Game implements Listener private GameType _gameType; protected String[] _gameDesc; + private PhasedLifetime _lifetime = new PhasedLifetime<>(); // Map private HashMap> _files; @@ -387,6 +390,7 @@ public abstract class Game implements Listener { Manager = manager; + _lifetime.register(this); // Player List UtilTabTitle.broadcastHeaderAndFooter(C.cGold + C.Bold + gameType.GetName(), "Visit " + C.cGreen + "www.mineplex.com" + ChatColor.RESET + " for News, Forums and Shop"); @@ -760,6 +764,9 @@ public abstract class Game implements Listener for (Player player : UtilServer.getPlayers()) player.leaveVehicle(); + + _lifetime.setPhase(state); + // Event GameStateChangeEvent stateEvent = new GameStateChangeEvent(this, state); UtilServer.getServer().getPluginManager().callEvent(stateEvent); @@ -1877,18 +1884,6 @@ public abstract class Game implements Listener SetState(GameState.End); } - @EventHandler - public void disableParticles(GameStateChangeEvent event) - { - if (event.GetState() == GameState.Prepare && Manager.getCosmeticManager().getGadgetManager().hideParticles()) - { - for (Player player : GetPlayers(false)) - { - getArcadeManager().getCosmeticManager().getGadgetManager().removeGadgetType(player, GadgetType.PARTICLE); - } - } - } - @EventHandler public void onGameStart(GameStateChangeEvent event) { @@ -2347,7 +2342,11 @@ public abstract class Game implements Listener public void disable() { + cleanupModules(); + cleanupCommands(); Managers.get(AntiHack.class).resetIgnoredChecks(); + getLifetime().end(); + getStatTrackers().forEach(HandlerList::unregisterAll); } @EventHandler @@ -2455,5 +2454,10 @@ public abstract class Game implements Listener { return clazz.cast(_modules.get(clazz)); } - + + @Override + public PhasedLifetime getLifetime() + { + return _lifetime; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameComponent.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameComponent.java new file mode 100644 index 000000000..2dba42c07 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/GameComponent.java @@ -0,0 +1,37 @@ +package nautilus.game.arcade.game; + +import mineplex.core.lifetimes.Lifetime; +import mineplex.core.lifetimes.Lifetimed; +import mineplex.core.lifetimes.ListenerComponent; + +import java.util.Arrays; + +public class GameComponent extends ListenerComponent implements Lifetimed +{ + private final Lifetime _lifetime; + private final T _game; + + public GameComponent(T game, Game.GameState...active) + { + _game = game; + if (active == null || active.length == 0) + { + // Active for the entire duration of the game. + _lifetime = game.getLifetime(); + _lifetime.register(this); + } else + { + _lifetime = game.getLifetime().register(this, Arrays.asList(active)); + } + } + + @Override + public Lifetime getLifetime() + { + return _lifetime; + } + + public T getGame() { + return _game; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitSheepPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitSheepPig.java index 725f5b910..2f9c89563 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitSheepPig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/baconbrawl/kits/KitSheepPig.java @@ -73,7 +73,7 @@ public class KitSheepPig extends ProgressingKit sheep.setColor(DyeColor.PINK); } - UtilEnt.Vegetate(entity); + UtilEnt.vegetate(entity); SpawnCustom(entity); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/basketball/Basketball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/basketball/Basketball.java index 4493f5f19..df5ecf96f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/basketball/Basketball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/basketball/Basketball.java @@ -137,7 +137,7 @@ public class Basketball extends TeamGame this.CreatureAllowOverride = true; _velocity = -7; Entity e = Manager.GetCreature().SpawnEntity(loc, EntityType.SLIME); - UtilEnt.Vegetate(e, true); + UtilEnt.vegetate(e, true); UtilEnt.ghost(e, true, false); ((Slime)e).setSize(1); this.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java index 614728267..fb08f2abf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/IronWizardDisplay.java @@ -8,8 +8,6 @@ import nautilus.game.arcade.game.games.bossbattles.BossBattles; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.IronGolem; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerInteractEntityEvent; public class IronWizardDisplay extends BossDisplay { @@ -27,7 +25,7 @@ public class IronWizardDisplay extends BossDisplay _golem = (IronGolem) getLocation().getWorld().spawnEntity(getLocation(), EntityType.IRON_GOLEM); _golem.teleport(getLocation()); - UtilEnt.Vegetate(_golem); + UtilEnt.vegetate(_golem); addEntity(_golem); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java index a2da07725..d5f46afc5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SlimeKingDisplay.java @@ -7,10 +7,7 @@ import nautilus.game.arcade.game.games.bossbattles.BossBattles; import org.bukkit.Location; import org.bukkit.entity.EntityType; -import org.bukkit.entity.IronGolem; import org.bukkit.entity.Slime; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerInteractEntityEvent; public class SlimeKingDisplay extends BossDisplay { @@ -31,7 +28,7 @@ public class SlimeKingDisplay extends BossDisplay _slime.teleport(getLocation()); - UtilEnt.Vegetate(_slime); + UtilEnt.vegetate(_slime); addEntity(_slime); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java index 44a373b6f..e4ff3e152 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SnakeDisplay.java @@ -7,11 +7,7 @@ import nautilus.game.arcade.game.games.bossbattles.BossBattles; import org.bukkit.Location; import org.bukkit.entity.EntityType; -import org.bukkit.entity.IronGolem; import org.bukkit.entity.Sheep; -import org.bukkit.entity.Slime; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerInteractEntityEvent; public class SnakeDisplay extends BossDisplay { @@ -30,7 +26,7 @@ public class SnakeDisplay extends BossDisplay _sheep.teleport(getLocation()); - UtilEnt.Vegetate(_sheep); + UtilEnt.vegetate(_sheep); addEntity(_sheep); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java index 1afd06f6a..219083d9c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bossbattles/displays/SpiderDisplay.java @@ -29,7 +29,7 @@ public class SpiderDisplay extends BossDisplay Entity entity = getLocation().getWorld().spawnEntity(getLocation(), EntityType.SPIDER); - UtilEnt.Vegetate(entity); + UtilEnt.vegetate(entity); this.addEntity(entity); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bouncyballs/Ball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bouncyballs/Ball.java index c8ab8f459..d59015956 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bouncyballs/Ball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bouncyballs/Ball.java @@ -108,7 +108,7 @@ public class Ball _ball = _ballSpawn.getWorld().spawn(_ballSpawn, Slime.class); _ball.setSize(2); - UtilEnt.Vegetate(_ball); + UtilEnt.vegetate(_ball); UtilEnt.ghost(_ball, false, false); _host.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java index e9a7cec4a..29b770296 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/Build.java @@ -91,6 +91,8 @@ import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.explosion.ExplosionEvent; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -639,7 +641,7 @@ public class Build extends Game UtilPlayer.message(_viewData.Player, C.cWhite + C.Bold + "Inappropriate Builds can result in a Master Buildres ban."); //Return to Hub - getArcadeManager().GetPortal().sendPlayerToServer(_viewData.Player, "Lobby"); + getArcadeManager().GetPortal().sendPlayerToGenericServer(_viewData.Player, GenericServer.HUB, Intent.KICK); } protected void tallyScores() @@ -1659,7 +1661,7 @@ public class Build extends Game UtilPlayer.message(player, C.cRed + C.Bold + "You have been flagged as an Inappropriate Builder!"); UtilPlayer.message(player, C.cRed + C.Bold + "As a result, you are banned from this game."); player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - getArcadeManager().GetPortal().sendPlayerToServer(player, "Lobby"); + getArcadeManager().GetPortal().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index fa4c8fe05..e3d2b9d40 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -197,7 +197,7 @@ public class BuildData } Entities.add(entity); - UtilEnt.Vegetate(entity, true); + UtilEnt.vegetate(entity, true); UtilEnt.ghost(entity, true, false); return true; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/modes/TeamBuild.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/modes/TeamBuild.java index db22e8d4c..b668eead5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/modes/TeamBuild.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/modes/TeamBuild.java @@ -17,6 +17,9 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -102,7 +105,7 @@ public class TeamBuild extends Build Announce(C.cWhite + C.Bold + player.getName() + " has been reported for an inappropriate build.", false); //Return to Hub - getArcadeManager().GetPortal().sendPlayerToServer(player, "Lobby"); + getArcadeManager().GetPortal().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } getViewData().Spawn.getWorld().playSound(getViewData().Spawn, Sound.ENDERDRAGON_GROWL, 10f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java index 26ef62540..1e63440f4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java @@ -51,7 +51,7 @@ public class Sleigh Target = loc.clone(); CentralEntity = loc.getWorld().spawn(loc, Chicken.class); - UtilEnt.Vegetate(CentralEntity, true); + UtilEnt.vegetate(CentralEntity, true); UtilEnt.ghost(CentralEntity, true, false); Host.Manager.GetCondition().Factory().Invisible("Sleigh", (LivingEntity) CentralEntity, null, Double.MAX_VALUE, 3, false, false, true); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java index 8bbe45336..cbd84ff1c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java @@ -187,7 +187,7 @@ public class SleighHorse horseId = UtilEnt.getNewEntityId(false); _previousDir = getAngles(_lastFacing.getYaw()); Ent = _lastFacing.getWorld().spawn(_lastFacing.subtract(0, 0.5, 0), Horse.class); - UtilEnt.Vegetate(Ent); + UtilEnt.vegetate(Ent); UtilEnt.ghost(Ent, true, false); Ent.setRemoveWhenFarAway(false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java index 877d36049..0181704a7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java @@ -36,7 +36,7 @@ public class SleighPart Ent.setAgeLock(true); Ent.setRemoveWhenFarAway(false); - UtilEnt.Vegetate(Ent, true); + UtilEnt.vegetate(Ent, true); UtilEnt.ghost(Ent, true, false); sleigh.Host.Manager.GetCondition().Factory().Invisible("Sleigh", Ent, null, Double.MAX_VALUE, 3, false, false, true); @@ -87,7 +87,7 @@ public class SleighPart return null; Skeleton skel = Ent.getWorld().spawn(Ent.getLocation().add(0, 1, 0), Skeleton.class); - UtilEnt.Vegetate(skel); + UtilEnt.vegetate(skel); UtilEnt.ghost(skel, true, false); ItemStack head = new ItemStack(Material.LEATHER_HELMET); @@ -169,7 +169,7 @@ public class SleighPart newTop.setAgeLock(true); newTop.setRemoveWhenFarAway(false); - UtilEnt.Vegetate(newTop, true); + UtilEnt.vegetate(newTop, true); UtilEnt.ghost(newTop, true, false); sleigh.Host.Manager.GetCondition().Factory().Invisible("Sleigh", newTop, null, Double.MAX_VALUE, 3, false, false, true); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/BossSnowmanPattern.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/BossSnowmanPattern.java index 0b0909fd9..b3a571140 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/BossSnowmanPattern.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/BossSnowmanPattern.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.christmas.content; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import mineplex.core.common.util.UtilAction; @@ -9,11 +8,10 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilTime; import mineplex.core.recharge.Recharge; -import nautilus.game.arcade.game.games.christmas.Christmas; + import nautilus.game.arcade.game.games.christmas.parts.Part5; import net.minecraft.server.v1_8_R3.EntityCreature; -import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; import org.bukkit.entity.Player; @@ -116,7 +114,7 @@ public class BossSnowmanPattern Location loc = _spawnA.get(i); Snowman ent = loc.getWorld().spawn(loc, Snowman.class); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); _ents.add(new BossSnowman(ent, loc, _aDir)); } @@ -129,7 +127,7 @@ public class BossSnowmanPattern Location loc = _spawnB.get(i); Snowman ent = loc.getWorld().spawn(loc, Snowman.class); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); _ents.add(new BossSnowman(ent, loc, _bDir)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/CaveGiant.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/CaveGiant.java index 65c5b40d1..98fd71794 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/CaveGiant.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/CaveGiant.java @@ -10,7 +10,6 @@ import nautilus.game.arcade.game.games.christmas.parts.Part4; import org.bukkit.Location; import org.bukkit.Sound; -import org.bukkit.entity.Entity; import org.bukkit.entity.Giant; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; @@ -30,7 +29,7 @@ public class CaveGiant Host.Host.CreatureAllowOverride = true; _ent = loc.getWorld().spawn(loc, Giant.class); Host.Host.CreatureAllowOverride = false; - UtilEnt.Vegetate(_ent); + UtilEnt.vegetate(_ent); _ent.setMaxHealth(300); _ent.setHealth(300); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java index 75aca805b..37404c6a5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/PumpkinKing.java @@ -47,7 +47,7 @@ public class PumpkinKing Host.Host.CreatureAllowOverride = true; _ent = UtilVariant.spawnWitherSkeleton(loc); Host.Host.CreatureAllowOverride = false; - UtilEnt.Vegetate(_ent); + UtilEnt.vegetate(_ent); UtilEnt.ghost(_ent, true, false); _ent.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java index 82b334134..649c3cff4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java @@ -51,7 +51,7 @@ public class SnowmanBoss _heart = _spawn.getWorld().spawn(_spawn, IronGolem.class); _heart.setMaxHealth(1400); _heart.setHealth(1400); - UtilEnt.Vegetate(_heart); + UtilEnt.vegetate(_heart); Host.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java index e65212177..3a6d3c6fd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java @@ -262,7 +262,7 @@ public class SnowmanMaze Snowman ent = loc.getWorld().spawn(loc, Snowman.class); Host.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); _ents.put(ent, new SnowmanWaypoint(ent.getLocation())); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMinion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMinion.java index 19bc79523..0bc2f4d6c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMinion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMinion.java @@ -20,7 +20,7 @@ public class SnowmanMinion public SnowmanMinion(Snowman ent) { Ent = ent; - UtilEnt.Vegetate(Ent); + UtilEnt.vegetate(Ent); Ent.setMaxHealth(100); Ent.setHealth(Ent.getMaxHealth()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveA.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveA.java index db9a10f0d..71f5f0a68 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveA.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveA.java @@ -96,7 +96,7 @@ public class SnowmanWaveA Host.CreatureAllowOverride = true; Snowman ent = loc.getWorld().spawn(loc, Snowman.class); Host.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); _ents.add(ent); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveB.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveB.java index 0e2568a54..9a73bdde7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveB.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaveB.java @@ -6,7 +6,6 @@ import java.util.Iterator; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilTime; import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.games.christmas.Christmas; import net.minecraft.server.v1_8_R3.EntityCreature; @@ -93,7 +92,7 @@ public class SnowmanWaveB Host.CreatureAllowOverride = true; Snowman ent = loc.getWorld().spawn(loc, Snowman.class); Host.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); _ents.add(ent); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java index 79e1cdd00..776a292f2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java @@ -716,7 +716,7 @@ public class CaptureTheFlag extends TeamGame { boolean authorized = Manager.GetClients().Get(event.getPlayer()).GetRank().has(Rank.JNR_DEV); - if (Manager.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + if (UtilServer.isTestServer()) if (Manager.GetClients().Get(event.getPlayer()).GetRank().has(Rank.SNR_MODERATOR)) authorized = true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonriders/DragonData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonriders/DragonData.java index 50df5fe35..0a6a50d84 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonriders/DragonData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonriders/DragonData.java @@ -41,7 +41,7 @@ public class DragonData //Spawn Dragon manager.GetGame().CreatureAllowOverride = true; Dragon = rider.getWorld().spawn(rider.getLocation(), EnderDragon.class); - UtilEnt.Vegetate(Dragon); + UtilEnt.vegetate(Dragon); manager.GetGame().CreatureAllowOverride = false; rider.getWorld().playSound(rider.getLocation(), Sound.ENDERDRAGON_GROWL, 20f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/Dragons.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/Dragons.java index 2ec7e7daa..734b84444 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/Dragons.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/Dragons.java @@ -155,7 +155,7 @@ public class Dragons extends SoloGame { CreatureAllowOverride = true; EnderDragon ent = GetSpectatorLocation().getWorld().spawn(_dragonSpawns.get(0), EnderDragon.class); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); CreatureAllowOverride = false; ent.getWorld().playSound(ent.getLocation(), Sound.ENDERDRAGON_GROWL, 20f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/DragonsTeams.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/DragonsTeams.java index b088fe019..4ad55f0ee 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/DragonsTeams.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragons/DragonsTeams.java @@ -156,7 +156,7 @@ public class DragonsTeams extends TeamGame { CreatureAllowOverride = true; EnderDragon ent = GetSpectatorLocation().getWorld().spawn(_dragonSpawns.get(0), EnderDragon.class); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); CreatureAllowOverride = false; ent.getWorld().playSound(ent.getLocation(), Sound.ENDERDRAGON_GROWL, 20f, 1f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java index 59dd19d6c..3cfdd7348 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java @@ -172,7 +172,7 @@ public class Gladiators extends SoloGame DisguisePlayer player = new DisguisePlayer(zombie, (zombie.equals(zombie1) ? tiger : random)); Manager.GetDisguise().disguise(player); - UtilEnt.Vegetate(zombie); + UtilEnt.vegetate(zombie); zombie.getEquipment().setHelmet(ArenaType.ORANGE.getLoadout().getHelmet()); zombie.getEquipment().setChestplate(ArenaType.ORANGE.getLoadout().getChestplate()); zombie.getEquipment().setLeggings(ArenaType.ORANGE.getLoadout().getLeggings()); @@ -1115,6 +1115,7 @@ public class Gladiators extends SoloGame @Override public void disable() { + super.disable(); _hotbarEditor.deregisterSelf(); // De-register as listener _hotbarEditor.onDisable(); // Fully disable } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/hotbar/HotbarEditor.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/hotbar/HotbarEditor.java index da6897997..88b9411c9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/hotbar/HotbarEditor.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/hotbar/HotbarEditor.java @@ -25,6 +25,7 @@ import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.itemstack.ItemBuilder; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -124,9 +125,8 @@ public class HotbarEditor extends MiniPlugin { ItemStack item = event.getItem(); - if (item != null && item.isSimilar(_item)) + if (UtilItem.isSimilar(item, _item, UtilItem.ItemAttribute.NAME)) { - HotbarInventory.open(event.getPlayer(), this); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java index d7c3b2c49..643d644e9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/Gravity.java @@ -29,7 +29,6 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; @@ -44,7 +43,6 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.recharge.Recharge; @@ -333,12 +331,12 @@ public class Gravity extends SoloGame this.CreatureAllowOverride = false; slime.setSize(1); - UtilEnt.Vegetate(slime, true); + UtilEnt.vegetate(slime, true); UtilEnt.ghost(slime, true, false); GravityHook hook = new GravityHook(this, slime, 4, velocity); - UtilEnt.Leash(hook.Base, player, false, false); + UtilEnt.leash(hook.Base, player, false, false); _hooks.put(player, hook); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java index 34c83e330..7b68f58d1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gravity/GravityObject.java @@ -9,7 +9,6 @@ import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBat; import nautilus.game.arcade.game.games.gravity.objects.*; -import org.bukkit.Effect; import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -58,7 +57,7 @@ public abstract class GravityObject Bat.setSitting(true); Host.Manager.GetDisguise().disguise(Bat); - UtilEnt.Vegetate(Base, true); + UtilEnt.vegetate(Base, true); //UtilEnt.ghost(Base, true, true); Host.Manager.GetCondition().Factory().Invisible(null, Base, null, 9999, 1, false, false, false); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java index cff83a8df..b2d3b7431 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween/creatures/PumpkinKing.java @@ -27,7 +27,6 @@ import nautilus.game.arcade.game.games.halloween.Halloween; import nautilus.game.arcade.game.games.halloween.HalloweenAudio; import net.minecraft.server.v1_8_R3.EntityArrow; import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.Navigation; import net.minecraft.server.v1_8_R3.NavigationAbstract; import org.bukkit.Effect; @@ -391,7 +390,7 @@ public class PumpkinKing extends CreatureBase _minions.add(skel); - UtilEnt.Vegetate(skel); + UtilEnt.vegetate(skel); } _minionSpawn = false; @@ -646,7 +645,7 @@ public class PumpkinKing extends CreatureBase Blaze ent = GetEntity().getWorld().spawn(GetEntity().getLocation().add(0, 6, 0), Blaze.class); ent.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN)); _shields.add(ent); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); //ent.setSize(1); Host.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/Halloween2016.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/Halloween2016.java index 2240ee244..12c810ee7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/Halloween2016.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/Halloween2016.java @@ -245,7 +245,7 @@ public class Halloween2016 extends Halloween CreatureAllowOverride = true; ArmorStand bat = doorSchematicLocation.getWorld().spawn(doorSchematicLocation, ArmorStand.class); CreatureAllowOverride = false; - UtilEnt.Vegetate(bat, true); + UtilEnt.vegetate(bat, true); UtilEnt.setAI(bat, false); UtilEnt.setTickWhenFarAway(bat, true); bat.setRemoveWhenFarAway(false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobGiant.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobGiant.java index 6f6a41af4..05e9dc7af 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobGiant.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobGiant.java @@ -57,7 +57,7 @@ public class MobGiant extends CryptBreaker ent.setHealth(ent.getMaxHealth()); UtilEnt.setBoundingBox(_pathDummy, 0, 0); - UtilEnt.Vegetate(_pathDummy, true); + UtilEnt.vegetate(_pathDummy, true); UtilEnt.setStepHeight(_pathDummy, 1); //Prevent other mobs from pushing the giant diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobPumpkinPrince.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobPumpkinPrince.java index a09970660..0675e2841 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobPumpkinPrince.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobPumpkinPrince.java @@ -110,7 +110,7 @@ public class MobPumpkinPrince extends CreatureBase implements Listener ((CraftZombie)_horse).getHandle().b(true); _horse.setPassenger(ent); - UtilEnt.Vegetate(_horse); + UtilEnt.vegetate(_horse); UtilServer.RegisterEvents(this); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobWitch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobWitch.java index 3342f1f96..64f3ea607 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobWitch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/creatures/MobWitch.java @@ -132,7 +132,7 @@ public class MobWitch extends CreatureBase for(int i = 0; i < BATS_BURST; i++) { Bat bat = GetEntity().getWorld().spawn(GetEntity().getEyeLocation(), Bat.class); - UtilEnt.Vegetate(bat); + UtilEnt.vegetate(bat); _bats.add(bat); addEntityPart(bat); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/wave/WaveBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/wave/WaveBoss.java index c390473bc..43315155c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/wave/WaveBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/halloween2016/wave/WaveBoss.java @@ -228,7 +228,7 @@ public class WaveBoss extends WaveBase implements Listener _pumpkinKing.setCustomName(C.cYellow + C.Bold + "Pumpking King"); _pumpkinKing.setCustomNameVisible(true); - UtilEnt.Vegetate(_pumpkinKing); + UtilEnt.vegetate(_pumpkinKing); _pumpkinKing.getWorld().strikeLightningEffect(_pumpkinKing.getLocation()); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/Spawner.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/Spawner.java index f55764201..6c244fadb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/Spawner.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/data/Spawner.java @@ -80,7 +80,7 @@ public class Spawner if (canSpawnMob(l)) { Entity e = Host.getArcadeManager().GetCreature().SpawnEntity(l, _toSpawn); - UtilEnt.Vegetate(e); + UtilEnt.vegetate(e); spawned = true; _lastSpawned = System.currentTimeMillis(); continue; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/PathfinderData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/PathfinderData.java index 97d6ec69a..377712a58 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/PathfinderData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/PathfinderData.java @@ -24,7 +24,7 @@ public class PathfinderData { Wither = wither; UtilEnt.ghost(wither, true, false); - UtilEnt.Vegetate(wither, false); + UtilEnt.vegetate(wither, false); Location temp = wither.getLocation(); temp.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(wither.getLocation(), target))); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java index acbdded52..396a991aa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minecraftleague/variation/wither/data/WitherMinionManager.java @@ -125,7 +125,7 @@ public class WitherMinionManager implements Listener Skeleton e = UtilVariant.spawnWitherSkeleton(chosen); _entity = (Skeleton)e; UtilEnt.ghost(e, true, false); - UtilEnt.Vegetate(e); + UtilEnt.vegetate(e); e.setCustomName(C.cRed + "Wither Skeleton"); ((Skeleton)e).setMaxHealth(/*100*/65); ((Skeleton)e).setHealth(/*100*/65); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/GunModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/GunModule.java index ae6606a81..b2c3a3f01 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/GunModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/GunModule.java @@ -758,6 +758,9 @@ public class GunModule implements Listener @EventHandler(priority = EventPriority.MONITOR) public void instantBulletHit(final ProjectileHitEvent event) { + if (!_host.IsLive()) + return; + if (!(event.getEntity() instanceof Arrow)) return; @@ -946,6 +949,7 @@ public class GunModule implements Listener } event.SetKnockback(false); + event.setMetadata("gunType", "KNIFE"); } } @@ -1057,6 +1061,7 @@ public class GunModule implements Listener event.SetIgnoreArmor(true); Bukkit.getPluginManager().callEvent(new CustomGunDamageEvent(bullet, event.GetDamageePlayer(), hitArea == 1, event, this)); + event.setMetadata("gunType", bullet.Gun.getGunStats().name()); } public int getArrowHitArea(Player damagee, Location origin, Vector trajectory) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/Minestrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/Minestrike.java index 17ddcab9f..7dfd7593d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/Minestrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/Minestrike.java @@ -7,6 +7,7 @@ import java.util.HashSet; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -248,9 +249,8 @@ public class Minestrike extends TeamGame GameTeam team = GetTeam(event.getPlayer()); if (team == null) return; - - GadgetManager gadgetManager = Manager.getCosmeticManager().getGadgetManager(); - GameModifierMineStrikeSkin knifeSkin = (GameModifierMineStrikeSkin) gadgetManager.getActiveGameModifier(event.getPlayer(), + GadgetManager gadgetManager = Manager.getCosmeticManager().getGadgetManager(); + GameModifierMineStrikeSkin knifeSkin = (GameModifierMineStrikeSkin) gadgetManager.getActiveGameModifier(event.getPlayer(), GameModifierType.MineStrike, GameModifierMineStrikeSkin.getWeaponFilter("Knife")); Material mat = Material.IRON_AXE; @@ -270,6 +270,7 @@ public class Minestrike extends TeamGame { if (IsAlive(event.getPlayer())) { + event.getPlayer().setGameMode(GameMode.ADVENTURE); //Pistol Gun gun = new Gun(GunStats.GLOCK_18, _gunModule); _gunModule.registerGun(gun, event.getPlayer()); @@ -290,6 +291,7 @@ public class Minestrike extends TeamGame { if (IsAlive(event.getPlayer())) { + event.getPlayer().setGameMode(GameMode.ADVENTURE); //Pistol Gun gun = new Gun(GunStats.P2000, _gunModule); _gunModule.registerGun(gun, event.getPlayer()); @@ -401,19 +403,26 @@ public class Minestrike extends TeamGame if (GetTeam(killed).equals(GetTeam(killer))) return; - int amount = 300; + int amount; - if (event.GetLog().GetLastDamager().GetReason().contains("AWP")) - amount = 100; - - else if (event.GetLog().GetLastDamager().GetReason().contains("PP-Bizon")) - amount = 600; - - else if (event.GetLog().GetLastDamager().GetReason().contains("Nova")) - amount = 900; - - else if (event.GetLog().GetLastDamager().GetReason().contains("Knife")) - amount = 1500; + String gunType = (String) event.GetLog().GetLastDamager().GetDamage().getFirst().getMetadata().get("gunType"); + switch (gunType) + { + case "AWP": + amount = 100; + break; + case "PPBIZON": + amount = 600; + break; + case "NOVA": + amount = 900; + break; + case "KNIFE": + amount = 1500; + break; + default: + amount = 300; + } _shopManager.addMoney(killer, amount, "kill with " + event.GetLog().GetLastDamager().GetReason()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java index 550d4df3f..cc694d4f9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java @@ -588,7 +588,11 @@ public class Gun extends StrikeItem { return _gunStats.getGunType(); } - + + public GunStats getGunStats() + { + return _gunStats; + } public String getBaseStatName(boolean withPlayerName) { return (withPlayerName ? getOwnerName() + "." : "") + getName() + "." + _activeSkinName; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/other/ZombieWrapper.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/other/ZombieWrapper.java index 5e7e30c7f..ab5053d71 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/other/ZombieWrapper.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/other/ZombieWrapper.java @@ -35,7 +35,7 @@ public class ZombieWrapper _wrapper = (Zombie) world.spawnEntity(center.clone().add(0.5, 1, 0.5), EntityType.ZOMBIE); - UtilEnt.Vegetate(_wrapper); + UtilEnt.vegetate(_wrapper); UtilEnt.ghost(_wrapper, true, false); _wrapper.setCustomName(C.cRedB + "Infected Zombie"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeRedLightGreenLight.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeRedLightGreenLight.java index df3f3e458..8df1e66cd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeRedLightGreenLight.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeRedLightGreenLight.java @@ -230,7 +230,7 @@ public class ChallengeRedLightGreenLight extends Challenge Location spawn = getCenter().add(VILLAGER_X, MAP_HEIGHT, 0); _villager = (Villager) getCenter().getWorld().spawnEntity(spawn, EntityType.VILLAGER); - UtilEnt.Vegetate(_villager); + UtilEnt.vegetate(_villager); UtilEnt.CreatureLook(_villager, Host.GetSpectatorLocation()); UtilEnt.ghost(_villager, true, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeVolleyPig.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeVolleyPig.java index 9c9f7c5d7..5b3e32ee5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeVolleyPig.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/mineware/challenge/type/ChallengeVolleyPig.java @@ -241,7 +241,7 @@ public class ChallengeVolleyPig extends TeamChallenge getCenter().add(PIG_CENTER_X, PIG_CENTER_Y, PIG_CENTER_Z).subtract(getArenaSize(), 0, 0), Pig.class); - UtilEnt.Vegetate(_pig); + UtilEnt.vegetate(_pig); Host.CreatureAllow = false; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monsterleague/Ball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monsterleague/Ball.java index 65af10219..49c6bee11 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monsterleague/Ball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monsterleague/Ball.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.games.monsterleague; import java.util.ArrayList; -import java.util.HashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; @@ -17,7 +16,6 @@ import mineplex.core.recharge.Recharge; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.games.monsterleague.kits.LeagueKit; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.EntityEffect; @@ -159,7 +157,7 @@ public class Ball _ball = _ballSpawn.getWorld().spawn(_ballSpawn, Slime.class); _ball.setSize(2); - UtilEnt.Vegetate(_ball); + UtilEnt.vegetate(_ball); UtilEnt.ghost(_ball, false, false); _host.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monstermaze/Maze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monstermaze/Maze.java index 1eef92624..8c020184c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monstermaze/Maze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/monstermaze/Maze.java @@ -530,7 +530,7 @@ public class Maze implements Listener _host.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent, true); + UtilEnt.vegetate(ent, true); UtilEnt.ghost(ent, true, false); _ents.put(ent, new MazeMobWaypoint(ent.getLocation())); @@ -568,7 +568,7 @@ public class Maze implements Listener _host.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent, true); + UtilEnt.vegetate(ent, true); UtilEnt.ghost(ent, true, false); _ents.put(ent, new MazeMobWaypoint(ent.getLocation())); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/PlayerCopyPaintball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/PlayerCopyPaintball.java index a42d2592b..234e96287 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/PlayerCopyPaintball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/PlayerCopyPaintball.java @@ -45,7 +45,7 @@ public class PlayerCopyPaintball UtilEnt.ghost(_ent, true, false); - UtilEnt.Vegetate(_ent); + UtilEnt.vegetate(_ent); _ent.setArms(true); _ent.setBasePlate(false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java index 05161e8d3..a109225e3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/SheepData.java @@ -57,7 +57,7 @@ public class SheepData StuckLocation = Sheep.getLocation(); StuckTime = System.currentTimeMillis(); - UtilEnt.Vegetate(Sheep); + UtilEnt.vegetate(Sheep); UtilEnt.ghost(Sheep, true, false); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/chicken/PerkChickenRocket.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/chicken/PerkChickenRocket.java index 2c04bff35..a671bd243 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/chicken/PerkChickenRocket.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/chicken/PerkChickenRocket.java @@ -105,7 +105,7 @@ public class PerkChickenRocket extends SmashPerk ent.getLocation().setYaw(player.getLocation().getYaw()); ent.setBaby(); ent.setAgeLock(true); - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); Manager.GetGame().CreatureAllowOverride = false; _data.add(new ChickenMissileData(player, ent)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/enderman/SmashEnderman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/enderman/SmashEnderman.java index 254343602..ec4d33f6b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/enderman/SmashEnderman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/enderman/SmashEnderman.java @@ -54,7 +54,7 @@ public class SmashEnderman extends SmashUltimate Manager.GetGame().CreatureAllowOverride = true; EnderDragon dragon = player.getWorld().spawn(player.getLocation().add(0, 5, 0), EnderDragon.class); - UtilEnt.Vegetate(dragon); + UtilEnt.vegetate(dragon); Manager.GetGame().CreatureAllowOverride = false; dragon.setCustomName(C.cYellow + player.getName() + "'s Dragon"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/pig/PerkPigBaconBomb.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/pig/PerkPigBaconBomb.java index 9e863f0a0..c14f70a82 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/pig/PerkPigBaconBomb.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/pig/PerkPigBaconBomb.java @@ -125,7 +125,7 @@ public class PerkPigBaconBomb extends SmashPerk Manager.GetGame().CreatureAllowOverride = false; pig.setBaby(); - UtilEnt.Vegetate(pig); + UtilEnt.vegetate(pig); UtilEnt.ghost(pig, true, false); UUID key = player.getUniqueId(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/snowman/SmashSnowman.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/snowman/SmashSnowman.java index 83823308a..d63314583 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/snowman/SmashSnowman.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/snowman/SmashSnowman.java @@ -69,7 +69,7 @@ public class SmashSnowman extends SmashUltimate Snowman ent = player.getWorld().spawn(player.getEyeLocation(), Snowman.class); game.CreatureAllowOverride = false; - UtilEnt.Vegetate(ent); + UtilEnt.vegetate(ent); UtilEnt.ghost(ent, true, false); ent.setMaxHealth(TURRET_HEALTH); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/wolf/PerkWolf.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/wolf/PerkWolf.java index 74501dd68..4482fa932 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/wolf/PerkWolf.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/perks/wolf/PerkWolf.java @@ -113,7 +113,7 @@ public class PerkWolf extends SmashPerk wolf.setAngry(true); - UtilEnt.Vegetate(wolf); + UtilEnt.vegetate(wolf); wolf.setMaxHealth(WOLF_HEALTH); wolf.setHealth(wolf.getMaxHealth()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java index 0c4b96110..d09fc466a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/snake/Snake.java @@ -12,7 +12,6 @@ import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -23,13 +22,9 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.util.Vector; -import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.Navigation; -import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; @@ -53,7 +48,6 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GamePrepareCountdownCommence; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.SoloGame; -import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.games.snake.events.SlimeUpgradeEvent; import nautilus.game.arcade.game.games.snake.events.TailGrowEvent; import nautilus.game.arcade.game.games.snake.kits.KitInvulnerable; @@ -137,7 +131,7 @@ public class Snake extends SoloGame sheep.setColor(DyeColor.getByDyeData((byte) (i % 16))); sheep.setPassenger(player); - UtilEnt.Vegetate(sheep); + UtilEnt.vegetate(sheep); _tail.put(player, new ArrayList()); _tail.get(player).add(sheep); @@ -384,7 +378,7 @@ public class Snake extends SoloGame Slime pig = loc.getWorld().spawn(loc, Slime.class); this.CreatureAllowOverride = false; pig.setSize(2); - UtilEnt.Vegetate(pig); + UtilEnt.vegetate(pig); _food.add(pig); } @@ -454,7 +448,7 @@ public class Snake extends SoloGame //Sets yaw/pitch tail.teleport(loc); - UtilEnt.Vegetate(tail); + UtilEnt.vegetate(tail); UtilEnt.ghost(tail, true, false); _tail.get(player).add(tail); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java index f491bfa88..7d711fdc7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java @@ -52,7 +52,7 @@ public class NpcManager implements Listener LivingEntity npc = (LivingEntity) spawn.getWorld().spawn(spawn, getDisguiseType().getEntityClass()); npc.setCanPickupItems(false); npc.setRemoveWhenFarAway(false); - UtilEnt.Vegetate(npc); + UtilEnt.vegetate(npc); getGame().CreatureAllowOverride = false; return npc; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java index 70cce7b1c..f640c0681 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/powerups/PowerUpItem.java @@ -9,11 +9,9 @@ import mineplex.core.updater.event.*; import org.bukkit.*; import org.bukkit.block.*; import org.bukkit.entity.*; -import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.inventory.*; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.*; /** * Created by Tim on 8/5/2014. @@ -106,7 +104,7 @@ public class PowerUpItem _powerUpManager.getGame().CreatureAllowOverride = true; _npc = itemLocation.getWorld().spawn(itemLocation, Skeleton.class); _powerUpManager.getGame().CreatureAllowOverride = false; - UtilEnt.Vegetate(_npc); + UtilEnt.vegetate(_npc); UtilEnt.ghost(_npc, true, false); _npc.getEquipment().setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/SpeedBuilders.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/SpeedBuilders.java index a1c7510d1..1d35397e3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/SpeedBuilders.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/SpeedBuilders.java @@ -341,7 +341,7 @@ public class SpeedBuilders extends SoloGame Entity entity = loc.getWorld().spawnEntity(loc, mobData.EntityType); - UtilEnt.Vegetate(entity, true); + UtilEnt.vegetate(entity, true); UtilEnt.ghost(entity, true, false); _middleMobs.add(entity); @@ -1610,7 +1610,7 @@ public class SpeedBuilders extends SoloGame Entity entity = block.getWorld().spawnEntity(block.getLocation().add(0.5, 0, 0.5), type); - UtilEnt.Vegetate(entity, true); + UtilEnt.vegetate(entity, true); UtilEnt.ghost(entity, true, false); CreatureAllowOverride = false; @@ -1640,7 +1640,7 @@ public class SpeedBuilders extends SoloGame if (!Manager.GetClients().Get(event.getPlayer()).GetRank().has(event.getPlayer(), Rank.MAPDEV, true)) return; - if (!Manager.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + if (!UtilServer.isTestServer()) { UtilPlayer.message(event.getPlayer(), F.main("Build", C.cYellow + "You can only use this on testing servers!")); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/data/RecreationData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/data/RecreationData.java index 2bf2488c0..d832ccd21 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/data/RecreationData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/speedbuilders/data/RecreationData.java @@ -191,7 +191,7 @@ public class RecreationData Entity entity = loc.getWorld().spawnEntity(loc, mobData.EntityType); - UtilEnt.Vegetate(entity, true); + UtilEnt.vegetate(entity, true); UtilEnt.ghost(entity, true, false); Mobs.add(entity); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index 4cc2ede9b..9b09826a0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -1,11 +1,28 @@ package nautilus.game.arcade.game.games.survivalgames; -import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Random; + +import net.minecraft.server.v1_8_R3.EntityLargeFireball; +import net.minecraft.server.v1_8_R3.PacketPlayOutScoreboardTeam; +import net.minecraft.server.v1_8_R3.WorldServer; import org.apache.commons.lang.StringUtils; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Effect; +import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.WorldBorder; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; @@ -32,12 +49,12 @@ import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.LeavesDecayEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.ItemSpawnEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.inventory.CraftItemEvent; @@ -72,14 +89,15 @@ import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilWorld; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.loot.*; +import mineplex.core.loot.ChestLoot; +import mineplex.core.loot.RandomItem; import mineplex.core.recharge.Recharge; import mineplex.core.titles.tracks.LuckyTrack; import mineplex.core.titles.tracks.UnluckyTrack; @@ -89,17 +107,24 @@ import mineplex.core.visibility.VisibilityManager; import mineplex.minecraft.game.core.combat.CombatComponent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameTeam; -import nautilus.game.arcade.game.games.survivalgames.kit.*; +import nautilus.game.arcade.game.games.survivalgames.kit.KitArcher; +import nautilus.game.arcade.game.games.survivalgames.kit.KitAssassin; +import nautilus.game.arcade.game.games.survivalgames.kit.KitAxeman; +import nautilus.game.arcade.game.games.survivalgames.kit.KitBarbarian; +import nautilus.game.arcade.game.games.survivalgames.kit.KitBeastmaster; +import nautilus.game.arcade.game.games.survivalgames.kit.KitBomber; +import nautilus.game.arcade.game.games.survivalgames.kit.KitBrawler; +import nautilus.game.arcade.game.games.survivalgames.kit.KitHorseman; +import nautilus.game.arcade.game.games.survivalgames.kit.KitKnight; +import nautilus.game.arcade.game.games.survivalgames.kit.KitLooter; +import nautilus.game.arcade.game.games.survivalgames.kit.KitNecromancer; import nautilus.game.arcade.kit.Kit; -import net.minecraft.server.v1_8_R3.EntityLargeFireball; -import net.minecraft.server.v1_8_R3.PacketPlayOutScoreboardTeam; -import net.minecraft.server.v1_8_R3.ScoreboardTeam; -import net.minecraft.server.v1_8_R3.WorldServer; public abstract class SurvivalGames extends Game { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modes/StrikeGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modes/StrikeGames.java index c5deefa69..304140edd 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modes/StrikeGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/modes/StrikeGames.java @@ -80,7 +80,7 @@ public class StrikeGames extends SoloSurvivalGames super(manager, new Kit[] { new KitPlayer(manager) - }, GameType.Brawl); + }, GameType.StrikeGames); Damage = false; @@ -88,6 +88,8 @@ public class StrikeGames extends SoloSurvivalGames _peacePhase = 20000; + HungerSet = 20; + _gunModule = new GunModule(this); _gunModule.EnableCleaning = false; _gunModule.EnableDrop = false; @@ -213,14 +215,6 @@ public class StrikeGames extends SoloSurvivalGames public void setupLoot() { - // Food - getBaseLoot().addLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 3)); - getBaseLoot().addLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 2)); - getBaseLoot().addLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 2)); - getBaseLoot().addLoot(new RandomItem(Material.MUSHROOM_SOUP, 15, 1, 1)); - getBaseLoot().addLoot(new RandomItem(Material.WHEAT, 30, 1, 6)); - getBaseLoot().addLoot(new RandomItem(Material.ROTTEN_FLESH, 40, 1, 6)); - // Weapons getBaseLoot().addLoot(new RandomItem(Material.WOOD_SWORD, 70)); getBaseLoot().addLoot(new RandomItem(Material.STONE_SWORD, 30)); @@ -253,7 +247,7 @@ public class StrikeGames extends SoloSurvivalGames getBaseLoot().addLoot(new RandomItem(Material.EGG, 30, 1, 2)); // Misc - getBaseLoot().addLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); + //getBaseLoot().addLoot(new RandomItem(Material.EXP_BOTTLE, 30, 1, 2)); getBaseLoot().addLoot(new RandomItem(Material.COMPASS, 20)); getBaseLoot().addLoot(new RandomItem(Material.STICK, 30, 1, 2)); getBaseLoot().addLoot(new RandomItem(Material.BOAT, 15)); @@ -264,16 +258,6 @@ public class StrikeGames extends SoloSurvivalGames getSpawnLoot().cloneLoot(getBaseLoot()); - // Food - getSpawnLoot().addLoot(new RandomItem(Material.BAKED_POTATO, 30, 1, 5)); - getSpawnLoot().addLoot(new RandomItem(Material.CAKE, 30)); - getSpawnLoot().addLoot(new RandomItem(Material.MUSHROOM_SOUP, 30, 1, 1)); - getSpawnLoot().addLoot(new RandomItem(Material.COOKED_BEEF, 30, 1, 3)); - getSpawnLoot().addLoot(new RandomItem(Material.COOKED_CHICKEN, 30, 1, 3)); - getSpawnLoot().addLoot(new RandomItem(Material.COOKED_FISH, 30, 1, 6)); - getSpawnLoot().addLoot(new RandomItem(Material.COOKIE, 30)); - getSpawnLoot().addLoot(new RandomItem(Material.PUMPKIN_PIE, 30, 1, 3)); - // Loot for chests in spawn // Weaponry and ores getSpawnLoot().addLoot(new RandomItem(Material.STONE_SWORD, 30)); @@ -303,23 +287,7 @@ public class StrikeGames extends SoloSurvivalGames getCrateLoot().addLoot(new RandomItem(Material.DIAMOND_SWORD, 8)); getCrateLoot().addLoot(new RandomItem(Material.GOLD_SPADE, 12)); - // Cooked furnace - getFurnace().addLoot(new RandomItem(Material.COOKED_BEEF, 3, 1, 2)); - getFurnace().addLoot(new RandomItem(Material.COOKED_CHICKEN, 3, 1, 2)); - getFurnace().addLoot(new RandomItem(Material.COOKED_FISH, 3, 1, 2)); - getFurnace().addLoot(new RandomItem(Material.BAKED_POTATO, 3, 1, 1)); - getFurnace().addLoot(new RandomItem(Material.PUMPKIN_PIE, 3, 1, 1)); - getFurnace().addLoot(new RandomItem(Material.IRON_INGOT, 1, 1, 1)); - - // Raw furnace - getRawFurnace().addLoot(new RandomItem(Material.RAW_BEEF, 1, 1, 3)); - getRawFurnace().addLoot(new RandomItem(Material.RAW_CHICKEN, 1, 1, 3)); - getRawFurnace().addLoot(new RandomItem(Material.RAW_FISH, 1, 1, 3)); - // Deathmatch Loot - getDeathMatch().addLoot(new RandomItem(Material.PUMPKIN_PIE, 4)); - getDeathMatch().addLoot(new RandomItem(Material.BAKED_POTATO, 4)); - getDeathMatch().addLoot(new RandomItem(Material.CAKE, 4)); getDeathMatch().addLoot(new RandomItem(Material.WOOD_SWORD, 3)); getDeathMatch().addLoot(new RandomItem(Material.STONE_SWORD, 1)); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/Minion.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/Minion.java index 51df05364..88fa186fb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/Minion.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/Minion.java @@ -314,7 +314,7 @@ public class Minion private void path() { - UtilEnt.Vegetate(_entity); + UtilEnt.vegetate(_entity); UtilEnt.silence(_entity, true); UtilEnt.ghost(_entity, true, false); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/TypeWars.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/TypeWars.java index 723d2591e..47ad7eeea 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/TypeWars.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/typewars/TypeWars.java @@ -233,7 +233,7 @@ public class TypeWars extends TeamGame _giantLocs.put(giant, loc.clone()); this.CreatureAllowOverride = false; giant.setRemoveWhenFarAway(false); - UtilEnt.Vegetate(giant, true); + UtilEnt.vegetate(giant, true); UtilEnt.ghost(giant, true, false); ItemStack helmet = new ItemStack(Material.LEATHER_HELMET); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/Valentines.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/Valentines.java index 26b6728e2..aa06acba9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/Valentines.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/Valentines.java @@ -18,7 +18,6 @@ import mineplex.core.common.util.UtilTextBottom; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.noteblock.INoteVerifier; import mineplex.core.noteblock.NBSReader; import mineplex.core.noteblock.NotePlayer; import mineplex.core.noteblock.NoteSong; @@ -167,7 +166,7 @@ public class Valentines extends SoloGame _cow.setCustomName(C.cGreen + C.Bold + _cowName); _cow.setCustomNameVisible(true); - UtilEnt.Vegetate(_cow); + UtilEnt.vegetate(_cow); UtilEnt.ghost(_cow, true, false); CreatureAllowOverride = false; } @@ -410,7 +409,7 @@ public class Valentines extends SoloGame Pig pig = loc.getWorld().spawn(loc, Pig.class); _pigs.put(pig, pig.getLocation()); - UtilEnt.Vegetate(pig); + UtilEnt.vegetate(pig); //Give Item if (toSpawn > 1) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/tutorial/TutorialValentines.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/tutorial/TutorialValentines.java index 386bc5fe1..6ec02a900 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/tutorial/TutorialValentines.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/valentines/tutorial/TutorialValentines.java @@ -20,7 +20,6 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.valentines.ValItem; import nautilus.game.arcade.game.games.valentines.Valentines; import nautilus.game.arcade.gametutorial.GameTutorial; import nautilus.game.arcade.gametutorial.TutorialPhase; @@ -110,7 +109,7 @@ public class TutorialValentines extends GameTutorial //Spawn Pig pig = _pigSpawn.getWorld().spawn(_pigSpawn, Pig.class); - UtilEnt.Vegetate(pig); + UtilEnt.vegetate(pig); //Item @@ -183,12 +182,12 @@ public class TutorialValentines extends GameTutorial _cowBoy = _pigSpawn.getWorld().spawn(Host.WorldData.GetDataLocs("BROWN").get(0), Cow.class); _cowBoy.setCustomName(C.cGreenB + "Calvin"); _cowBoy.setCustomNameVisible(true); - UtilEnt.Vegetate(_cowBoy); + UtilEnt.vegetate(_cowBoy); _cowGirl = _pigSpawn.getWorld().spawn(Host.WorldData.GetDataLocs("RED").get(0), MushroomCow.class); _cowGirl.setCustomName(C.cRedB + "Moolanie"); _cowGirl.setCustomNameVisible(true); - UtilEnt.Vegetate(_cowGirl); + UtilEnt.vegetate(_cowGirl); Host.CreatureAllowOverride = false; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/PlayerCopyWither.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/PlayerCopyWither.java index d1348569e..41da8752e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/PlayerCopyWither.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wither/PlayerCopyWither.java @@ -28,7 +28,7 @@ public class PlayerCopyWither UtilEnt.ghost(_ent, true, false); - UtilEnt.Vegetate(_ent); + UtilEnt.vegetate(_ent); //Armor _ent.getEquipment().setArmorContents(owner.getInventory().getArmorContents()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java index 6a384727d..e83bb4840 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/WizardSpellMenu.java @@ -1,13 +1,14 @@ package nautilus.game.arcade.game.games.wizards; -import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.lifetimes.Lifetime; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameComponent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -20,27 +21,24 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; -public class WizardSpellMenu extends MiniPlugin +public class WizardSpellMenu extends GameComponent { - private Wizards _wizards; private WizardSpellMenuShop _wizardShop; private ItemStack _wizardSpells = new ItemBuilder(Material.ENCHANTED_BOOK).setTitle(C.cGold + "Wizard Spells") .addLore(C.cGray + "Right click with this to view the spells").build(); - public WizardSpellMenu(String moduleName, JavaPlugin plugin, Wizards wizards) + public WizardSpellMenu(Wizards wizards) { - super("Wizard Spell Menu", plugin); + super(wizards); _wizardShop = new WizardSpellMenuShop(this, wizards.getArcadeManager().GetClients(), wizards.getArcadeManager() .GetDonation(), wizards); - _wizards = wizards; } @EventHandler public void onJoin(PlayerJoinEvent event) { - if (_wizards.GetState() == GameState.Recruit || _wizards.GetState() == GameState.Live) + if (getGame().GetState() == GameState.Recruit || getGame().GetState() == GameState.Live) { event.getPlayer().getInventory().setItem(0, _wizardSpells); } @@ -49,11 +47,11 @@ public class WizardSpellMenu extends MiniPlugin @EventHandler public void onDeath(final PlayerDeathEvent event) { - Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() + Bukkit.getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), new Runnable() { public void run() { - if (_wizards.IsLive()) + if (getGame().IsLive()) { event.getEntity().getInventory().setItem(0, _wizardSpells); } @@ -66,7 +64,7 @@ public class WizardSpellMenu extends MiniPlugin { if (event.getMessage().equalsIgnoreCase("/spec")) { - if (!_wizards.IsAlive(event.getPlayer()) + if (!getGame().IsAlive(event.getPlayer()) && !UtilInv.contains(event.getPlayer(), _wizardSpells.getType(), (byte) 0, 1)) { event.getPlayer().getInventory().setItem(0, _wizardSpells); @@ -88,7 +86,7 @@ public class WizardSpellMenu extends MiniPlugin { for(Player player : UtilServer.GetPlayers()) { - if (!_wizards.IsAlive(player)) + if (!getGame().IsAlive(player)) { player.getInventory().setItem(0, _wizardSpells); } @@ -100,7 +98,7 @@ public class WizardSpellMenu extends MiniPlugin public void onInteract(PlayerInteractEvent event) { if (event.getAction() != Action.PHYSICAL && event.getAction().name().contains("RIGHT") - && (!_wizards.IsLive() || !_wizards.IsAlive(event.getPlayer()))) + && (!getGame().IsLive() || !getGame().IsAlive(event.getPlayer()))) { ItemStack item = event.getItem(); @@ -112,11 +110,11 @@ public class WizardSpellMenu extends MiniPlugin } } - if (_wizards.IsLive() && _wizards.IsAlive(event.getPlayer())) + if (getGame().IsLive() && getGame().IsAlive(event.getPlayer())) { Player p = event.getPlayer(); - if (p.getInventory().getHeldItemSlot() < _wizards.getWizard(p).getWandsOwned()) + if (p.getInventory().getHeldItemSlot() < getGame().getWizard(p).getWandsOwned()) { if (event.getAction().name().contains("RIGHT")) { @@ -131,5 +129,4 @@ public class WizardSpellMenu extends MiniPlugin } } } - } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java index c4463ea18..5401f66d1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/Wizards.java @@ -153,7 +153,7 @@ public class Wizards extends SoloGame new KitWitchDoctor(manager) }); - _wizard = new WizardSpellMenu("Wizard Spell Menu", getArcadeManager().getPlugin(), this); + _wizard = new WizardSpellMenu(this); AnnounceStay = false; BlockBreak = true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/VersionModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/VersionModule.java index 7e680f1b6..ffeed21ec 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/VersionModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/VersionModule.java @@ -9,6 +9,8 @@ import mineplex.core.common.MinecraftVersion; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; /** @@ -31,7 +33,7 @@ public class VersionModule extends Module if (UtilPlayer.getVersion(player) != _minecraftVersion) { UtilPlayer.message(player, C.cGold + C.Bold + "Please use Minecraft " + _minecraftVersion.friendlyName() + " or newer to play this game!"); - Portal.getInstance().sendPlayerToServer(player, "Lobby"); + Portal.getInstance().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/combatlog/CombatLogNPC.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/combatlog/CombatLogNPC.java index 57f844ef2..974de2053 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/combatlog/CombatLogNPC.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/combatlog/CombatLogNPC.java @@ -1,7 +1,6 @@ package nautilus.game.arcade.game.modules.combatlog; import net.minecraft.server.v1_8_R3.EntityCreeper; -import net.minecraft.server.v1_8_R3.EntitySkeleton; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilTime; @@ -15,14 +14,11 @@ import nautilus.game.arcade.ArcadeManager; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; public class CombatLogNPC @@ -147,7 +143,7 @@ public class CombatLogNPC skel.setFallDistance(player.getFallDistance()); // fixme potion effects, mobs don't target, entity collision (setting to ghost disables arrows and fishing rods), logging while sleeping // best solution to spawn EntityPlayer? - UtilEnt.Vegetate(skel); + UtilEnt.vegetate(skel); UtilEnt.silence(skel, true); skel.getEquipment().setHelmet(player.getInventory().getHelmet()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/page/WhitelistedPage.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/page/WhitelistedPage.java index 101ba9a18..807682f6d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/page/WhitelistedPage.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/page/WhitelistedPage.java @@ -1,7 +1,5 @@ package nautilus.game.arcade.gui.privateServer.page; -import java.util.List; - import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -9,7 +7,9 @@ import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.portal.Intent; import mineplex.core.shop.item.IButton; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.gui.privateServer.PrivateServerShop; @@ -46,8 +46,8 @@ public class WhitelistedPage extends BasePage getPlugin().GetGameHostManager().getWhitelist().remove(s); removeButton(i); getPlayer().sendMessage(F.main("Whitelist", "§e" + s + " §7is no longer whitelisted.")); - if (Bukkit.getPlayer(s)!=null) - getPlugin().GetPortal().sendToHub(Bukkit.getPlayer(s), "You are no longer whitelisted."); + if (Bukkit.getPlayer(s) != null) + getPlugin().GetPortal().sendToHub(Bukkit.getPlayer(s), "You are no longer whitelisted.", Intent.KICK); } }); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java index 8f9f95b5a..bc6d41347 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/Kit.java @@ -166,7 +166,7 @@ public abstract class Kit implements Listener skel.setSkeletonType(SkeletonType.WITHER); } - UtilEnt.Vegetate(entity, true); + UtilEnt.vegetate(entity, true); UtilEnt.ghost(entity, true, false); UtilEnt.setFakeHead(entity, true); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java index 051a3e8d1..9f762f2c7 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkHorsePet.java @@ -103,7 +103,7 @@ public class PerkHorsePet extends Perk horse.setMaxHealth(40); horse.setHealth(40); - UtilEnt.Vegetate(horse); + UtilEnt.vegetate(horse); _horseMap.put(player, horse); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java index 39ed239e9..b0c6ae5f9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameCreationManager.java @@ -87,8 +87,7 @@ public class GameCreationManager implements Listener { if (Manager.GetGame().GetState() == GameState.Dead) { - HandlerList.unregisterAll(Manager.GetGame()); - + Manager.GetGame().disable(); //Schedule Cleanup _ended.add(Manager.GetGame()); @@ -105,15 +104,6 @@ public class GameCreationManager implements Listener while (gameIterator.hasNext()) { Game game = gameIterator.next(); - - game.cleanupModules(); - game.cleanupCommands(); - game.disable(); - - HandlerList.unregisterAll(game); - - for (StatTracker tracker : game.getStatTrackers()) - HandlerList.unregisterAll(tracker); TimingManager.start("GameCreationManager - Attempting Removal - " + game.GetName()); @@ -123,8 +113,7 @@ public class GameCreationManager implements Listener gameIterator.remove(); } else - { - + { boolean removedPlayers = false; if (UtilTime.elapsed(game.GetStateTime(), 20000)) { @@ -154,7 +143,7 @@ public class GameCreationManager implements Listener game.WorldData.Uninitialize(); game.WorldData = null; gameIterator.remove(); - + TimingManager.stop("GameCreationManager - Uninit World - " + game.GetName()); }; } @@ -275,7 +264,7 @@ public class GameCreationManager implements Listener TimingManager.stop("DisplayNext"); TimingManager.start("registerEvents"); - UtilServer.getServer().getPluginManager().registerEvents(Manager.GetGame(), Manager.getPlugin()); + Manager.GetGame().getLifetime().start(GameState.Loading); TimingManager.stop("registerEvents"); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java index 2dd77e929..a82b88e00 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameHostManager.java @@ -35,6 +35,8 @@ import mineplex.core.communities.CommunityManager; import mineplex.core.communities.CommunityRole; import mineplex.core.game.GameCategory; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; @@ -359,9 +361,10 @@ public class GameHostManager implements Listener { UtilPlayer.message(other, C.cGold + C.Bold + string); other.playSound(other.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - Manager.GetPortal().sendPlayerToServer(other, "Lobby"); } - + + Manager.GetPortal().sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); + _hostExpired = expired; } @@ -634,11 +637,11 @@ public class GameHostManager implements Listener if (isCommunityServer()) { - Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Community Server."); + Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Community Server.", Intent.KICK); } else { - Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Private Server."); + Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Private Server.", Intent.KICK); } } @@ -654,11 +657,11 @@ public class GameHostManager implements Listener { if (isCommunityServer()) { - Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Community Server."); + Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Community Server.", Intent.KICK); } else { - Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Private Server."); + Manager.GetPortal().sendToHub(player, "You were removed from this Mineplex Private Server.", Intent.KICK); } } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java index 48f8d6fd2..7e063dd51 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java @@ -33,6 +33,8 @@ import mineplex.core.gadget.types.GadgetType; import mineplex.core.mount.Mount; import mineplex.core.mount.types.MountDragon; import mineplex.core.titles.Titles; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.RestartServerEvent; import mineplex.core.updater.event.UpdateEvent; @@ -575,7 +577,7 @@ public class GameManager implements Listener if (player.isDead()) { player.sendMessage(F.main("Afk Monitor", "You are being sent to the Lobby for being AFK.")); - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); + Manager.GetPortal().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } else if (Manager.IsObserver(player)) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameTestingManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameTestingManager.java index ce554376b..fdc2339d3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameTestingManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameTestingManager.java @@ -42,7 +42,7 @@ public class GameTestingManager implements Listener _manager.getPluginManager().registerEvents(this, _manager.getPlugin()); - _enabled = _manager.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); + _enabled = UtilServer.isTestServer(); } public ArcadeManager getManager() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/IdleManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/IdleManager.java index ffe72119e..a4aad6220 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/IdleManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/IdleManager.java @@ -6,7 +6,6 @@ import java.util.Map; import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -20,8 +19,11 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.game.Game.GameState; @@ -124,7 +126,7 @@ public class IdleManager implements Listener if (count == 0) { player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 10f, 1f); - _arcadeManager.GetPortal().sendPlayerToServer(player, "Lobby"); + _arcadeManager.GetPortal().sendPlayerToGenericServer(player, GenericServer.HUB, Intent.KICK); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java index b4d2993d1..a29e0cd61 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/MiscManager.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import mineplex.core.common.util.UtilServer; +import mineplex.core.portal.GenericServer; +import mineplex.core.portal.Intent; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -133,8 +135,8 @@ public class MiscManager implements Listener if (!Recharge.Instance.usable(event.getPlayer(), "Return to Hub")) return; - - Manager.GetPortal().sendPlayerToServer(player, "Lobby"); + + Manager.GetPortal().sendPlayerToGenericServer(event.getPlayer(), GenericServer.HUB, Intent.PLAYER_REQUEST); } @EventHandler @@ -142,7 +144,7 @@ public class MiscManager implements Listener { if (event.getMessage().toLowerCase().equals("/lobby") || event.getMessage().toLowerCase().equals("/hub") || event.getMessage().toLowerCase().equals("/leave")) { - Manager.GetPortal().sendPlayerToServer(event.getPlayer(), "Lobby"); + Manager.GetPortal().sendPlayerToGenericServer(event.getPlayer(), GenericServer.HUB, Intent.KICK); event.setCancelled(true); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/NextBestGameManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/NextBestGameManager.java index bc24be374..80e803d08 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/NextBestGameManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/NextBestGameManager.java @@ -1,33 +1,15 @@ package nautilus.game.arcade.managers; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import mineplex.core.Managers; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilServer; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.party.Lang; -import mineplex.core.party.Party; -import mineplex.core.party.PartyManager; -import mineplex.core.preferences.Preference; -import mineplex.serverdata.Region; -import mineplex.serverdata.data.MinecraftServer; -import mineplex.serverdata.servers.ServerManager; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.events.PlayerStateChangeEvent; -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.Game.GameState; -import nautilus.game.arcade.game.GameTeam.PlayerState; -import nautilus.game.arcade.game.games.halloween2016.Halloween2016; -import nautilus.game.arcade.game.games.minestrike.Minestrike; -import nautilus.game.arcade.game.games.paintball.Paintball; -import nautilus.game.arcade.game.games.wither.WitherGame; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; + import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; + import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; @@ -40,11 +22,34 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import mineplex.core.Managers; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilServer; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.party.Lang; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.core.portal.Intent; +import mineplex.core.portal.Portal; +import mineplex.core.preferences.Preference; +import mineplex.serverdata.Region; +import mineplex.serverdata.data.MinecraftServer; +import mineplex.serverdata.servers.ServerManager; + +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.events.PlayerStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameTeam.PlayerState; +import nautilus.game.arcade.game.games.halloween2016.Halloween2016; +import nautilus.game.arcade.game.games.minestrike.Minestrike; +import nautilus.game.arcade.game.games.paintball.Paintball; +import nautilus.game.arcade.game.games.wither.WitherGame; /** * Controls a speed-up feature designed to keep players playing. @@ -69,15 +74,15 @@ public class NextBestGameManager implements Listener * ItemStack the representation of cancelling sending to the next game */ private static final ItemStack CANCEL_ITEM = new ItemBuilder(Material.REDSTONE_BLOCK) - .setTitle(C.cDRed + "Cancel Sending") - .build(); + .setTitle(C.cDRed + "Cancel Sending") + .build(); /** * ItemStack representation of the "Go to Next Game" command */ private static final ItemStack GO_TO_NEXT_ITEM = new ItemBuilder(Material.EMERALD_BLOCK) - .setTitle(C.cGreenB + "Join another game!") - .build(); + .setTitle(C.cGreenB + "Join another game!") + .build(); /** * What slot in the inventory the item's go in. @@ -89,18 +94,18 @@ public class NextBestGameManager implements Listener * This is designed so that the best algorithm will correctly allow full servers to be calculated. */ private static final List FULL_CAP = Lists.newArrayList( - "DominateTDM", - "Skywars", - "ChampionsCTF", - "MCLeague", - "UHC", - "Halloween", - "Dominate", - "SpeedBuilders", - "Build", - "Gladiators", - "SkywarsTeams", - "MineStrike" + "DominateTDM", + "Skywars", + "ChampionsCTF", + "MCLeague", + "UHC", + "Halloween", + "Dominate", + "SpeedBuilders", + "Build", + "Gladiators", + "SkywarsTeams", + "MineStrike" ); /** @@ -243,11 +248,11 @@ public class NextBestGameManager implements Listener @EventHandler public void onDeath(PlayerStateChangeEvent event) { - if(event.GetGame() instanceof Minestrike - || event.GetGame() instanceof WitherGame - || event.GetGame() instanceof Paintball - || event.GetGame() instanceof Halloween2016 - || event.GetGame().Manager.GetHost() != null) + if (event.GetGame() instanceof Minestrike + || event.GetGame() instanceof WitherGame + || event.GetGame() instanceof Paintball + || event.GetGame() instanceof Halloween2016 + || event.GetGame().Manager.GetHost() != null) { return; } @@ -266,7 +271,7 @@ public class NextBestGameManager implements Listener } Player player = event.GetPlayer(); - Party party = _partyManager.getParty(player); + Party party = _partyManager.getPartyByPlayer(player); if (party == null) { @@ -291,7 +296,8 @@ public class NextBestGameManager implements Listener player.sendMessage(" "); - } else + } + else { sendMessage(player, false); @@ -303,7 +309,7 @@ public class NextBestGameManager implements Listener return; } - List players = party.getMembersByUUID().stream().map(Bukkit::getPlayer).collect(Collectors.toList()); + List players = party.getMembers(); boolean countDown = true; for (Player player1 : players) @@ -319,7 +325,7 @@ public class NextBestGameManager implements Listener return; } - Player owner = Bukkit.getPlayer(party.getOwner()); + Player owner = Bukkit.getPlayer(party.getOwnerName()); owner.sendMessage(F.main("Game", "All party members are dead!")); if (_partyManager.getPreferencesManager().get(player).isActive(Preference.AUTO_JOIN_NEXT_GAME)) { @@ -340,7 +346,8 @@ public class NextBestGameManager implements Listener owner.sendMessage(" "); _tasks.put(player.getUniqueId(), new CountdownRunnable(party)); - } else + } + else { owner.sendMessage(" "); owner.sendMessage(" "); @@ -368,12 +375,12 @@ public class NextBestGameManager implements Listener return; } - if(getGame() == null) + if (getGame() == null) { return; } - if(getGame().IsAlive(player)) + if (getGame().IsAlive(player)) { return; } @@ -384,7 +391,7 @@ public class NextBestGameManager implements Listener } boolean cancel = inHand.isSimilar(CANCEL_ITEM); - Party party = _partyManager.getParty(player); + Party party = _partyManager.getPartyByPlayer(player); if (cancel) { @@ -402,23 +409,24 @@ public class NextBestGameManager implements Listener private void handle(Player player) { - Party party = _partyManager.getParty(player); + Party party = _partyManager.getPartyByPlayer(player); if (party != null) { - if (!party.getOwner().equalsIgnoreCase(player.getName())) + if (!party.getOwnerName().equalsIgnoreCase(player.getName())) { Lang.NOT_OWNER_SERVER.send(player); return; } - Player owner = Bukkit.getPlayer(party.getOwner()); + Player owner = Bukkit.getPlayer(party.getOwnerName()); if (_partyManager.getPreferencesManager().get(owner).isActive(Preference.COUNTDOWN_ON_CLICK)) { _tasks.put(player.getUniqueId(), new CountdownRunnable(owner)); player.getInventory().setItem(INVENTORY_SLOT, CANCEL_ITEM); - } else + } + else { MinecraftServer server = findBestGame(_partyManager.getClientManager().Get(player).GetRank(), party); @@ -428,7 +436,7 @@ public class NextBestGameManager implements Listener return; } - _partyManager.getRedisManager().sendPartyInfo(server.getName(), party); + Portal.getInstance().sendPlayerToServer(party.getOwnerAsPlayer().get(), server.getName(), Intent.PLAYER_REQUEST); } return; } @@ -437,7 +445,8 @@ public class NextBestGameManager implements Listener { _tasks.put(player.getUniqueId(), new CountdownRunnable(player)); player.getInventory().setItem(INVENTORY_SLOT, CANCEL_ITEM); - } else + } + else { MinecraftServer server = findBestGame(_partyManager.getClientManager().Get(player).GetRank(), null); player.getInventory().clear(); @@ -515,7 +524,8 @@ public class NextBestGameManager implements Listener } playerCount = newPlayerCount; - } else + } + else { if (other.getMaxPlayerCount() - playerCount > LOWEST_SOLO_PLAYERCOUNT) { @@ -527,7 +537,8 @@ public class NextBestGameManager implements Listener if (highest < playerCount) { highest = playerCount; - } else + } + else { continue; } @@ -573,7 +584,8 @@ public class NextBestGameManager implements Listener try { countdown = Integer.parseInt(motd.split(" ")[2]); - } catch (Exception e) + } + catch (Exception e) { countdown = -1; } @@ -588,7 +600,7 @@ public class NextBestGameManager implements Listener private boolean isInUnjoinableState(String motd) { return (motd == null || motd.isEmpty() || - !(motd.contains("Starting") || motd.contains("Recruiting") || motd.contains("Waiting") || motd.contains("Open in") || motd.contains("Generating"))); + !(motd.contains("Starting") || motd.contains("Recruiting") || motd.contains("Waiting") || motd.contains("Open in") || motd.contains("Generating"))); } private void sendWarning(Player player) @@ -626,13 +638,14 @@ public class NextBestGameManager implements Listener if (party != null) { - party.getMembersByUUID().stream().map(Bukkit::getPlayer).forEach(player1 -> + party.getMembers().forEach(player1 -> { player1.sendMessage(F.main("Game", "Cancelled sending your party to a new game!")); player1.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1.0F, 1.0F); player1.getInventory().setItem(INVENTORY_SLOT, GO_TO_NEXT_ITEM); }); - } else + } + else { player.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1.0F, 1.0F); player.getInventory().setItem(INVENTORY_SLOT, GO_TO_NEXT_ITEM); @@ -656,7 +669,7 @@ public class NextBestGameManager implements Listener private CountdownRunnable(Party party) { _party = party; - _player = Bukkit.getPlayerExact(party.getOwner()); + _player = Bukkit.getPlayerExact(party.getOwnerName()); runTaskTimer(_partyManager.getPlugin(), 0L, 20L); } @@ -686,11 +699,6 @@ public class NextBestGameManager implements Listener if (_party != null) { - if (_partyManager.getParty(_party.getName()) == null) - { - return; - } - MinecraftServer server = findBestGame(null, _party); if (server == null) @@ -699,7 +707,7 @@ public class NextBestGameManager implements Listener return; } - _partyManager.getRedisManager().sendPartyInfo(server.getName(), _party); + Portal.getInstance().sendPlayerToServer(_party.getOwnerAsPlayer().get(), server.getName(), Intent.PLAYER_REQUEST); return; } @@ -726,7 +734,8 @@ public class NextBestGameManager implements Listener if (_party == null) { _player.sendMessage(F.main("Game", "Sending you to your next game in " + F.greenElem(String.valueOf(_ticks)) + " " + (_ticks == 1 ? "second" : "seconds"))); - } else + } + else { _party.sendMessage(F.main("Game", "Sending you to your next game in " + F.greenElem(String.valueOf(_ticks)) + " " + (_ticks == 1 ? "second" : "seconds"))); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java index db0a72789..b092d0a17 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java @@ -184,7 +184,7 @@ public class ProgressingKitManager implements Listener String message = event.getMessage(); String user = event.getPlayer().getName(); - if(user.equalsIgnoreCase("TadahTech") || user.equalsIgnoreCase("Moppletop") || _manager.GetServerConfig().ServerGroup.equalsIgnoreCase("Testing")) + if(user.equalsIgnoreCase("Moppletop") || UtilServer.isTestServer()) { if(message.startsWith("/kpsetlevel")) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ServerUptimeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ServerUptimeManager.java index 00a048219..bbc63306b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ServerUptimeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ServerUptimeManager.java @@ -13,6 +13,7 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; +import mineplex.core.portal.Intent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; @@ -129,7 +130,7 @@ public class ServerUptimeManager implements Listener for (Player player : UtilServer.getPlayers()) { - Manager.GetPortal().sendToHub(player, "Servertime has expired!"); + Manager.GetPortal().sendToHub(player, "Servertime has expired!", Intent.KICK); } Manager.runSyncLater(new Runnable() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/chat/GameChatManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/chat/GameChatManager.java index 190e2fca7..bd99d7e11 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/chat/GameChatManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/chat/GameChatManager.java @@ -7,7 +7,6 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Map; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -119,7 +118,7 @@ public class GameChatManager implements Listener //Party Chat if (event.getMessage().charAt(0) == '@') { - Party party = _manager.getPartyManager().getParty(sender); + Party party = _manager.getPartyManager().getPartyByPlayer(sender); if (party != null) { event.getRecipients().clear(); @@ -127,13 +126,7 @@ public class GameChatManager implements Listener event.setMessage(event.getMessage().substring(1, event.getMessage().length())); event.setFormat(levelStr + C.cDPurple + C.Bold + "Party " + C.cWhite + C.Bold + event.getPlayer().getName() + " " + C.cPurple + "%2$s"); - for (String member : party.getMembers()) - { - Player other = Bukkit.getPlayer(member); - - if (other != null) - event.getRecipients().add(other); - } + event.getRecipients().addAll(party.getMembers()); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/LobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/LobbyManager.java index 4feb03481..72f1dc35f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/LobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/LobbyManager.java @@ -736,6 +736,7 @@ public abstract class LobbyManager implements Listener _manager.getCosmeticManager().giveInterfaceItem(player); _manager.getBoosterManager().giveInterfaceItem(player); _manager.getTitles().giveBookIfNotExists(player, false); + _manager.getPartyManager().giveItemIfNotExists(player); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/current/NewGameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/current/NewGameLobbyManager.java index 432ec1298..a0a07de20 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/current/NewGameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/current/NewGameLobbyManager.java @@ -398,7 +398,7 @@ public class NewGameLobbyManager extends LobbyManager ent.setColor(DyeColor.getByWoolData(team.GetColorData())); - UtilEnt.Vegetate(ent, true); + UtilEnt.vegetate(ent, true); UtilEnt.setFakeHead(ent, true); UtilEnt.ghost(ent, true, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/legacy/LegacyGameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/legacy/LegacyGameLobbyManager.java index 3ecc7b3a1..2d988d0d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/legacy/LegacyGameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/lobby/legacy/LegacyGameLobbyManager.java @@ -81,7 +81,7 @@ public class LegacyGameLobbyManager extends LobbyManager ent.setColor(DyeColor.getByWoolData(teams.get(i).GetColorData())); - UtilEnt.Vegetate(ent, true); + UtilEnt.vegetate(ent, true); UtilEnt.setFakeHead(ent, true); UtilEnt.ghost(ent, true, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/titangiveaway/TitanGiveawayRepository.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/titangiveaway/TitanGiveawayRepository.java index b3caa8475..a66043121 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/titangiveaway/TitanGiveawayRepository.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/titangiveaway/TitanGiveawayRepository.java @@ -6,10 +6,11 @@ import java.sql.Types; import mineplex.core.database.MinecraftRepository; import mineplex.serverdata.database.DBPool; +import mineplex.serverdata.database.RepositoryBase; import org.bukkit.plugin.java.JavaPlugin; -public class TitanGiveawayRepository extends MinecraftRepository +public class TitanGiveawayRepository extends RepositoryBase { private int _titanGiveawayCount; diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java index 8943c3353..c0c9fb7e6 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java @@ -3,6 +3,7 @@ package mineplex.mavericks.review; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.common.Constants; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; import mineplex.core.PacketsInteractionFix; @@ -60,9 +61,6 @@ import static mineplex.core.Managers.require; */ public class Hub extends JavaPlugin { - - private String WEB_CONFIG = "webServer"; - // Modules private CoreClientManager _clientManager; private DonationManager _donationManager; @@ -74,15 +72,13 @@ public class Hub extends JavaPlugin // Delete Old Games Folders // Configs - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); - String webServerAddress = getConfig().getString(WEB_CONFIG); - // Static Modules CommandCenter.Initialize(this); - _clientManager = new CoreClientManager(this, webServerAddress); + _clientManager = new CoreClientManager(this); CommandCenter.Instance.setClientManager(_clientManager); ItemStackFactory.Initialize(this, false); @@ -104,12 +100,12 @@ public class Hub extends JavaPlugin Creature creature = new Creature(this); ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager)); - Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); + Portal portal = new Portal(); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); DisguiseManager disguiseManager = require(DisguiseManager.class); - Punish punish = new Punish(this, webServerAddress, _clientManager); + Punish punish = new Punish(this, _clientManager); require(AntiHack.class); IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal); @@ -129,8 +125,7 @@ public class Hub extends JavaPlugin // Inventory InventoryManager inventoryManager = new InventoryManager(this, _clientManager); - PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore, - webServerAddress); + PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito); diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java index 1b417821d..7dfe4810f 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java @@ -625,7 +625,7 @@ public class MavericksReviewManager extends MiniPlugin } else { - UtilEnt.Vegetate(e, true); + UtilEnt.vegetate(e, true); UtilEnt.ghost(e, true, false); } } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java index e0e7758cf..271ef4dde 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java @@ -17,6 +17,7 @@ import mineplex.core.achievement.AchievementManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.chat.Chat; import mineplex.core.command.CommandCenter; +import mineplex.core.common.Constants; import mineplex.core.common.events.ServerShutdownEvent; import mineplex.core.creature.Creature; import mineplex.core.delayedtask.DelayedTask; @@ -57,6 +58,7 @@ import mineplex.gemhunters.scoreboard.ScoreboardModule; import mineplex.gemhunters.shop.ShopModule; import mineplex.gemhunters.spawn.SpawnModule; import mineplex.gemhunters.supplydrop.SupplyDropModule; +import mineplex.gemhunters.worldevent.WorldEventModule; import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; @@ -78,18 +80,15 @@ public class GemHunters extends JavaPlugin public void onEnable() { // Load configuration - getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); - getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + getConfig().addDefault(Constants.WEB_CONFIG_KEY, Constants.WEB_ADDRESS); + getConfig().set(Constants.WEB_CONFIG_KEY, getConfig().getString(Constants.WEB_CONFIG_KEY)); saveConfig(); - // Get the web server address - String webServerAddress = getConfig().getString(WEB_CONFIG); - // Load core modules CommandCenter.Initialize(this); // Client Manager - CoreClientManager clientManager = new CoreClientManager(this, webServerAddress); + CoreClientManager clientManager = new CoreClientManager(this); // Donation Manager DonationManager donationManager = require(DonationManager.class); @@ -137,13 +136,13 @@ public class GemHunters extends JavaPlugin ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager)); // Portal - Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName()); + Portal portal = new Portal(); // File Updater new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); // Punish - Punish punish = new Punish(this, webServerAddress, clientManager); + Punish punish = new Punish(this, clientManager); // Disguises DisguiseManager disguiseManager = require(DisguiseManager.class); @@ -176,15 +175,19 @@ public class GemHunters extends JavaPlugin Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName()); new MessageManager(this, incognito, clientManager, preferenceManager, ignoreManager, punish, new FriendManager(this, clientManager, preferenceManager, portal), chat); - new PartyManager(this, portal, clientManager, preferenceManager); + // Parties + new PartyManager(); // Fixes new MemoryFix(this); new FoodDupeFix(this); // Explosions - new Explosion(this, blockRestore); + Explosion explosion = new Explosion(this, blockRestore); + explosion.SetDebris(true); + explosion.SetTemporaryDebris(false); + // Inventories new InventoryManager(this, clientManager); @@ -213,6 +216,7 @@ public class GemHunters extends JavaPlugin require(SpawnModule.class); require(ShopModule.class); require(SupplyDropModule.class); + require(WorldEventModule.class); // UpdateEvent!!! new Updater(this); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java index 919db2f8c..b5f3b04e5 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java @@ -86,7 +86,7 @@ public class LootModule extends MiniPlugin _spawnedIndexes = new HashMap<>(15); _itemRewards = new HashSet<>(); - updateChestLoot(); + //updateChestLoot(); } @Override diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/util/SimpleNPC.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/util/SimpleNPC.java index 78d89ba30..539adbf3c 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/util/SimpleNPC.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/util/SimpleNPC.java @@ -34,7 +34,7 @@ public class SimpleNPC implements Listener _entity.setCustomName(name); _entity.setCustomNameVisible(true); - UtilEnt.Vegetate(_entity, true); + UtilEnt.vegetate(_entity, true); UtilEnt.ghost(_entity, true, false); UtilEnt.setFakeHead(_entity, true); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/TriggerableWorldEvent.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/TriggerableWorldEvent.java new file mode 100644 index 000000000..e9c3f9130 --- /dev/null +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/TriggerableWorldEvent.java @@ -0,0 +1,10 @@ +package mineplex.gemhunters.worldevent; + +import mineplex.core.updater.event.UpdateEvent; + +public abstract class TriggerableWorldEvent extends WorldEvent +{ + + public abstract boolean onTriggerCheck(UpdateEvent event); + +} diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEvent.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEvent.java index db86ba1bc..0ef3ef3f2 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEvent.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEvent.java @@ -2,12 +2,17 @@ package mineplex.gemhunters.worldevent; import org.bukkit.event.Listener; -import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.Managers; public abstract class WorldEvent implements Listener { + + protected WorldEventModule _worldEventModule; - public abstract boolean onCheckTrigger(UpdateEvent event); + public WorldEvent() + { + _worldEventModule = Managers.get(WorldEventModule.class); + } public abstract void onStart(); @@ -15,12 +20,12 @@ public abstract class WorldEvent implements Listener public final void start() { - + onStart(); } public final void end() { - + onEnd(); } } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventModule.java index 5309431ce..478be7ff0 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventModule.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import mineplex.core.MiniPlugin; import mineplex.core.common.util.UtilMath; @@ -17,14 +18,14 @@ public class WorldEventModule extends MiniPlugin private static final long EVENT_TIMER = TimeUnit.MINUTES.toMillis(15); - private List _currentEvents; + private final List _events; private long _lastEventComplete; private WorldEventModule() { super("World Event"); - _currentEvents = new ArrayList<>(); + _events = new ArrayList<>(); _lastEventComplete = System.currentTimeMillis(); } @@ -38,8 +39,6 @@ public class WorldEventModule extends MiniPlugin { WorldEvent event = eventType.createInstance(); - _currentEvents.add(event); - event.start(); } @@ -64,4 +63,14 @@ public class WorldEventModule extends MiniPlugin } } + @EventHandler + public void test(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().startsWith("/test")) + { + event.setCancelled(true); + startEvent(WorldEventType.GIANT); + } + } + } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventType.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventType.java index 4bbedb653..7a2518967 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventType.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/WorldEventType.java @@ -1,36 +1,51 @@ package mineplex.gemhunters.worldevent; +import mineplex.gemhunters.worldevent.giant.GiantWorldEvent; + public enum WorldEventType { - COLD_WEATHER("Cold Weather", null); - + GIANT("Giant", GiantWorldEvent.class, true); + private String _name; private Class _clazz; + private boolean _major; private WorldEventType(String name, Class clazz) + { + this(name, clazz, false); + } + + private WorldEventType(String name, Class clazz, boolean major) { _name = name; _clazz = clazz; + _major = major; } - - public WorldEvent createInstance() + + @SuppressWarnings("unchecked") + public T createInstance() { try { - return (WorldEvent) _clazz.getConstructors()[0].newInstance(); + return (T) _clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } - + return null; } - + public String getName() { return _name; } - + + public boolean isMajor() + { + return _major; + } + } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/CustomGiant.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/CustomGiant.java new file mode 100644 index 000000000..2857b688d --- /dev/null +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/CustomGiant.java @@ -0,0 +1,97 @@ +package mineplex.gemhunters.worldevent.giant; + +import java.util.ArrayList; +import java.util.Collection; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Giant; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import mineplex.core.Managers; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.gemhunters.worldevent.WorldEventModule; + +public class CustomGiant implements Listener +{ + + private static final int GIANT_HEALTH = 100; + private static final int DESTORY_BLOCK_RADIUS = 5; + + private final Monster _giant; + + private Player _target; + + public CustomGiant(Location spawn) + { + _giant = spawn.getWorld().spawn(spawn, Giant.class); + + _giant.setMaxHealth(GIANT_HEALTH); + _giant.setHealth(_giant.getMaxHealth()); + + UtilEnt.vegetate(_giant); + + Managers.get(WorldEventModule.class).registerEvents(this); + } + + @EventHandler + public void updateMovement(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC || Bukkit.getOnlinePlayers().isEmpty()) + { + return; + } + + if (_target == null) + { + _target = acquireTarget(); + } + + UtilEnt.CreatureMoveFast(_giant, _target.getLocation(), 1.5F); + } + + @EventHandler + public void updateBlockDestrory(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER) + { + return; + } + + _giant.getWorld().createExplosion(_giant.getLocation().add(0, 10, 0), DESTORY_BLOCK_RADIUS); + } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + if (event.getPlayer().equals(_target)) + { + _target = acquireTarget(); + } + } + + public Player acquireTarget() + { + Collection ignore = new ArrayList<>(); + + for (Player player : UtilServer.getPlayers()) + { + if (UtilPlayer.isSpectator(player)) + { + ignore.add(player); + } + } + + return UtilPlayer.getClosest(_giant.getLocation(), ignore); + } + + +} diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/GiantWorldEvent.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/GiantWorldEvent.java new file mode 100644 index 000000000..29ab6f383 --- /dev/null +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/worldevent/giant/GiantWorldEvent.java @@ -0,0 +1,21 @@ +package mineplex.gemhunters.worldevent.giant; + +import org.bukkit.Bukkit; + +import mineplex.gemhunters.worldevent.WorldEvent; + +public class GiantWorldEvent extends WorldEvent +{ + + @Override + public void onStart() + { + new CustomGiant(Bukkit.getPlayer("Moppletop").getLocation()); + } + + @Override + public void onEnd() + { + } + +} diff --git a/Plugins/pom.xml b/Plugins/pom.xml index ed3d13494..2efe84ed8 100644 --- a/Plugins/pom.xml +++ b/Plugins/pom.xml @@ -135,11 +135,25 @@ 2.8.1 compile + + junit + junit + 4.12 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + + ${project.name} + ${project.basedir}/test ${project.basedir}/src