Merge branch 'master' of ssh://184.154.0.242:7999/min/mineplex into wizards

This commit is contained in:
libraryaddict 2015-04-22 00:25:56 +12:00
commit aeff6bf4b9
41 changed files with 112 additions and 1429 deletions

View File

@ -1,6 +1,5 @@
package mineplex.bungee; package mineplex.bungee;
import mineplex.bungee.account.AccountManager;
import mineplex.bungee.lobbyBalancer.LobbyBalancer; import mineplex.bungee.lobbyBalancer.LobbyBalancer;
import mineplex.bungee.motd.MotdManager; import mineplex.bungee.motd.MotdManager;
import mineplex.bungee.playerCount.PlayerCount; import mineplex.bungee.playerCount.PlayerCount;
@ -21,6 +20,5 @@ public class Mineplexer extends Plugin
new PlayerStats(this); new PlayerStats(this);
//new InternetStatus(this); //new InternetStatus(this);
new PlayerTracker(this); new PlayerTracker(this);
new AccountManager(this, playerCount);
} }
} }

View File

@ -1,71 +0,0 @@
package mineplex.bungee.account;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import com.google.gson.Gson;
import mineplex.bungee.playerCount.PlayerCount;
import net.md_5.bungee.api.event.LoginEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler;
public class AccountManager implements Listener, Runnable
{
private Plugin _plugin;
private PlayerCount _playerCount;
private int _playerCap = -1;
private AccountManagerRepository _repository;
private Gson _gson = new Gson();
public AccountManager(Plugin plugin, PlayerCount playerCount)
{
_plugin = plugin;
_playerCount = playerCount;
_plugin.getProxy().getPluginManager().registerListener(_plugin, this);
_plugin.getProxy().getScheduler().schedule(_plugin, this, 10L, 10L, TimeUnit.SECONDS);
_repository = new AccountManagerRepository();
_repository.initialize();
_playerCap = _repository.retrievePlayerCap();
}
@EventHandler
public void login(LoginEvent event)
{
if (_playerCap == -1 || _playerCount.getTotalPlayers() <= _playerCap)
return;
String response = getClient(event.getConnection().getName(), event.getConnection().getUniqueId(), event.getConnection().getAddress().toString());
ClientToken token = _gson.fromJson(response, ClientToken.class);
if (token.Rank.equalsIgnoreCase("ALL"))
{
event.setCancelled(true);
event.setCancelReason("§fDue to server issues, we have added a §cplayer limit§f.\n"
+ "§fWe hope to have this resolved soon, §nplease be ptient§r.\n"
+ "§fPlayers with Ranks can still join the server!\n\n"
+ "§fPurchase Ranks at §awww.mineplex.com/shop");
}
}
public String getClient(String name, UUID uuid, String ipAddress)
{
LoginToken token = new LoginToken();
token.Name = name;
token.Uuid = uuid.toString();
token.IpAddress = ipAddress;
return new JsonWebCall("http://accounts.mineplex.com/PlayerAccount/Login").ExecuteReturnStream(token);
}
@Override
public void run()
{
_playerCap = _repository.retrievePlayerCap();
}
}

View File

@ -1,105 +0,0 @@
package mineplex.bungee.account;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class AccountManagerRepository
{
private Connection _connection = null;
private String _connectionString = "jdbc:mysql://db.mineplex.com:3306/BungeeServers?autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
private String _userName = "root";
private String _password = "tAbechAk3wR7tuTh";
private static String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS playerCap (id INT NOT NULL AUTO_INCREMENT, playerCap INT, PRIMARY KEY (id));";
private static String RETRIEVE_PLAYERCAP = "SELECT playerCap FROM playerCap;";
public void initialize()
{
PreparedStatement preparedStatement = null;
try
{
if (_connection == null || _connection.isClosed())
_connection = DriverManager.getConnection(_connectionString, _userName, _password);
// Create table
preparedStatement = _connection.prepareStatement(CREATE_TABLE);
preparedStatement.execute();
}
catch (Exception exception)
{
exception.printStackTrace();
}
finally
{
if (preparedStatement != null)
{
try
{
preparedStatement.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
System.out.println("Initialized AccountManager.");
}
public int retrievePlayerCap()
{
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
try
{
if (_connection == null || _connection.isClosed())
_connection = DriverManager.getConnection(_connectionString, _userName, _password);
preparedStatement = _connection.prepareStatement(RETRIEVE_PLAYERCAP);
resultSet = preparedStatement.executeQuery();
while (resultSet.next())
{
return resultSet.getInt(1);
}
}
catch (Exception exception)
{
exception.printStackTrace();
}
finally
{
if (preparedStatement != null)
{
try
{
preparedStatement.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
if (resultSet != null)
{
try
{
resultSet.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
return -1;
}
}

View File

@ -1,24 +0,0 @@
package mineplex.bungee.account;
import java.util.HashSet;
import java.util.List;
public class AccountToken
{
public int AccountId;
public String Name;
public RankToken Rank;
public int LoginCount;
public long LastLogin;
public long TotalPlayingTime;
public HashSet<String> IpAdddresses = new HashSet<String>();
public boolean Banned;
public String Reason;
public int BlueGems;
public int GreenGems;
public List<Integer> SalesPackageIds;
}

View File

@ -1,6 +0,0 @@
package mineplex.bungee.account;
public interface Callback<T>
{
public void run(T data);
}

View File

@ -1,14 +0,0 @@
package mineplex.bungee.account;
public class ClientToken
{
public int AccountId;
public String Name;
public String Rank;
public boolean RankPerm;
public String RankExpire;
public int EconomyBalance;
public AccountToken AccountToken;
public long LastLogin;
}

View File

@ -1,355 +0,0 @@
package mineplex.bungee.account;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import com.google.gson.Gson;
public class JsonWebCall
{
private String _url;
private PoolingClientConnectionManager _connectionManager;
public JsonWebCall(String url)
{
_url = url;
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
_connectionManager = new PoolingClientConnectionManager(schemeRegistry);
_connectionManager.setMaxTotal(200);
_connectionManager.setDefaultMaxPerRoute(20);
}
public String ExecuteReturnStream(Object argument)
{
HttpClient httpClient = new DefaultHttpClient(_connectionManager);
InputStream in = null;
String result = null;
try
{
HttpResponse response;
Gson gson = new Gson();
HttpPost request = new HttpPost(_url);
if (argument != null)
{
StringEntity params = new StringEntity(gson.toJson(argument));
params.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(params);
}
response = httpClient.execute(request);
if (response != null)
{
in = response.getEntity().getContent();
result = convertStreamToString(in);
}
}
catch (Exception ex)
{
System.out.println("Error executing JsonWebCall: \n" + ex.getMessage());
System.out.println("Result: \n" + result);
for (StackTraceElement trace : ex.getStackTrace())
{
System.out.println(trace);
}
}
finally
{
httpClient.getConnectionManager().shutdown();
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return result;
}
public void Execute()
{
Execute((Object)null);
}
public void Execute(Object argument)
{
HttpClient httpClient = new DefaultHttpClient(_connectionManager);
InputStream in = null;
try
{
Gson gson = new Gson();
HttpPost request = new HttpPost(_url);
if (argument != null)
{
StringEntity params = new StringEntity(gson.toJson(argument));
params.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(params);
}
httpClient.execute(request);
}
catch (Exception ex)
{
System.out.println("JsonWebCall.Execute() Error:\n" + ex.getMessage());
for (StackTraceElement trace : ex.getStackTrace())
{
System.out.println(trace);
}
}
finally
{
httpClient.getConnectionManager().shutdown();
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
public <T> T Execute(Class<T> returnClass)
{
return Execute(returnClass, (Object)null);
}
public <T> T Execute(Type returnType, Object argument)
{
HttpClient httpClient = new DefaultHttpClient(_connectionManager);
InputStream in = null;
T returnData = null;
String result = null;
try
{
HttpResponse response;
Gson gson = new Gson();
HttpPost request = new HttpPost(_url);
if (argument != null)
{
StringEntity params = new StringEntity(gson.toJson(argument));
params.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(params);
}
response = httpClient.execute(request);
if (response != null)
{
in = response.getEntity().getContent();
result = convertStreamToString(in);
returnData = new Gson().fromJson(result, returnType);
}
}
catch (Exception ex)
{
System.out.println("Error executing JsonWebCall: \n" + ex.getMessage());
System.out.println("Result: \n" + result);
for (StackTraceElement trace : ex.getStackTrace())
{
System.out.println(trace);
}
}
finally
{
httpClient.getConnectionManager().shutdown();
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return returnData;
}
public <T> T Execute(Class<T> returnClass, Object argument)
{
HttpClient httpClient = new DefaultHttpClient(_connectionManager);
InputStream in = null;
T returnData = null;
String result = null;
try
{
HttpResponse response;
Gson gson = new Gson();
HttpPost request = new HttpPost(_url);
if (argument != null)
{
StringEntity params = new StringEntity(gson.toJson(argument));
params.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(params);
}
response = httpClient.execute(request);
if (response != null)
{
in = response.getEntity().getContent();
result = convertStreamToString(in);
returnData = new Gson().fromJson(result, returnClass);
}
}
catch (Exception ex)
{
System.out.println("Error executing JsonWebCall: \n" + ex.getMessage());
System.out.println("Result: \n" + result);
for (StackTraceElement trace : ex.getStackTrace())
{
System.out.println(trace);
}
}
finally
{
httpClient.getConnectionManager().shutdown();
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return returnData;
}
public <T> void Execute(Class<T> callbackClass, Callback<T> callback)
{
Execute(callbackClass, callback, (Object)null);
}
public <T> void Execute(Class<T> callbackClass, Callback<T> callback, Object argument)
{
HttpClient httpClient = new DefaultHttpClient(_connectionManager);
InputStream in = null;
String result = null;
try
{
HttpResponse response;
Gson gson = new Gson();
HttpPost request = new HttpPost(_url);
if (argument != null)
{
StringEntity params = new StringEntity(gson.toJson(argument));
params.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(params);
}
response = httpClient.execute(request);
if (response != null && callback != null)
{
in = response.getEntity().getContent();
result = convertStreamToString(in);
callback.run(new Gson().fromJson(result, callbackClass));
}
}
catch (Exception ex)
{
System.out.println("Error executing JsonWebCall: \n" + ex.getMessage());
System.out.println("Result: \n" + result);
}
finally
{
httpClient.getConnectionManager().shutdown();
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
protected String convertStreamToString(InputStream is)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}

View File

@ -1,9 +0,0 @@
package mineplex.bungee.account;
public class LoginToken
{
public String Name;
public String IpAddress = "0.0.0.0";
public String MacAddress = "00-00-00-00-00-00-00-00";
public String Uuid;
}

View File

@ -1,8 +0,0 @@
package mineplex.bungee.account;
public class RankToken
{
public int RankId;
public String Name;
}

View File

@ -1,189 +0,0 @@
package mineplex.bungee.motd;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import com.google.gson.Gson;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.Favicon;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.connection.CustomMotd;
import net.md_5.bungee.connection.InitialHandler;
import net.md_5.bungee.protocol.packet.PingPacket;
import net.md_5.bungee.protocol.packet.StatusResponse;
public class Motd implements CustomMotd
{
private static final int MAX_TICKS = 30;
private static final char SNOWFLAKE = '❅';
private static final String SNOWMAN = ChatColor.WHITE + "" + ChatColor.RESET;
private static final String LEFT_SWORD = "§b§l§m §8§l§m[ §r";
private static final String RIGHT_SWORD = "§8§l§m ]§b§l§m §r";
private static final ChatColor[] COLOR_ROTATION =
{ChatColor.RED, ChatColor.LIGHT_PURPLE, ChatColor.GOLD, ChatColor.BLUE, ChatColor.YELLOW, ChatColor.GREEN, ChatColor.AQUA};
private static List<Favicon> ICON_FRAMES;
private MotdManager _manager;
private ScheduledFuture _task;
private int _ticks = 0;
public Motd(MotdManager manager)
{
_manager = manager;
}
public void handlePing(final ProxyPingEvent pingResult, final InitialHandler initialHandler)
{
BungeeCord.getInstance().getConnectionThrottle().unthrottle(initialHandler.getAddress().getAddress());
final Gson gson = initialHandler.getHandshake().getProtocolVersion() == 4?BungeeCord.getInstance().gsonLegacy:BungeeCord.getInstance().gson;
_task = initialHandler.getChannelWrapper().getHandle().eventLoop().scheduleAtFixedRate(new Runnable()
{
@Override
public void run()
{
if (initialHandler.getChannelWrapper().getHandle().isOpen() && _ticks <= MAX_TICKS)
{
ServerPing ping = pingResult.getResponse();
String desc = getDesc();
ping.setDescription(desc);
Favicon icon = getIcon();
if (icon != null)
ping.setFavicon(icon);
initialHandler.unsafe().sendPacket(new StatusResponse(gson.toJson(ping)));
_ticks++;
if (_ticks > MAX_TICKS)
{
PingPacket packet = initialHandler.getPingPacket();
if (packet != null)
{
initialHandler.unsafe().sendPacket(packet);
initialHandler.setPingPacket(null);
}
}
}
else
{
if (initialHandler.getChannelWrapper().getHandle().isOpen())
initialHandler.getChannelWrapper().getHandle().close();
_task.cancel(true);
}
}
}, 0, 200, TimeUnit.MILLISECONDS);
}
private String getDesc()
{
int insetSpaces = 8;
int maxSpaces = 6;
ChatColor mineplexColor = COLOR_ROTATION[_ticks % COLOR_ROTATION.length];
int spaceLeftCount;
int spaceNumber = _ticks % (maxSpaces*2);
if (spaceNumber > maxSpaces)
spaceLeftCount = 2*maxSpaces - spaceNumber;
else
spaceLeftCount = spaceNumber;
String spacesLeft = getRepeatedCharacters(' ', spaceLeftCount);
String spacesRight = getRepeatedCharacters(' ', maxSpaces - spaceLeftCount);
String insets = getRepeatedCharacters(' ', insetSpaces);
String desc = insets + spacesLeft + LEFT_SWORD + spacesRight + getMineplex(mineplexColor) + spacesRight + RIGHT_SWORD + spacesLeft;
List<String> lines = _manager.getMotdLines();
if (lines != null && lines.size() > 0)
{
int index = _ticks / (MAX_TICKS / (lines.size()));
String currentLine = index >= lines.size() ? lines.get(lines.size() - 1) : lines.get(index);
desc += "\n" + currentLine;
}
return desc;
}
private Favicon getIcon()
{
Favicon icon = null;
if (ICON_FRAMES.size() > 0)
{
icon = ICON_FRAMES.get(_ticks % ICON_FRAMES.size());
}
return icon;
}
private String getMineplex(ChatColor color)
{
return " " + color + ChatColor.BOLD.toString() + "Mineplex" + ChatColor.RESET + ChatColor.WHITE + ChatColor.BOLD + " Games" + ChatColor.RESET + " ";
}
private String getRepeatedCharacters(char c, int count)
{
char[] spaces = new char[count];
for (int i = 0; i < count; i++)
{
spaces[i] = c;
}
return new String(spaces);
}
private static Comparator<File> FILE_NUMBER_COMPARATOR = new Comparator<File>()
{
@Override
public int compare(File f1, File f2)
{
int compareValue = 0;
try
{
int i1 = Integer.parseInt(f1.getName().substring(0, f1.getName().indexOf('.')));
int i2 = Integer.parseInt(f2.getName().substring(0, f2.getName().indexOf('.')));
return i1 - i2;
}
catch (Exception e) {}
return compareValue;
}
};
static
{
// Load icon animations
ICON_FRAMES = new ArrayList<Favicon>();
File iconFolder = new File("server-icon");
if (iconFolder.exists() && iconFolder.isDirectory())
{
File[] files = iconFolder.listFiles();
Arrays.sort(files, FILE_NUMBER_COMPARATOR);
for (int i = 0; i < files.length; i++)
{
File file = files[i];
try
{
BufferedImage image = ImageIO.read(file);
Favicon favicon = Favicon.create(image);
ICON_FRAMES.add(favicon);
}
catch (Exception e)
{
// Just ignore extra files
}
}
}
}
}

View File

@ -1,7 +1,7 @@
package mineplex.bungee.motd; package mineplex.bungee.motd;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import mineplex.serverdata.Region; import mineplex.serverdata.Region;
@ -11,17 +11,15 @@ import mineplex.serverdata.servers.ServerManager;
import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.connection.CustomMotd;
import net.md_5.bungee.connection.CustomMotdFactory;
import net.md_5.bungee.connection.InitialHandler;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
public class MotdManager implements Listener, Runnable, CustomMotdFactory public class MotdManager implements Listener, Runnable
{ {
private Plugin _plugin; private Plugin _plugin;
private DataRepository<GlobalMotd> _repository; private DataRepository<GlobalMotd> _repository;
private Random _random = new Random();
private String _firstLine = " §b§l§m §8§l§m[ §r §9§lMineplex§r §f§lGames§r §8§l§m ]§b§l§m §r"; private String _firstLine = " §b§l§m §8§l§m[ §r §9§lMineplex§r §f§lGames§r §8§l§m ]§b§l§m §r";
private List<String> _motdLines; private List<String> _motdLines;
@ -45,7 +43,7 @@ public class MotdManager implements Listener, Runnable, CustomMotdFactory
String motd = _firstLine; String motd = _firstLine;
if (_motdLines != null && _motdLines.size() > 0) if (_motdLines != null && _motdLines.size() > 0)
{ {
motd += "\n" + _motdLines.get(0); motd += "\n" + _motdLines.get(_random.nextInt(_motdLines.size()));
} }
event.setResponse(new net.md_5.bungee.api.ServerPing(serverPing.getVersion(), serverPing.getPlayers(), motd, serverPing.getFaviconObject())); event.setResponse(new net.md_5.bungee.api.ServerPing(serverPing.getVersion(), serverPing.getPlayers(), motd, serverPing.getFaviconObject()));
@ -79,8 +77,6 @@ public class MotdManager implements Listener, Runnable, CustomMotdFactory
_motdLines = motd.getMotd(); _motdLines = motd.getMotd();
_firstLine = motd.getHeadline(); _firstLine = motd.getHeadline();
} }
InitialHandler.setCustomMotdFactory(this);
} }
/** /**
@ -96,10 +92,4 @@ public class MotdManager implements Listener, Runnable, CustomMotdFactory
{ {
return _motdLines; return _motdLines;
} }
@Override
public CustomMotd makeMotd()
{
return new Motd(this);
}
} }

View File

@ -1,9 +0,0 @@
package net.md_5.bungee.connection;
import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.protocol.packet.PingPacket;
public interface CustomMotd
{
public void handlePing(ProxyPingEvent event, InitialHandler initialHandler);
}

View File

@ -1,6 +0,0 @@
package net.md_5.bungee.connection;
public interface CustomMotdFactory
{
public CustomMotd makeMotd();
}

View File

@ -1,487 +0,0 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package net.md_5.bungee.connection;
import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import java.beans.ConstructorProperties;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import javax.crypto.SecretKey;
import net.md_5.bungee.BungeeCipher;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.EncryptionUtil;
import net.md_5.bungee.UserConnection;
import net.md_5.bungee.Util;
import net.md_5.bungee.api.AbstractReconnectHandler;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.Favicon;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.ServerPing.PlayerInfo;
import net.md_5.bungee.api.ServerPing.Players;
import net.md_5.bungee.api.ServerPing.Protocol;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.config.ListenerInfo;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.LoginEvent;
import net.md_5.bungee.api.event.PlayerHandshakeEvent;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.event.PreLoginEvent;
import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.md_5.bungee.http.HttpClient;
import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.netty.HandlerBoss;
import net.md_5.bungee.netty.PacketHandler;
import net.md_5.bungee.netty.cipher.CipherDecoder;
import net.md_5.bungee.netty.cipher.CipherEncoder;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
import net.md_5.bungee.protocol.packet.EncryptionResponse;
import net.md_5.bungee.protocol.packet.Handshake;
import net.md_5.bungee.protocol.packet.Kick;
import net.md_5.bungee.protocol.packet.LegacyHandshake;
import net.md_5.bungee.protocol.packet.LegacyPing;
import net.md_5.bungee.protocol.packet.LoginRequest;
import net.md_5.bungee.protocol.packet.LoginSuccess;
import net.md_5.bungee.protocol.packet.PingPacket;
import net.md_5.bungee.protocol.packet.PluginMessage;
import net.md_5.bungee.protocol.packet.StatusRequest;
import net.md_5.bungee.protocol.packet.StatusResponse;
public class InitialHandler extends PacketHandler implements PendingConnection {
private static CustomMotdFactory _customMotdFactory;
private PingPacket _pingPacket;
private final ProxyServer bungee;
private ChannelWrapper ch;
private final ListenerInfo listener;
private Handshake handshake;
private LoginRequest loginRequest;
private EncryptionRequest request;
private final List<PluginMessage> registerMessages = new ArrayList();
private InitialHandler.State thisState;
private final Unsafe unsafe;
private boolean onlineMode;
private InetSocketAddress virtualHost;
private UUID uniqueId;
private UUID offlineId;
private LoginResult loginProfile;
private boolean legacy;
public void connected(ChannelWrapper channel) throws Exception {
this.ch = channel;
}
public void exception(Throwable t) throws Exception {
this.disconnect((String)(ChatColor.RED + Util.exception(t)));
}
public void handle(PluginMessage pluginMessage) throws Exception {
if(pluginMessage.getTag().equals("REGISTER")) {
Preconditions.checkState(this.registerMessages.size() < 128, "Too many channels registered");
this.registerMessages.add(pluginMessage);
}
}
public void handle(LegacyHandshake legacyHandshake) throws Exception {
this.legacy = true;
this.ch.getHandle().writeAndFlush(this.bungee.getTranslation("outdated_client", new Object[0]));
this.ch.close();
}
public void handle(LegacyPing ping) throws Exception {
this.legacy = true;
final boolean v1_5 = ping.isV1_5();
ServerPing legacy = new ServerPing(new Protocol(this.bungee.getName() + " " + this.bungee.getGameVersion(), this.bungee.getProtocolVersion()), new Players(this.listener.getMaxPlayers(), this.bungee.getOnlineCount(), (PlayerInfo[])null), this.listener.getMotd(), (Favicon)null);
Callback callback = new Callback<ProxyPingEvent>() {
public void done(ProxyPingEvent result, Throwable error) {
if(!InitialHandler.this.ch.isClosed()) {
ServerPing legacy = result.getResponse();
String kickMessage;
if(v1_5) {
kickMessage = ChatColor.DARK_BLUE + "\u0000" + 127 + '\u0000' + legacy.getVersion().getName() + '\u0000' + InitialHandler.getFirstLine(legacy.getDescription()) + '\u0000' + legacy.getPlayers().getOnline() + '\u0000' + legacy.getPlayers().getMax();
} else {
kickMessage = ChatColor.stripColor(InitialHandler.getFirstLine(legacy.getDescription())) + '§' + legacy.getPlayers().getOnline() + '§' + legacy.getPlayers().getMax();
}
InitialHandler.this.ch.getHandle().writeAndFlush(kickMessage);
InitialHandler.this.ch.close();
}
}
};
this.bungee.getPluginManager().callEvent(new ProxyPingEvent(this, legacy, callback));
}
private static String getFirstLine(String str) {
int pos = str.indexOf(10);
return pos == -1?str:str.substring(0, pos);
}
public void handle(StatusRequest statusRequest) throws Exception {
Preconditions.checkState(this.thisState == InitialHandler.State.STATUS, "Not expecting STATUS");
ServerInfo forced = AbstractReconnectHandler.getForcedHost(this);
String motd = forced != null?forced.getMotd():this.listener.getMotd();
Callback pingBack = new Callback<ServerPing>() {
public void done(ServerPing result, Throwable error) {
if(error != null) {
result = new ServerPing();
result.setDescription(InitialHandler.this.bungee.getTranslation("ping_cannot_connect", new Object[0]));
InitialHandler.this.bungee.getLogger().log(Level.WARNING, "Error pinging remote server", error);
}
Callback callback = new Callback<ProxyPingEvent>() {
public void done(ProxyPingEvent pingResult, Throwable error) {
// MINEPLEX
if (_customMotdFactory != null)
{
_customMotdFactory.makeMotd().handlePing(pingResult, InitialHandler.this);
}
else
{
BungeeCord.getInstance().getConnectionThrottle().unthrottle(InitialHandler.this.getAddress().getAddress());
Gson gson = InitialHandler.this.handshake.getProtocolVersion() == 4?BungeeCord.getInstance().gsonLegacy:BungeeCord.getInstance().gson;
InitialHandler.this.unsafe.sendPacket(new StatusResponse(gson.toJson(pingResult.getResponse())));
}
}
};
InitialHandler.this.bungee.getPluginManager().callEvent(new ProxyPingEvent(InitialHandler.this, result, callback));
}
};
if(forced != null && this.listener.isPingPassthrough()) {
((BungeeServerInfo)forced).ping(pingBack, this.handshake.getProtocolVersion());
} else {
int protocol = net.md_5.bungee.protocol.Protocol.supportedVersions.contains(Integer.valueOf(this.handshake.getProtocolVersion()))?this.handshake.getProtocolVersion():this.bungee.getProtocolVersion();
pingBack.done(new ServerPing(new Protocol(this.bungee.getName() + " " + this.bungee.getGameVersion(), protocol), new Players(this.listener.getMaxPlayers(), this.bungee.getOnlineCount(), (PlayerInfo[])null), motd, BungeeCord.getInstance().config.getFaviconObject()), (Throwable)null);
}
this.thisState = InitialHandler.State.PING;
}
public void handle(final PingPacket ping) throws Exception {
_pingPacket = ping;
// if (thisState == State.PING) return; // MINEPLEX
// Preconditions.checkState(this.thisState == InitialHandler.State.PING, "Not expecting PING");
// getChannelWrapper().getHandle().eventLoop().schedule(new Runnable()
// {
// @Override
// public void run()
// {
// unsafe.sendPacket(ping);
// }
// }, 6, TimeUnit.SECONDS);
//
// this.unsafe.sendPacket(ping);
// this.disconnect((String)"");
}
public void handle(Handshake handshake) throws Exception {
Preconditions.checkState(this.thisState == InitialHandler.State.HANDSHAKE, "Not expecting HANDSHAKE");
this.handshake = handshake;
this.ch.setVersion(handshake.getProtocolVersion());
if(handshake.getHost().endsWith(".")) {
handshake.setHost(handshake.getHost().substring(0, handshake.getHost().length() - 1));
}
this.virtualHost = InetSocketAddress.createUnresolved(handshake.getHost(), handshake.getPort());
this.bungee.getLogger().log(Level.INFO, "{0} has connected", this);
this.bungee.getPluginManager().callEvent(new PlayerHandshakeEvent(this, handshake));
switch(handshake.getRequestedProtocol()) {
case 1:
this.thisState = InitialHandler.State.STATUS;
this.ch.setProtocol(net.md_5.bungee.protocol.Protocol.STATUS);
break;
case 2:
this.thisState = InitialHandler.State.USERNAME;
this.ch.setProtocol(net.md_5.bungee.protocol.Protocol.LOGIN);
break;
default:
throw new IllegalArgumentException("Cannot request protocol " + handshake.getRequestedProtocol());
}
}
public void handle(LoginRequest loginRequest) throws Exception {
Preconditions.checkState(this.thisState == InitialHandler.State.USERNAME, "Not expecting USERNAME");
this.loginRequest = loginRequest;
if(!net.md_5.bungee.protocol.Protocol.supportedVersions.contains(Integer.valueOf(this.handshake.getProtocolVersion()))) {
this.disconnect((String)this.bungee.getTranslation("outdated_server", new Object[0]));
} else if(this.getName().contains(".")) {
this.disconnect((String)this.bungee.getTranslation("name_invalid", new Object[0]));
} else if(this.getName().length() > 16) {
this.disconnect((String)this.bungee.getTranslation("name_too_long", new Object[0]));
} else {
int limit = BungeeCord.getInstance().config.getPlayerLimit();
if(limit > 0 && this.bungee.getOnlineCount() > limit) {
this.disconnect((String)this.bungee.getTranslation("proxy_full", new Object[0]));
} else if(!this.isOnlineMode() && this.bungee.getPlayer(this.getName()) != null) {
this.disconnect((String)this.bungee.getTranslation("already_connected", new Object[0]));
} else {
Callback callback = new Callback<PreLoginEvent>() {
public void done(PreLoginEvent result, Throwable error) {
if(result.isCancelled()) {
InitialHandler.this.disconnect((String)result.getCancelReason());
} else if(!InitialHandler.this.ch.isClosed()) {
if(InitialHandler.this.onlineMode) {
InitialHandler.this.unsafe().sendPacket(InitialHandler.this.request = EncryptionUtil.encryptRequest());
} else {
InitialHandler.this.finish();
}
InitialHandler.this.thisState = InitialHandler.State.ENCRYPT;
}
}
};
this.bungee.getPluginManager().callEvent(new PreLoginEvent(this, callback));
}
}
}
public void handle(EncryptionResponse encryptResponse) throws Exception {
Preconditions.checkState(this.thisState == InitialHandler.State.ENCRYPT, "Not expecting ENCRYPT");
SecretKey sharedKey = EncryptionUtil.getSecret(encryptResponse, this.request);
BungeeCipher decrypt = EncryptionUtil.getCipher(false, sharedKey);
this.ch.addBefore("frame-decoder", "decrypt", new CipherDecoder(decrypt));
BungeeCipher encrypt = EncryptionUtil.getCipher(true, sharedKey);
this.ch.addBefore("frame-prepender", "encrypt", new CipherEncoder(encrypt));
String encName = URLEncoder.encode(this.getName(), "UTF-8");
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[][] encodedHash = new byte[][]{this.request.getServerId().getBytes("ISO_8859_1"), sharedKey.getEncoded(), EncryptionUtil.keys.getPublic().getEncoded()};
int authURL = encodedHash.length;
for(int handler = 0; handler < authURL; ++handler) {
byte[] bit = encodedHash[handler];
sha.update(bit);
}
String var11 = URLEncoder.encode((new BigInteger(sha.digest())).toString(16), "UTF-8");
String var12 = "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + encName + "&serverId=" + var11;
Callback var13 = new Callback<String>() {
public void done(String result, Throwable error) {
if(error == null) {
LoginResult obj = (LoginResult)BungeeCord.getInstance().gson.fromJson(result, LoginResult.class);
if(obj != null) {
InitialHandler.this.loginProfile = obj;
InitialHandler.this.uniqueId = Util.getUUID(obj.getId());
InitialHandler.this.finish();
return;
}
InitialHandler.this.disconnect((String)"Not authenticated with Minecraft.net");
} else {
InitialHandler.this.disconnect((String)InitialHandler.this.bungee.getTranslation("mojang_fail", new Object[0]));
InitialHandler.this.bungee.getLogger().log(Level.SEVERE, "Error authenticating " + InitialHandler.this.getName() + " with minecraft.net", error);
}
}
};
HttpClient.get(var12, this.ch.getHandle().eventLoop(), var13);
}
private void finish() {
ProxiedPlayer old = this.bungee.getPlayer(this.getName());
if(old != null) {
old.disconnect(this.bungee.getTranslation("already_connected", new Object[0]));
}
this.offlineId = UUID.nameUUIDFromBytes(("OfflinePlayer:" + this.getName()).getBytes(Charsets.UTF_8));
if(this.uniqueId == null) {
this.uniqueId = this.offlineId;
}
Callback complete = new Callback<LoginEvent>() {
public void done(LoginEvent result, Throwable error) {
if(result.isCancelled()) {
InitialHandler.this.disconnect((String)result.getCancelReason());
} else if(!InitialHandler.this.ch.isClosed()) {
InitialHandler.this.ch.getHandle().eventLoop().execute(new Runnable() {
public void run() {
if(InitialHandler.this.ch.getHandle().isActive()) {
if(InitialHandler.this.getVersion() >= 5) {
InitialHandler.this.unsafe.sendPacket(new LoginSuccess(InitialHandler.this.getUniqueId().toString(), InitialHandler.this.getName()));
} else {
InitialHandler.this.unsafe.sendPacket(new LoginSuccess(InitialHandler.this.getUUID(), InitialHandler.this.getName()));
}
InitialHandler.this.ch.setProtocol(net.md_5.bungee.protocol.Protocol.GAME);
UserConnection userCon = new UserConnection(InitialHandler.this.bungee, InitialHandler.this.ch, InitialHandler.this.getName(), InitialHandler.this);
userCon.init();
InitialHandler.this.bungee.getPluginManager().callEvent(new PostLoginEvent(userCon));
((HandlerBoss)InitialHandler.this.ch.getHandle().pipeline().get(HandlerBoss.class)).setHandler(new UpstreamBridge(InitialHandler.this.bungee, userCon));
ServerInfo server;
if(InitialHandler.this.bungee.getReconnectHandler() != null) {
server = InitialHandler.this.bungee.getReconnectHandler().getServer(userCon);
} else {
server = AbstractReconnectHandler.getForcedHost(InitialHandler.this);
}
if(server == null) {
server = InitialHandler.this.bungee.getServerInfo(InitialHandler.this.listener.getDefaultServer());
}
userCon.connect(server, (Callback)null, true);
InitialHandler.this.thisState = InitialHandler.State.FINISHED;
}
}
});
}
}
};
this.bungee.getPluginManager().callEvent(new LoginEvent(this, complete));
}
public void disconnect(String reason) {
this.disconnect((BaseComponent[])TextComponent.fromLegacyText(reason));
}
public void disconnect(final BaseComponent... reason) {
if(!this.ch.isClosed()) {
this.ch.getHandle().eventLoop().schedule(new Runnable() {
public void run() {
InitialHandler.this.unsafe().sendPacket(new Kick(ComponentSerializer.toString(reason)));
InitialHandler.this.ch.close();
}
}, 500L, TimeUnit.MILLISECONDS);
}
}
public void disconnect(BaseComponent reason) {
this.disconnect((BaseComponent[])(new BaseComponent[]{reason}));
}
public String getName() {
return this.loginRequest == null?null:this.loginRequest.getData();
}
public int getVersion() {
return this.handshake == null?-1:this.handshake.getProtocolVersion();
}
public InetSocketAddress getAddress() {
return (InetSocketAddress)this.ch.getHandle().remoteAddress();
}
public Unsafe unsafe() {
return this.unsafe;
}
public void setOnlineMode(boolean onlineMode) {
Preconditions.checkState(this.thisState == InitialHandler.State.USERNAME, "Can only set online mode status whilst state is username");
this.onlineMode = onlineMode;
}
public String getUUID() {
return this.uniqueId.toString().replaceAll("-", "");
}
public String toString() {
return "[" + (this.getName() != null?this.getName():this.getAddress()) + "] <-> InitialHandler";
}
@ConstructorProperties({"bungee", "listener"})
public InitialHandler(ProxyServer bungee, ListenerInfo listener) {
this.thisState = InitialHandler.State.HANDSHAKE;
this.unsafe = new Unsafe() {
public void sendPacket(DefinedPacket packet) {
InitialHandler.this.ch.write(packet);
}
};
this.onlineMode = BungeeCord.getInstance().config.isOnlineMode();
this.bungee = bungee;
this.listener = listener;
}
public ListenerInfo getListener() {
return this.listener;
}
public Handshake getHandshake() {
return this.handshake;
}
public LoginRequest getLoginRequest() {
return this.loginRequest;
}
public List<PluginMessage> getRegisterMessages() {
return this.registerMessages;
}
public boolean isOnlineMode() {
return this.onlineMode;
}
public InetSocketAddress getVirtualHost() {
return this.virtualHost;
}
public UUID getUniqueId() {
return this.uniqueId;
}
public UUID getOfflineId() {
return this.offlineId;
}
public LoginResult getLoginProfile() {
return this.loginProfile;
}
public boolean isLegacy() {
return this.legacy;
}
public ChannelWrapper getChannelWrapper()
{
return ch; //MINEPLEX
}
public PingPacket getPingPacket()
{
return _pingPacket; // MINEPLEX
}
public void setPingPacket(PingPacket packet)
{
_pingPacket = packet;
}
private static enum State {
HANDSHAKE,
STATUS,
PING,
USERNAME,
ENCRYPT,
FINISHED;
private State() {
}
}
public static void setCustomMotdFactory(CustomMotdFactory factory)
{
_customMotdFactory = factory;
}
}

View File

@ -1,59 +0,0 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package net.md_5.bungee.connection;
import com.google.gson.Gson;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.netty.PacketHandler;
import net.md_5.bungee.protocol.MinecraftDecoder;
import net.md_5.bungee.protocol.MinecraftEncoder;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.packet.Handshake;
import net.md_5.bungee.protocol.packet.StatusRequest;
import net.md_5.bungee.protocol.packet.StatusResponse;
public class PingHandler extends PacketHandler {
private final ServerInfo target;
private final Callback<ServerPing> callback;
private final int protocol;
private ChannelWrapper channel;
public void connected(ChannelWrapper channel) throws Exception {
this.channel = channel;
MinecraftEncoder encoder = new MinecraftEncoder(Protocol.HANDSHAKE, false, this.protocol);
channel.getHandle().pipeline().addAfter("frame-decoder", "packet-decoder", new MinecraftDecoder(Protocol.STATUS, false, ProxyServer.getInstance().getProtocolVersion()));
channel.getHandle().pipeline().addAfter("frame-prepender", "packet-encoder", encoder);
channel.write(new Handshake(this.protocol, this.target.getAddress().getHostString(), this.target.getAddress().getPort(), 1));
encoder.setProtocol(Protocol.STATUS);
channel.write(new StatusRequest());
}
public void exception(Throwable t) throws Exception {
this.callback.done(null, t);
}
public void handle(StatusResponse statusResponse) throws Exception {
Gson gson = this.protocol == 4?BungeeCord.getInstance().gsonLegacy:BungeeCord.getInstance().gson;
this.callback.done(gson.fromJson(statusResponse.getResponse(), ServerPing.class), (Throwable)null);
System.out.println("handle");
// this.channel.close(); //MINEPLEX
}
public String toString() {
return "[Ping Handler] -> " + this.target.getName();
}
public PingHandler(ServerInfo target, Callback<ServerPing> callback, int protocol) {
this.target = target;
this.callback = callback;
this.protocol = protocol;
}
}

View File

@ -14,7 +14,7 @@ public enum Rank
SNR_MODERATOR("Sr.Mod", ChatColor.GOLD), SNR_MODERATOR("Sr.Mod", ChatColor.GOLD),
MODERATOR("Mod", ChatColor.GOLD), MODERATOR("Mod", ChatColor.GOLD),
HELPER("Helper", ChatColor.DARK_AQUA), HELPER("Helper", ChatColor.DARK_AQUA),
MAPDEV("MapTeam", ChatColor.BLUE), MAPDEV("Builder", ChatColor.BLUE),
MAPLEAD("MapLead", ChatColor.DARK_PURPLE), MAPLEAD("MapLead", ChatColor.DARK_PURPLE),
EVENT("Event", ChatColor.WHITE), EVENT("Event", ChatColor.WHITE),

View File

@ -185,10 +185,10 @@ public class AccountRepository extends RepositoryBase
} }
}, new ColumnVarChar("name", 100, name)); }, new ColumnVarChar("name", 100, name));
if (uuids.size() > 1) if (uuids.size() > 0)
return null; return uuids.get(uuids.size() - 1);
else else
return uuids.size() == 1 ? uuids.get(0) : null; return null;
} }
public void saveRank(final Callback<Rank> callback, final String name, final UUID uuid, final Rank rank, final boolean perm) public void saveRank(final Callback<Rank> callback, final String name, final UUID uuid, final Rank rank, final boolean perm)

View File

@ -209,6 +209,8 @@ public class AchievementManager extends MiniPlugin
level = Math.max(level, 50 + get(sender, Achievement.GLOBAL_GEM_HUNTER).getLevel()); level = Math.max(level, 50 + get(sender, Achievement.GLOBAL_GEM_HUNTER).getLevel());
else if (rank.Has(Rank.ADMIN)) else if (rank.Has(Rank.ADMIN))
level = Math.max(level, 30 + get(sender, Achievement.GLOBAL_GEM_HUNTER).getLevel()); level = Math.max(level, 30 + get(sender, Achievement.GLOBAL_GEM_HUNTER).getLevel());
else if (rank.Has(Rank.SNR_MODERATOR))
level = Math.max(level, 15);
else if (rank.Has(Rank.MODERATOR)) else if (rank.Has(Rank.MODERATOR))
level = Math.max(level, 5); level = Math.max(level, 5);

View File

@ -102,8 +102,6 @@ public class AntiHack extends MiniPlugin
_movementDetectors.add(new Speed(this)); _movementDetectors.add(new Speed(this));
_combatDetectors.add(new Reach(this)); _combatDetectors.add(new Reach(this));
_enabled = false;
} }
public static void Initialize(JavaPlugin plugin, Punish punish, Portal portal, PreferencesManager preferences, CoreClientManager clientManager) public static void Initialize(JavaPlugin plugin, Punish punish, Portal portal, PreferencesManager preferences, CoreClientManager clientManager)

View File

@ -7,9 +7,9 @@ import org.apache.commons.dbcp2.BasicDataSource;
public final class DBPool public final class DBPool
{ {
public static final DataSource ACCOUNT = openDataSource("jdbc:mysql://db.mineplex.com/Account", "root", "tAbechAk3wR7tuTh"); public static final DataSource ACCOUNT = openDataSource("jdbc:mysql://db.mineplex.com/Account", "MilitaryPolice", "CUPr6Wuw2Rus$qap");
public static final DataSource QUEUE = openDataSource("jdbc:mysql://db.mineplex.com/Queue", "root", "tAbechAk3wR7tuTh"); public static final DataSource QUEUE = openDataSource("jdbc:mysql://db.mineplex.com/Queue", "MilitaryPolice", "CUPr6Wuw2Rus$qap");
public static final DataSource MINEPLEX = openDataSource("jdbc:mysql://db.mineplex.com:3306/Mineplex", "root", "tAbechAk3wR7tuTh"); public static final DataSource MINEPLEX = openDataSource("jdbc:mysql://db.mineplex.com:3306/Mineplex", "MilitaryPolice", "CUPr6Wuw2Rus$qap");
public static final DataSource STATS_MINEPLEX = openDataSource("jdbc:mysql://sqlstats.mineplex.com:3306/Mineplex", "root", "tAbechAk3wR7tuTh"); public static final DataSource STATS_MINEPLEX = openDataSource("jdbc:mysql://sqlstats.mineplex.com:3306/Mineplex", "root", "tAbechAk3wR7tuTh");
private static DataSource openDataSource(String url, String username, String password) private static DataSource openDataSource(String url, String username, String password)

View File

@ -81,7 +81,6 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
if (event.getType() != UpdateType.SLOW || Bukkit.getOnlinePlayers().size() == 0) if (event.getType() != UpdateType.SLOW || Bukkit.getOnlinePlayers().size() == 0)
return; return;
/*
final Player[] onlinePlayers = UtilServer.getPlayers(); final Player[] onlinePlayers = UtilServer.getPlayers();
Bukkit.getServer().getScheduler().runTaskAsynchronously(_plugin, new Runnable() Bukkit.getServer().getScheduler().runTaskAsynchronously(_plugin, new Runnable()
@ -109,13 +108,10 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
}); });
} }
}); });
*/
} }
public void addFriend(final Player caller, final String name) public void addFriend(final Player caller, final String name)
{ {
caller.sendMessage(F.main(getName(), ChatColor.RED + "Friend is currently disabled."));
/*
if (caller.getName().equalsIgnoreCase(name)) if (caller.getName().equalsIgnoreCase(name))
{ {
caller.sendMessage(F.main(getName(), ChatColor.GRAY + "You cannot add yourself as a friend")); caller.sendMessage(F.main(getName(), ChatColor.GRAY + "You cannot add yourself as a friend"));
@ -218,13 +214,10 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
}); });
} }
}); });
*/
} }
public void removeFriend(final Player caller, final String name) public void removeFriend(final Player caller, final String name)
{ {
caller.sendMessage(F.main(getName(), ChatColor.RED + "Friend is currently disabled."));
/*
Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable()
{ {
public void run() public void run()
@ -254,13 +247,10 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
}); });
} }
}); });
*/
} }
public void showFriends(Player caller) public void showFriends(Player caller)
{ {
caller.sendMessage(F.main(getName(), ChatColor.RED + "Friend is currently disabled."));
/*
boolean isStaff = ClientManager.Get(caller).GetRank().Has(Rank.HELPER); boolean isStaff = ClientManager.Get(caller).GetRank().Has(Rank.HELPER);
boolean gotAFriend = false; boolean gotAFriend = false;
List<FriendStatus> friendStatuses = Get(caller).getFriends(); List<FriendStatus> friendStatuses = Get(caller).getFriends();
@ -393,7 +383,6 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
message.add(C.cAqua + C.Strike + "======================"); message.add(C.cAqua + C.Strike + "======================");
message.sendToPlayer(caller); message.sendToPlayer(caller);
*/
} }
public boolean isFriends(Player player, String friend) public boolean isFriends(Player player, String friend)

View File

@ -16,7 +16,6 @@ import mineplex.core.common.util.NautHashMap;
import mineplex.core.database.DBPool; import mineplex.core.database.DBPool;
import mineplex.core.database.RepositoryBase; import mineplex.core.database.RepositoryBase;
import mineplex.core.database.ResultSetCallable; import mineplex.core.database.ResultSetCallable;
import mineplex.core.database.column.ColumnInt;
import mineplex.core.database.column.ColumnVarChar; import mineplex.core.database.column.ColumnVarChar;
import mineplex.core.friend.FriendStatusType; import mineplex.core.friend.FriendStatusType;
import mineplex.serverdata.Region; import mineplex.serverdata.Region;
@ -27,8 +26,11 @@ import mineplex.serverdata.servers.ServerManager;
public class FriendRepository extends RepositoryBase public class FriendRepository extends RepositoryBase
{ {
private static String ADD_FRIEND_RECORD = "INSERT INTO accountFriend (sourceId, targetId) VALUES(?, ?);"; 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 DELETE_FRIEND_RECORD = "DELETE FROM accountFriend WHERE id = ?;"; private static String RETRIEVE_MULTIPLE_FRIEND_RECORDS = "SELECT uuidSource, tA.Name, status, tA.lastLogin, now() FROM accountFriend INNER Join accounts AS fA ON fA.uuid = uuidSource INNER JOIN accounts AS tA ON tA.uuid = uuidTarget WHERE uuidSource IN ";
private static String ADD_FRIEND_RECORD = "INSERT INTO accountFriend (uuidSource, uuidTarget, status, created) SELECT fA.uuid AS uuidSource, tA.uuid AS uuidTarget, ?, now() FROM accounts as fA LEFT JOIN accounts AS tA ON tA.name = ? WHERE fA.name = ?;";
private static String UPDATE_MUTUAL_RECORD = "UPDATE accountFriend AS aF INNER JOIN accounts as fA ON aF.uuidSource = fA.uuid INNER JOIN accounts AS tA ON aF.uuidTarget = tA.uuid SET aF.status = ? WHERE tA.name = ? AND fA.name = ?;";
private static String DELETE_FRIEND_RECORD = "DELETE aF FROM accountFriend AS aF INNER JOIN accounts as fA ON aF.uuidSource = fA.uuid INNER JOIN accounts AS tA ON aF.uuidTarget = tA.uuid WHERE fA.name = ? AND tA.name = ?;";
// Repository holding active PlayerStatus data. // Repository holding active PlayerStatus data.
private DataRepository<PlayerStatus> _repository; private DataRepository<PlayerStatus> _repository;
@ -52,14 +54,29 @@ public class FriendRepository extends RepositoryBase
{ {
} }
public boolean addFriend(int sourceAccountId, int targetAccountId) public boolean addFriend(final Player caller, String name)
{ {
return executeUpdate(ADD_FRIEND_RECORD, new ColumnInt("sourceId", sourceAccountId), new ColumnInt("targetId", targetAccountId)) > 0; int rowsAffected = executeUpdate(ADD_FRIEND_RECORD, new ColumnVarChar("status", 100, "Sent"), new ColumnVarChar("name", 100, name), new ColumnVarChar("name", 100, caller.getName()));
if (rowsAffected > 0)
return executeUpdate(ADD_FRIEND_RECORD, new ColumnVarChar("status", 100, "Pending"), new ColumnVarChar("name", 100, caller.getName()), new ColumnVarChar("uuid", 100, name)) > 0;
return false;
} }
public boolean removeFriendRecord(int recordId) public boolean updateFriend(String caller, String name, String status)
{
return executeUpdate(UPDATE_MUTUAL_RECORD, new ColumnVarChar("status", 100, status), new ColumnVarChar("uuid", 100, name), new ColumnVarChar("name", 100, caller)) > 0;
}
public boolean removeFriend(String caller, String name)
{ {
return executeUpdate(DELETE_FRIEND_RECORD, new ColumnInt("id", recordId)) > 0; int rowsAffected = executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, name), new ColumnVarChar("name", 100, caller));
if (rowsAffected > 0)
return executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, caller), new ColumnVarChar("uuid", 100, name)) > 0;
return false;
} }
public NautHashMap<String, FriendData> getFriendsForAll(Player...players) public NautHashMap<String, FriendData> getFriendsForAll(Player...players)
@ -67,7 +84,7 @@ public class FriendRepository extends RepositoryBase
final NautHashMap<String, FriendData> friends = new NautHashMap<String, FriendData>(); final NautHashMap<String, FriendData> friends = new NautHashMap<String, FriendData>();
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
//stringBuilder.append(RETRIEVE_MULTIPLE_FRIEND_RECORDS + "("); stringBuilder.append(RETRIEVE_MULTIPLE_FRIEND_RECORDS + "(");
for (Player player : players) for (Player player : players)
{ {

View File

@ -41,6 +41,23 @@ public class PunishCommand extends CommandBase<Punish>
final String finalReason = reason; final String finalReason = reason;
//Match exact online first
Player target = UtilPlayer.searchExact(playerName);
if (target != null)
{
Plugin.GetRepository().LoadPunishClient(playerName, new Callback<PunishClientToken>()
{
public void run(PunishClientToken clientToken)
{
Plugin.LoadClient(clientToken);
new PunishPage(Plugin, caller, playerName, finalReason);
}
});
return;
}
//Check repo
Plugin.GetRepository().MatchPlayerName(new Callback<List<String>>() Plugin.GetRepository().MatchPlayerName(new Callback<List<String>>()
{ {
public void run(List<String> matches) public void run(List<String> matches)

View File

@ -70,10 +70,10 @@ public class ServerStatusManager extends MiniPlugin
getPlugin().getConfig().addDefault("serverstatus.connectionurl", "db.mineplex.com:3306"); getPlugin().getConfig().addDefault("serverstatus.connectionurl", "db.mineplex.com:3306");
getPlugin().getConfig().set("serverstatus.connectionurl", getPlugin().getConfig().getString("serverstatus.connectionurl")); getPlugin().getConfig().set("serverstatus.connectionurl", getPlugin().getConfig().getString("serverstatus.connectionurl"));
getPlugin().getConfig().addDefault("serverstatus.username", "root"); getPlugin().getConfig().addDefault("serverstatus.username", "MilitaryPolice");
getPlugin().getConfig().set("serverstatus.username", getPlugin().getConfig().getString("serverstatus.username")); getPlugin().getConfig().set("serverstatus.username", getPlugin().getConfig().getString("serverstatus.username"));
getPlugin().getConfig().addDefault("serverstatus.password", "tAbechAk3wR7tuTh"); getPlugin().getConfig().addDefault("serverstatus.password", "CUPr6Wuw2Rus$qap");
getPlugin().getConfig().set("serverstatus.password", getPlugin().getConfig().getString("serverstatus.password")); getPlugin().getConfig().set("serverstatus.password", getPlugin().getConfig().getString("serverstatus.password"));
getPlugin().getConfig().addDefault("serverstatus.us", true); getPlugin().getConfig().addDefault("serverstatus.us", true);

View File

@ -4,8 +4,8 @@
<jdbc> <jdbc>
<driver>com.mysql.jdbc.Driver</driver> <driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://db.mineplex.com:3306</url> <url>jdbc:mysql://db.mineplex.com:3306</url>
<user>root</user> <user>MilitaryPolice</user>
<password>tAbechAk3wR7tuTh</password> <password>CUPr6Wuw2Rus$qap</password>
</jdbc> </jdbc>
<generator> <generator>

View File

@ -50,7 +50,7 @@ public class SmokeArrow extends SkillActive
SetDesc(new String[] SetDesc(new String[]
{ {
"Your next arrow will give Blindness", "Your next arrow will give Blindness",
"to target for #4#1 seconds." "and Slow 2 to target for #3#1 seconds."
}); });
} }
@ -127,6 +127,7 @@ public class SmokeArrow extends SkillActive
//Confuse //Confuse
double dur = 3 + level; double dur = 3 + level;
Factory.Condition().Factory().Blind(GetName(), damagee, damager, dur, 0, true, true, true); Factory.Condition().Factory().Blind(GetName(), damagee, damager, dur, 0, true, true, true);
Factory.Condition().Factory().Slow(GetName(), damagee, damager, dur, 1, true, true, true, true);
//Effect //Effect
damagee.getWorld().playSound(damagee.getLocation(), Sound.BLAZE_BREATH, 2.5f, 2.0f); damagee.getWorld().playSound(damagee.getLocation(), Sound.BLAZE_BREATH, 2.5f, 2.0f);

View File

@ -18,7 +18,7 @@ public class Colossus extends Skill
SetDesc(new String[] SetDesc(new String[]
{ {
"You are so huge that you take", "You are so huge that you take",
"#25#25 % less knockback from attacks." "#15#20 % less knockback from attacks."
}); });
} }
@ -36,7 +36,7 @@ public class Colossus extends Skill
//Damage //Damage
event.AddMod(damagee.getName(), GetName(), 0, false); event.AddMod(damagee.getName(), GetName(), 0, false);
event.AddKnockback(GetName(), 0.75 - 0.25*level); event.AddKnockback(GetName(), 0.85 - 0.20*level);
} }
@Override @Override

View File

@ -37,6 +37,8 @@ public class DwarfToss extends SkillActive
private HashSet<Player> _used = new HashSet<Player>(); private HashSet<Player> _used = new HashSet<Player>();
private NautHashMap<Player, LivingEntity> _holding = new NautHashMap<Player, LivingEntity>(); private NautHashMap<Player, LivingEntity> _holding = new NautHashMap<Player, LivingEntity>();
private NautHashMap<Player, Long> _time = new NautHashMap<Player, Long>(); private NautHashMap<Player, Long> _time = new NautHashMap<Player, Long>();
private long _chargeTime = 2500;
public DwarfToss(SkillFactory skills, String name, ClassType classType, SkillType skillType, public DwarfToss(SkillFactory skills, String name, ClassType classType, SkillType skillType,
int cost, int levels, int cost, int levels,
@ -58,7 +60,9 @@ public class DwarfToss extends SkillActive
"Release Block to throw with #1.2#0.2 velocity.", "Release Block to throw with #1.2#0.2 velocity.",
"", "",
"Players you are holding cannot harm", "Players you are holding cannot harm",
"you, or be harmed by others." "you, or be harmed by others.",
"",
"Takes 2.5 seconds to fully charge."
}); });
} }
@ -302,14 +306,21 @@ public class DwarfToss extends SkillActive
for (final Player cur : throwSet) for (final Player cur : throwSet)
{ {
final LivingEntity target = _holding.remove(cur); final LivingEntity target = _holding.remove(cur);
_time.remove(cur); long time = _time.remove(cur);
int level = getLevel(cur); int level = getLevel(cur);
//Time Reduce
double timeScale = 1;
if (time < _chargeTime)
{
timeScale = Math.max(0.25, ((double)time/(double)_chargeTime));
}
//Throw //Throw
cur.eject(); cur.eject();
target.leaveVehicle(); target.leaveVehicle();
final double mult = 1.2 + (0.2 * level); final double mult = (1.2 + (0.2 * level)) * timeScale;
//Delay //Delay
Bukkit.getScheduler().scheduleSyncDelayedTask(Factory.getPlugin(), new Runnable() Bukkit.getScheduler().scheduleSyncDelayedTask(Factory.getPlugin(), new Runnable()
{ {

View File

@ -108,7 +108,7 @@ public class FleshHook extends SkillActiveCharge implements IThrown
1 + charge , false, 0, 0.2, 20, false); 1 + charge , false, 0, 0.2, 20, false);
Factory.Projectile().AddThrow(item, cur, this, -1, true, true, true, Factory.Projectile().AddThrow(item, cur, this, -1, true, true, true,
Sound.FIRE_IGNITE, 1.4f, 0.8f, ParticleType.CRIT, UpdateType.TICK, 1.2f); Sound.FIRE_IGNITE, 1.4f, 0.8f, ParticleType.CRIT, UpdateType.TICK, 0.6f);
//Inform //Inform
UtilPlayer.message(cur, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); UtilPlayer.message(cur, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + "."));

View File

@ -91,7 +91,7 @@ public class AxeThrow extends SkillActive implements IThrown
player.setItemInHand(null); player.setItemInHand(null);
//Projectile //Projectile
Factory.Projectile().AddThrow(item, player, this, -1, true, true, true, false, 0.5f); Factory.Projectile().AddThrow(item, player, this, -1, true, true, true, false, 0.4f);
//Store //Store
_thrown.put(item, player); _thrown.put(item, player);

View File

@ -40,7 +40,7 @@ public class DefensiveStance extends SkillActive
SetDesc(new String[] SetDesc(new String[]
{ {
"While Blocking, you are immune to all", "While Blocking, you take 75% less",
"damage from attacks infront of you." "damage from attacks infront of you."
}); });
} }
@ -116,10 +116,7 @@ public class DefensiveStance extends SkillActive
} }
//Damage //Damage
if (event.GetCause() == DamageCause.ENTITY_ATTACK) event.AddMult(GetName(), GetName(), 0.25, false);
event.AddMult(GetName(), GetName(), 0.1, false);
else
event.SetCancelled(GetName() + " Defense");
//Effect //Effect
damagee.getWorld().playSound(damagee.getLocation(), Sound.ZOMBIE_METAL, 1f, 2f); damagee.getWorld().playSound(damagee.getLocation(), Sound.ZOMBIE_METAL, 1f, 2f);

View File

@ -45,7 +45,7 @@ public class ArcticArmor extends Skill
"", "",
"Create a freezing area around you", "Create a freezing area around you",
"in a #3#1 Block radius. Allies inside", "in a #3#1 Block radius. Allies inside",
"this area receive Protection 2.", "this area receive Protection 1.",
"", "",
"You are permanently immune to the", "You are permanently immune to the",
"Slowing effect of snow." "Slowing effect of snow."
@ -176,7 +176,7 @@ public class ArcticArmor extends Skill
//Protection //Protection
for (Player other : UtilPlayer.getNearby(cur.getLocation(), 3 + getLevel(cur))) for (Player other : UtilPlayer.getNearby(cur.getLocation(), 3 + getLevel(cur)))
if (!Factory.Relation().canHurt(cur, other) || other.equals(cur)) if (!Factory.Relation().canHurt(cur, other) || other.equals(cur))
Factory.Condition().Factory().Protection(GetName(), other, cur, 1.9, 1, false, true, true); Factory.Condition().Factory().Protection(GetName(), other, cur, 1.9, 0, false, true, true);
} }
} }

View File

@ -73,7 +73,7 @@ public class GlacialBlade extends SkillActive implements IThrown
Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()).subtract(0, 0.2, 0), ItemStackFactory.Instance.CreateStack(370)); Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()).subtract(0, 0.2, 0), ItemStackFactory.Instance.CreateStack(370));
UtilAction.velocity(item, player.getLocation().getDirection(), 1.6, false, 0, 0.2, 10, false); UtilAction.velocity(item, player.getLocation().getDirection(), 1.6, false, 0, 0.2, 10, false);
Factory.Projectile().AddThrow(item, player, this, -1, true, true, true, Factory.Projectile().AddThrow(item, player, this, -1, true, true, true,
null, 0, 0, ParticleType.SNOW_SHOVEL, UpdateType.TICK, 0.4f); null, 0, 0, ParticleType.SNOW_SHOVEL, UpdateType.TICK, 0.3f);
//Effect //Effect
item.getWorld().playSound(item.getLocation(), Sound.ORB_PICKUP, 1f, 2f); item.getWorld().playSound(item.getLocation(), Sound.ORB_PICKUP, 1f, 2f);

View File

@ -48,7 +48,7 @@ public class IcePrison extends SkillActive implements IThrown
{ {
"Launch an icy orb. When it collides,", "Launch an icy orb. When it collides,",
"it creates a hollow sphere of ice", "it creates a hollow sphere of ice",
"thats lasts for #1#1.5 seconds.", "thats lasts for #2#1 seconds.",
}); });
} }
@ -148,7 +148,7 @@ public class IcePrison extends SkillActive implements IThrown
if (!UtilBlock.airFoliage(freeze)) if (!UtilBlock.airFoliage(freeze))
return; return;
long time = 2500 + (1500 * level); long time = 2500 + (1000 * level);
int yDiff = freeze.getY() - mid.getY(); int yDiff = freeze.getY() - mid.getY();

View File

@ -78,8 +78,8 @@ public class LightningOrb extends SkillActive implements IThrown
"Launch a lightning orb. Upon a direct", "Launch a lightning orb. Upon a direct",
"hit with player, or #5#-0.4 seconds, it will", "hit with player, or #5#-0.4 seconds, it will",
"strike all enemies within #3#0.5 Blocks ", "strike all enemies within #3#0.5 Blocks ",
"with lightning, giving them Slow 3", "with lightning, giving them Slow 2",
"for #2#1 seconds." "for 4 seconds."
}); });
} }
@ -102,7 +102,7 @@ public class LightningOrb extends SkillActive implements IThrown
Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), ItemStackFactory.Instance.CreateStack(57)); Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), ItemStackFactory.Instance.CreateStack(57));
item.setVelocity(player.getLocation().getDirection()); item.setVelocity(player.getLocation().getDirection());
Factory.Projectile().AddThrow(item, player, this, System.currentTimeMillis() + 5000 - (400 * level), true, false, false, Factory.Projectile().AddThrow(item, player, this, System.currentTimeMillis() + 5000 - (400 * level), true, false, false,
Sound.FIZZ, 0.6f, 1.6f, ParticleType.FIREWORKS_SPARK, UpdateType.TICK, 1f); Sound.FIZZ, 0.6f, 1.6f, ParticleType.FIREWORKS_SPARK, UpdateType.TICK, 0.6f);
//Inform //Inform
UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + "."));
@ -179,7 +179,7 @@ public class LightningOrb extends SkillActive implements IThrown
if (cur.equals(player)) if (cur.equals(player))
continue; continue;
Factory.Condition().Factory().Slow(GetName(), cur, player, 2 + (1 * level), 2, false, true, true, true); Factory.Condition().Factory().Slow(GetName(), cur, player, 4, 1, false, true, true, true);
} }
Bukkit.getPluginManager().callEvent(new LightningOrbEvent(player, struck)); Bukkit.getPluginManager().callEvent(new LightningOrbEvent(player, struck));

View File

@ -55,7 +55,7 @@ public class HealingShot extends SkillActive
{ {
"Prepare a healing shot;", "Prepare a healing shot;",
"Your next arrow will give its target", "Your next arrow will give its target",
"Regeneration 2 for #3#2 seconds,", "Regeneration 2 for #5#1 seconds,",
"and remove all negative effects." "and remove all negative effects."
}); });
} }

View File

@ -24,8 +24,12 @@ public class Longshot extends Skill
SetDesc(new String[] SetDesc(new String[]
{ {
"Arrows do an additional 1 damage", "for every #4#-0.5 Blocks they travelled,", "Arrows do an additional 1 damage",
"however, their base damage is", "reduced by 3.", "", "Maximum of #6#6 additional damage." "for every #4#-0.5 Blocks they travelled,",
"however, their base damage is",
"reduced by 5.",
"",
"Maximum of #6#6 additional damage."
}); });
} }
@ -70,8 +74,11 @@ public class Longshot extends Skill
double length = UtilMath.offset(loc, projectile.getLocation()); double length = UtilMath.offset(loc, projectile.getLocation());
// Damage // Damage
double damage = Math.min(6 + 6 * level, (length / (4 - 0.5 * level)) - 3); double damage = Math.min(6 + 6 * level, (length / (4 - 0.5 * level)) - 5);
if (damage < 0)
damage = 0;
event.AddMod(damager.getName(), GetName(), damage, damage > 0); event.AddMod(damager.getName(), GetName(), damage, damage > 0);
} }

View File

@ -61,7 +61,7 @@ public class WolfsPounce extends SkillChargeSword
public void DoSkillCustom(Player player, float charge) public void DoSkillCustom(Player player, float charge)
{ {
//Action //Action
UtilAction.velocity(player, 0.4 + (1.4*charge), 0.2, 0.2 + (0.7*charge), true); UtilAction.velocity(player, 0.4 + (1.4*charge), 0.2, 0.3 + (0.8*charge), true);
_live.put(player, System.currentTimeMillis()); _live.put(player, System.currentTimeMillis());
//Inform //Inform

View File

@ -142,7 +142,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
//Passive C //Passive C
AddSkill(new BreakFall(this, "Break Fall", ClassType.Global, SkillType.GlobalPassive, 1, 3)); AddSkill(new BreakFall(this, "Break Fall", ClassType.Global, SkillType.GlobalPassive, 1, 3));
AddSkill(new Resistance(this, "Resistance", ClassType.Global, SkillType.GlobalPassive, 1, 3)); AddSkill(new Resistance(this, "Resistance", ClassType.Global, SkillType.GlobalPassive, 1, 3));
AddSkill(new Cooldown(this, "Quick Recovery", ClassType.Global, SkillType.GlobalPassive, 1, 3)); //AddSkill(new Cooldown(this, "Quick Recovery", ClassType.Global, SkillType.GlobalPassive, 1, 3));
//AddSkill(new Rations(this, "Rations", ClassType.Global, SkillType.GlobalPassive, 1, 2)); //AddSkill(new Rations(this, "Rations", ClassType.Global, SkillType.GlobalPassive, 1, 2));
AddSkill(new Fitness(this, "Mana Pool", ClassType.Mage, SkillType.GlobalPassive, 1, 3)); AddSkill(new Fitness(this, "Mana Pool", ClassType.Mage, SkillType.GlobalPassive, 1, 3));
@ -301,7 +301,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
AddSkill(new Riposte(this, "Riposte", ClassType.Knight, SkillType.Sword, AddSkill(new Riposte(this, "Riposte", ClassType.Knight, SkillType.Sword,
1, 5, 1, 5,
0, 0, 0, 0,
10000, -1000, false, 11000, -1000, false,
new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD}, new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD},
new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK}));
@ -331,7 +331,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
AddSkill(new ShieldSmash(this, "Shield Smash", ClassType.Knight, SkillType.Axe, AddSkill(new ShieldSmash(this, "Shield Smash", ClassType.Knight, SkillType.Axe,
1, 5, 1, 5,
0, 0, 0, 0,
8000, -1000, true, 10000, -1000, true,
new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE},
new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK}));
@ -434,7 +434,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
AddSkill(new GlacialBlade(this, "Glacial Blade", ClassType.Mage, SkillType.PassiveB, AddSkill(new GlacialBlade(this, "Glacial Blade", ClassType.Mage, SkillType.PassiveB,
1, 3, 1, 3,
16, -2, 16, -2,
1300, -300, false, 1200, -200, false,
new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD}, new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD},
new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK}));
@ -476,7 +476,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
AddSkill(new HealingShot(this, "Healing Shot", ClassType.Ranger, SkillType.Bow, AddSkill(new HealingShot(this, "Healing Shot", ClassType.Ranger, SkillType.Bow,
1, 4, 1, 4,
0, 0, 0, 0,
20000, -2000, true, 20000, -3000, true,
new Material[] {Material.BOW}, new Material[] {Material.BOW},
new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK}));
@ -504,7 +504,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
AddSkill(new RopedArrow(this, "Roped Arrow", ClassType.Ranger, SkillType.Bow, AddSkill(new RopedArrow(this, "Roped Arrow", ClassType.Ranger, SkillType.Bow,
1, 4, 1, 4,
0, 0, 0, 0,
10000, -1500, false, 9000, -1000, false,
new Material[] {Material.BOW}, new Material[] {Material.BOW},
new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK}));

View File

@ -17,7 +17,6 @@ import mineplex.servermonitor.data.BungeeStatusData;
public class StatusHistoryRepository public class StatusHistoryRepository
{ {
private String _connectionString = "jdbc:mysql://sqlstats.mineplex.com:3306/ServerStats"; private String _connectionString = "jdbc:mysql://sqlstats.mineplex.com:3306/ServerStats";
private String _bungeeConnectionString = "jdbc:mysql://db.mineplex.com:3306/BungeeServers";
private String _userName = "root"; private String _userName = "root";
private String _password = "tAbechAk3wR7tuTh"; private String _password = "tAbechAk3wR7tuTh";
@ -47,9 +46,6 @@ public class StatusHistoryRepository
if (_connection == null || _connection.isClosed()) if (_connection == null || _connection.isClosed())
_connection = DriverManager.getConnection(_connectionString, _userName, _password); _connection = DriverManager.getConnection(_connectionString, _userName, _password);
if (_bungeeconnection == null || _bungeeconnection.isClosed())
_bungeeconnection = DriverManager.getConnection(_bungeeConnectionString, _userName, _password);
// Create table // Create table
preparedStatement = _connection.prepareStatement(CREATE_GROUP_TABLE); preparedStatement = _connection.prepareStatement(CREATE_GROUP_TABLE);
preparedStatement.execute(); preparedStatement.execute();
@ -189,6 +185,7 @@ public class StatusHistoryRepository
public void saveNetworkStats(double usedCpuPercent, double usedRamPercent, double availableCPU, double availableRAM, Region region) public void saveNetworkStats(double usedCpuPercent, double usedRamPercent, double availableCPU, double availableRAM, Region region)
{ {
/*
int totalPlayers = 0; int totalPlayers = 0;
List<BungeeStatusData> bungeeStatuses = new ArrayList<BungeeStatusData>(); List<BungeeStatusData> bungeeStatuses = new ArrayList<BungeeStatusData>();
@ -318,5 +315,6 @@ public class StatusHistoryRepository
} }
} }
} }
*/
} }
} }

View File

@ -1191,7 +1191,7 @@ public class Bridge extends TeamGame implements OreObsfucation
if (type != Material.GOLDEN_APPLE && if (type != Material.GOLDEN_APPLE &&
type != Material.GOLDEN_CARROT && type != Material.GOLDEN_CARROT &&
type != Material.FLINT_AND_STEEL) type != Material.FLINT_AND_STEEL && type != Material.HOPPER)
return; return;
if (!(event.getInventory() instanceof CraftingInventory)) if (!(event.getInventory() instanceof CraftingInventory))