Merge pull request 'Remove JDBC RAM leak + improve performance' (#237) from betterSQL into master
Reviewed-on: #237 Reviewed-by: YoyoNow <jwsteam@nidido.de>
Dieser Commit ist enthalten in:
Commit
26972b58b1
@ -24,11 +24,11 @@ import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig;
|
|||||||
import de.steamwar.bungeecore.commands.*;
|
import de.steamwar.bungeecore.commands.*;
|
||||||
import de.steamwar.bungeecore.comms.SpigotReceiver;
|
import de.steamwar.bungeecore.comms.SpigotReceiver;
|
||||||
import de.steamwar.bungeecore.listeners.*;
|
import de.steamwar.bungeecore.listeners.*;
|
||||||
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
|
|
||||||
import de.steamwar.bungeecore.listeners.mods.Forge;
|
import de.steamwar.bungeecore.listeners.mods.Forge;
|
||||||
import de.steamwar.bungeecore.listeners.mods.LabyMod;
|
import de.steamwar.bungeecore.listeners.mods.LabyMod;
|
||||||
|
import de.steamwar.bungeecore.listeners.mods.ModLoaderBlocker;
|
||||||
import de.steamwar.bungeecore.listeners.mods.WorldDownloader;
|
import de.steamwar.bungeecore.listeners.mods.WorldDownloader;
|
||||||
import de.steamwar.bungeecore.sql.SQL;
|
import de.steamwar.bungeecore.sql.Statement;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
import de.steamwar.bungeecore.sql.Team;
|
import de.steamwar.bungeecore.sql.Team;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
@ -145,19 +145,20 @@ public class BungeeCore extends Plugin {
|
|||||||
new EventStarter();
|
new EventStarter();
|
||||||
new SessionManager();
|
new SessionManager();
|
||||||
new SpigotReceiver();
|
new SpigotReceiver();
|
||||||
new SteamwarDiscordBot();
|
|
||||||
new TablistManager();
|
new TablistManager();
|
||||||
|
|
||||||
getProxy().getScheduler().schedule(this, () -> {
|
getProxy().getScheduler().schedule(this, () -> {
|
||||||
SteamwarUser.clearCache();
|
SteamwarUser.clearCache();
|
||||||
Team.clearCache();
|
Team.clearCache();
|
||||||
}, 1, 1, TimeUnit.HOURS);
|
}, 1, 1, TimeUnit.HOURS);
|
||||||
|
|
||||||
|
new SteamwarDiscordBot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable(){
|
public void onDisable(){
|
||||||
ErrorLogger.stop();
|
ErrorLogger.stop();
|
||||||
SQL.close();
|
Statement.close();
|
||||||
try {
|
try {
|
||||||
SteamwarDiscordBot.instance().getJda().shutdownNow();
|
SteamwarDiscordBot.instance().getJda().shutdownNow();
|
||||||
SteamwarDiscordBot.instance().getJda().awaitStatus(JDA.Status.SHUTDOWN);
|
SteamwarDiscordBot.instance().getJda().awaitStatus(JDA.Status.SHUTDOWN);
|
||||||
@ -258,7 +259,7 @@ public class BungeeCore extends Plugin {
|
|||||||
Persistent.setChatPrefix(CHAT_PREFIX);
|
Persistent.setChatPrefix(CHAT_PREFIX);
|
||||||
Persistent.setLobbyServer(LOBBY_SERVER);
|
Persistent.setLobbyServer(LOBBY_SERVER);
|
||||||
|
|
||||||
SQL.connect(
|
Statement.connect(
|
||||||
config.getString("db.url"),
|
config.getString("db.url"),
|
||||||
config.getString("db.username"),
|
config.getString("db.username"),
|
||||||
config.getString("db.password")
|
config.getString("db.password")
|
||||||
|
@ -46,7 +46,7 @@ public class PollresultCommand extends BasicCommand {
|
|||||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
ProxiedPlayer player = (ProxiedPlayer) sender;
|
||||||
|
|
||||||
Map<String, Integer> voted = PollAnswer.getCurrentResults();
|
Map<String, Integer> voted = PollAnswer.getCurrentResults();
|
||||||
Message.send("POLLRESULT_HEADER", player, PollAnswer.getAllAnswered(), PollSystem.getQuestion());
|
Message.send("POLLRESULT_HEADER", player, voted.values().stream().reduce(Integer::sum), PollSystem.getQuestion());
|
||||||
for (Map.Entry<String, Integer> e: voted.entrySet()) {
|
for (Map.Entry<String, Integer> e: voted.entrySet()) {
|
||||||
Message.send("POLLRESULT_LIST", sender, e.getKey(), e.getValue());
|
Message.send("POLLRESULT_LIST", sender, e.getKey(), e.getValue());
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ public class TeamCommand extends BasicCommand {
|
|||||||
if(checkTeamName(player, team, args[2]))
|
if(checkTeamName(player, team, args[2]))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Team.create(args[1], args[2], user);
|
Team.create(args[1], args[2]);
|
||||||
user.setTeam(Team.get(args[1]).getTeamId());
|
user.setTeam(Team.get(args[1]).getTeamId());
|
||||||
user.setLeader(true);
|
user.setLeader(true);
|
||||||
Message.send("TEAM_CREATE_CREATED", player, args[2]);
|
Message.send("TEAM_CREATE_CREATED", player, args[2]);
|
||||||
|
@ -19,18 +19,18 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class BannedUserIPs {
|
public class BannedUserIPs {
|
||||||
|
|
||||||
private int userID;
|
private static final Statement getByID = new Statement("SELECT * FROM BannedUserIPs WHERE UserID = ? ORDER BY Timestamp ASC");
|
||||||
private Timestamp timestamp;
|
private static final Statement getByIP = new Statement("SELECT * FROM BannedUserIPs WHERE IP = ? ORDER BY Timestamp DESC");
|
||||||
|
private static final Statement banIP = new Statement("INSERT INTO BannedUserIPs (UserID, Timestamp, IP) VALUES (?, NOW(), ?) ON DUPLICATE KEY UPDATE Timestamp=NOW()");
|
||||||
|
|
||||||
|
private final int userID;
|
||||||
|
private final Timestamp timestamp;
|
||||||
|
|
||||||
private BannedUserIPs(int userID, Timestamp timestamp){
|
private BannedUserIPs(int userID, Timestamp timestamp){
|
||||||
this.userID = userID;
|
this.userID = userID;
|
||||||
@ -38,37 +38,31 @@ public class BannedUserIPs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<BannedUserIPs> get(int userID){
|
public static List<BannedUserIPs> get(int userID){
|
||||||
|
return getByID.select(rs -> {
|
||||||
List<BannedUserIPs> userIPs = new ArrayList<>();
|
List<BannedUserIPs> userIPs = new ArrayList<>();
|
||||||
ResultSet dbentry = SQL.select("SELECT * FROM BannedUserIPs WHERE UserID = ? ORDER BY Timestamp ASC", userID);
|
while(rs.next()) {
|
||||||
try {
|
|
||||||
while(dbentry.next()){
|
|
||||||
userIPs.add(new BannedUserIPs(
|
userIPs.add(new BannedUserIPs(
|
||||||
userID,
|
userID,
|
||||||
dbentry.getTimestamp("Timestamp")));
|
rs.getTimestamp("Timestamp")));
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
BungeeCore.log("Get BannedUserIPs failed", e);
|
|
||||||
}
|
}
|
||||||
return userIPs;
|
return userIPs;
|
||||||
|
}, userID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<BannedUserIPs> get(String ip){
|
public static List<BannedUserIPs> get(String ip){
|
||||||
|
return getByIP.select(rs -> {
|
||||||
List<BannedUserIPs> userIDs = new ArrayList<>();
|
List<BannedUserIPs> userIDs = new ArrayList<>();
|
||||||
ResultSet dbentry = SQL.select("SELECT * FROM BannedUserIPs WHERE IP = ? ORDER BY Timestamp DESC", ip);
|
while(rs.next()) {
|
||||||
try {
|
|
||||||
while(dbentry.next()){
|
|
||||||
userIDs.add(new BannedUserIPs(
|
userIDs.add(new BannedUserIPs(
|
||||||
dbentry.getInt("UserID"),
|
rs.getInt("UserID"),
|
||||||
dbentry.getTimestamp("Timestamp")));
|
rs.getTimestamp("Timestamp")));
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
BungeeCore.log("Get BannedUserIPs failed", e);
|
|
||||||
}
|
}
|
||||||
return userIDs;
|
return userIDs;
|
||||||
|
}, ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void banIP(SteamwarUser user, String ip){
|
static void banIP(SteamwarUser user, String ip){
|
||||||
SQL.update("INSERT INTO BannedUserIPs (UserID, Timestamp, IP) VALUES (?, NOW(), ?) ON DUPLICATE KEY UPDATE Timestamp=NOW()", user.getId(), ip);
|
banIP.update(user.getId(), ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUserID() {
|
public int getUserID() {
|
||||||
|
@ -19,15 +19,17 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class BauweltMember{
|
public class BauweltMember{
|
||||||
|
|
||||||
|
private static final Statement delete = new Statement("DELETE FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?");
|
||||||
|
private static final Statement update = new Statement("INSERT INTO BauweltMember (BauweltID, MemberID, WorldEdit, World) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE WorldEdit = VALUES(WorldEdit), World = VALUES(World)");
|
||||||
|
private static final Statement getMember = new Statement("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?");
|
||||||
|
private static final Statement getMembers = new Statement("SELECT * FROM BauweltMember WHERE BauweltID = ?");
|
||||||
|
|
||||||
private final int bauweltID;
|
private final int bauweltID;
|
||||||
private final int memberID;
|
private final int memberID;
|
||||||
private boolean worldEdit;
|
private boolean worldEdit;
|
||||||
@ -52,12 +54,11 @@ public class BauweltMember{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void remove(){
|
public void remove(){
|
||||||
SQL.update("DELETE FROM BauweltMember WHERE BauweltID = " + bauweltID + " AND MemberID = " + memberID);
|
delete.update(bauweltID, memberID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateDB(){
|
private void updateDB(){
|
||||||
SQL.update("INSERT INTO BauweltMember (BauweltID, MemberID, WorldEdit, World) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE WorldEdit = VALUES(WorldEdit), World = VALUES(World)",
|
update.update(bauweltID, memberID, worldEdit, world);
|
||||||
bauweltID, memberID, worldEdit, world);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BauweltMember getBauMember(UUID ownerID, UUID memberID){
|
public static BauweltMember getBauMember(UUID ownerID, UUID memberID){
|
||||||
@ -65,18 +66,12 @@ public class BauweltMember{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static BauweltMember getBauMember(int ownerID, int memberID){
|
public static BauweltMember getBauMember(int ownerID, int memberID){
|
||||||
ResultSet member = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?", ownerID, memberID);
|
return getMember.select(rs -> {
|
||||||
try {
|
if(!rs.next())
|
||||||
if(member == null || !member.next()){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean worldEdit = member.getBoolean("WorldEdit");
|
|
||||||
boolean world = member.getBoolean("World");
|
|
||||||
return new BauweltMember(ownerID, memberID, worldEdit, world, false);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
BungeeCore.log("Could not load BauweltMember", e);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
return new BauweltMember(ownerID, memberID, rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false);
|
||||||
|
}, ownerID, memberID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<BauweltMember> getMembers(UUID bauweltID){
|
public static List<BauweltMember> getMembers(UUID bauweltID){
|
||||||
@ -84,20 +79,13 @@ public class BauweltMember{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<BauweltMember> getMembers(int bauweltID){
|
public static List<BauweltMember> getMembers(int bauweltID){
|
||||||
try{
|
return getMembers.select(rs -> {
|
||||||
ResultSet memberlist = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ?", bauweltID);
|
|
||||||
List<BauweltMember> members = new ArrayList<>();
|
List<BauweltMember> members = new ArrayList<>();
|
||||||
while(memberlist.next()){
|
while(rs.next()){
|
||||||
int memberID = memberlist.getInt("MemberID");
|
members.add(new BauweltMember(bauweltID, rs.getInt("MemberID"), rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false));
|
||||||
boolean worldEdit = memberlist.getBoolean("WorldEdit");
|
|
||||||
boolean world = memberlist.getBoolean("World");
|
|
||||||
members.add(new BauweltMember(bauweltID, memberID, worldEdit, world, false));
|
|
||||||
}
|
}
|
||||||
return members;
|
return members;
|
||||||
}catch(SQLException e){
|
}, bauweltID);
|
||||||
BungeeCore.log("Could not load BauweltMembers", e);
|
|
||||||
}
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBauweltID() {
|
public int getBauweltID() {
|
||||||
|
@ -27,6 +27,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class CheckedSchematic {
|
public class CheckedSchematic {
|
||||||
|
|
||||||
|
private static final Statement create = new Statement("INSERT INTO CheckedSchematic (SchemName, SchemOwner, Validator, StartTime, EndTime, DeclineReason) VALUES (?, ?, ?, ?, ?, ?)");
|
||||||
|
private static final Statement previous = new Statement("SELECT * FROM CheckedSchematic WHERE SchemName = ? AND SchemOwner = ? ORDER BY EndTime ASC");
|
||||||
|
|
||||||
private final String schemName;
|
private final String schemName;
|
||||||
private final int schemOwner;
|
private final int schemOwner;
|
||||||
|
|
||||||
@ -45,20 +48,16 @@ public class CheckedSchematic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void create(String schemName, int schemOwner, int validator, Timestamp startTime, Timestamp endTime, String reason){
|
public static void create(String schemName, int schemOwner, int validator, Timestamp startTime, Timestamp endTime, String reason){
|
||||||
SQL.update("INSERT INTO CheckedSchematic (SchemName, SchemOwner, Validator, StartTime, EndTime, DeclineReason) VALUES (?, ?, ?, ?, ?, ?)",
|
create.update(schemName, schemOwner, validator, startTime, endTime, reason);
|
||||||
schemName, schemOwner, validator, startTime, endTime, reason);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<CheckedSchematic> previousChecks(String schemName, int schemOwner){
|
public static List<CheckedSchematic> previousChecks(String schemName, int schemOwner){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM CheckedSchematic WHERE SchemName = ? AND SchemOwner = ? ORDER BY EndTime ASC", schemName, schemOwner);
|
return previous.select(rs -> {
|
||||||
List<CheckedSchematic> schematics = new ArrayList<>();
|
List<CheckedSchematic> schematics = new ArrayList<>();
|
||||||
try {
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
schematics.add(new CheckedSchematic(rs));
|
schematics.add(new CheckedSchematic(rs));
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not load previous checks", e);
|
|
||||||
}
|
|
||||||
return schematics;
|
return schematics;
|
||||||
|
}, schemName, schemOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getValidator() {
|
public int getValidator() {
|
||||||
|
@ -19,33 +19,26 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
public class Elo {
|
public class Elo {
|
||||||
|
|
||||||
|
private static final Statement elo = new Statement("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?");
|
||||||
|
private static final Statement place = new Statement("SELECT COUNT(*) AS Place FROM Elo WHERE GameMode = ? AND Elo > ?");
|
||||||
|
|
||||||
private Elo(){}
|
private Elo(){}
|
||||||
|
|
||||||
public static int getElo(int userID, String gameMode){
|
public static int getElo(int userID, String gameMode){
|
||||||
ResultSet rs = SQL.select("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?", userID, gameMode);
|
return elo.select(rs -> {
|
||||||
int elo = 1000;
|
|
||||||
try {
|
|
||||||
if(rs.next())
|
if(rs.next())
|
||||||
elo = rs.getInt("Elo");
|
return rs.getInt("Elo");
|
||||||
} catch (SQLException e) {
|
return 1000;
|
||||||
throw new SecurityException("Could not get Elo", e);
|
}, userID, gameMode);
|
||||||
}
|
|
||||||
return elo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getPlacement(int elo, String gameMode){
|
public static int getPlacement(int elo, String gameMode){
|
||||||
ResultSet rs = SQL.select("SELECT COUNT(*) AS Place FROM Elo WHERE GameMode = ? AND Elo > ?", gameMode, elo);
|
return place.select(rs -> {
|
||||||
try{
|
if(rs.next())
|
||||||
if(!rs.next())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return rs.getInt("Place");
|
return rs.getInt("Place");
|
||||||
}catch(SQLException e){
|
return -1;
|
||||||
throw new SecurityException("Could not get place", e);
|
}, gameMode, elo);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,17 +19,20 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.LinkedList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Event {
|
public class Event {
|
||||||
|
|
||||||
|
private static final Statement byCurrent = new Statement("SELECT * FROM Event WHERE Start < now() AND End > now()");
|
||||||
|
private static final Statement byId = new Statement("SELECT * FROM Event WHERE EventID = ?");
|
||||||
|
private static final Statement byName = new Statement("SELECT * FROM Event WHERE lower(EventName) = ?");
|
||||||
|
private static final Statement byComing = new Statement("SELECT * FROM Event WHERE Start > now()");
|
||||||
|
|
||||||
private final int eventID;
|
private final int eventID;
|
||||||
private final String eventName;
|
private final String eventName;
|
||||||
private final Timestamp start;
|
private final Timestamp start;
|
||||||
@ -56,57 +59,39 @@ public class Event {
|
|||||||
if(current != null && current.now())
|
if(current != null && current.now())
|
||||||
return current;
|
return current;
|
||||||
|
|
||||||
ResultSet rs = SQL.select("SELECT * FROM Event WHERE Start < now() AND End > now()");
|
return byCurrent.select(rs -> {
|
||||||
try{
|
if(rs.next())
|
||||||
if(!rs.next()){
|
|
||||||
current = null;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
current = new Event(rs);
|
current = new Event(rs);
|
||||||
|
else
|
||||||
|
current = null;
|
||||||
return current;
|
return current;
|
||||||
}catch (SQLException e){
|
});
|
||||||
BungeeCore.log("Failed to load current Event", e);
|
|
||||||
throw new SecurityException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Event get(int eventID){
|
public static Event get(int eventID){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM Event WHERE EventID = " + eventID);
|
return byId.select(rs -> {
|
||||||
try{
|
|
||||||
if(!rs.next())
|
if(!rs.next())
|
||||||
throw new IllegalArgumentException();
|
throw new SQLException("Couldn't find event " + eventID);
|
||||||
|
|
||||||
return new Event(rs);
|
return new Event(rs);
|
||||||
}catch (SQLException e){
|
}, eventID);
|
||||||
BungeeCore.log("Failed to load Event", e);
|
|
||||||
throw new SecurityException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Event get(String eventName){
|
public static Event get(String eventName){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM Event WHERE lower(EventName) = ?", eventName.toLowerCase());
|
return byName.select(rs -> {
|
||||||
try{
|
|
||||||
if(!rs.next())
|
if(!rs.next())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new Event(rs);
|
return new Event(rs);
|
||||||
}catch (SQLException e){
|
}, eventName.toLowerCase());
|
||||||
BungeeCore.log("Failed to load Event by name", e);
|
|
||||||
throw new SecurityException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Event> getComing(){
|
public static List<Event> getComing(){
|
||||||
List<Event> events = new LinkedList<>();
|
return byComing.select(rs -> {
|
||||||
ResultSet rs = SQL.select("SELECT * FROM Event WHERE Start > now()");
|
List<Event> events = new ArrayList<>();
|
||||||
try{
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
events.add(new Event(rs));
|
events.add(new Event(rs));
|
||||||
}catch (SQLException e){
|
|
||||||
BungeeCore.log("Failed to load Events", e);
|
|
||||||
}
|
|
||||||
return events;
|
return events;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean now(){
|
private boolean now(){
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.ArenaMode;
|
import de.steamwar.bungeecore.ArenaMode;
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -31,7 +30,11 @@ import static java.time.temporal.ChronoUnit.SECONDS;
|
|||||||
|
|
||||||
public class EventFight implements Comparable<EventFight> {
|
public class EventFight implements Comparable<EventFight> {
|
||||||
|
|
||||||
private static Queue<EventFight> fights = new PriorityQueue<>();
|
private static final Statement reschedule = new Statement("UPDATE EventFight SET StartTime = ? WHERE EventID = ? AND FightID = ?");
|
||||||
|
private static final Statement allComing = new Statement("SELECT * FROM EventFight WHERE StartTime > now() ORDER BY `StartTime` ASC");
|
||||||
|
private static final Statement event = new Statement("SELECT * FROM EventFight WHERE EventID = ? ORDER BY `StartTime` ASC");
|
||||||
|
|
||||||
|
private static final Queue<EventFight> fights = new PriorityQueue<>();
|
||||||
|
|
||||||
private final int eventID;
|
private final int eventID;
|
||||||
private final int fightID;
|
private final int fightID;
|
||||||
@ -57,31 +60,26 @@ public class EventFight implements Comparable<EventFight> {
|
|||||||
|
|
||||||
public void reschedule(){
|
public void reschedule(){
|
||||||
startTime = Timestamp.from(new Date().toInstant().plus(30, SECONDS));
|
startTime = Timestamp.from(new Date().toInstant().plus(30, SECONDS));
|
||||||
SQL.update("UPDATE EventFight SET StartTime = ? WHERE EventID = ? AND FightID = ?", startTime, eventID, fightID);
|
reschedule.update(startTime, eventID, fightID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void loadAllComingFights(){
|
public static void loadAllComingFights(){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM EventFight WHERE StartTime > now() ORDER BY `StartTime` ASC");
|
allComing.select(rs -> {
|
||||||
fights.clear();
|
fights.clear();
|
||||||
try{
|
|
||||||
while(rs.next()){
|
while(rs.next()){
|
||||||
fights.add(new EventFight(rs));
|
fights.add(new EventFight(rs));
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
return null;
|
||||||
BungeeCore.log("Failed to load EventFights", e);
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<EventFight> getEvent(int eventID){
|
public static List<EventFight> getEvent(int eventID){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM EventFight WHERE EventID = ? ORDER BY `StartTime` ASC", eventID);
|
return event.select(rs -> {
|
||||||
List<EventFight> fights = new LinkedList<>();
|
List<EventFight> fights = new LinkedList<>();
|
||||||
try{
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
fights.add(new EventFight(rs));
|
fights.add(new EventFight(rs));
|
||||||
}catch (SQLException e){
|
|
||||||
BungeeCore.log("Failed to load EventFights", e);
|
|
||||||
}
|
|
||||||
return fights;
|
return fights;
|
||||||
|
}, eventID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Queue<EventFight> getFights() {
|
public static Queue<EventFight> getFights() {
|
||||||
|
@ -22,9 +22,13 @@ package de.steamwar.bungeecore.sql;
|
|||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
public class IgnoreSystem{
|
public class IgnoreSystem{
|
||||||
|
|
||||||
|
private static final Statement select = new Statement("SELECT COUNT(*) AS blocked FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?");
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO IgnoredPlayers (Ignorer, Ignored) VALUES (?, ?)");
|
||||||
|
private static final Statement delete = new Statement("DELETE FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?");
|
||||||
|
|
||||||
private IgnoreSystem(){}
|
private IgnoreSystem(){}
|
||||||
|
|
||||||
public static boolean isIgnored(ProxiedPlayer ignorer, ProxiedPlayer ignored){
|
public static boolean isIgnored(ProxiedPlayer ignorer, ProxiedPlayer ignored){
|
||||||
@ -34,22 +38,14 @@ public class IgnoreSystem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isIgnored(SteamwarUser ignorer, SteamwarUser ignored) {
|
public static boolean isIgnored(SteamwarUser ignorer, SteamwarUser ignored) {
|
||||||
try {
|
return select.select(ResultSet::next, ignorer.getId(), ignored.getId());
|
||||||
ResultSet rs = SQL.select("SELECT COUNT(*) AS blocked FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?", ignorer.getId(), ignored.getId());
|
|
||||||
if(!rs.next())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return rs.getInt("blocked") > 0;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not check if ignored", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ignore(SteamwarUser ignorer, SteamwarUser ignored) {
|
public static void ignore(SteamwarUser ignorer, SteamwarUser ignored) {
|
||||||
SQL.update("INSERT INTO IgnoredPlayers (Ignorer, Ignored) VALUES (?, ?)", ignorer.getId(), ignored.getId());
|
insert.update(ignorer.getId(), ignored.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unIgnore(SteamwarUser ignorer, SteamwarUser ignored) {
|
public static void unIgnore(SteamwarUser ignorer, SteamwarUser ignored) {
|
||||||
SQL.update("DELETE FROM IgnoredPlayers WHERE Ignorer = ? AND Ignored = ?", ignorer.getId(), ignored.getId());
|
delete.update(ignorer.getId(), ignored.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,11 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
public class Mod {
|
public class Mod {
|
||||||
|
|
||||||
|
private static final Statement get = new Statement("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?");
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO Mods (ModName, Platform) VALUES (?, ?)");
|
||||||
|
|
||||||
private final String modName;
|
private final String modName;
|
||||||
private final Platform platform;
|
private final Platform platform;
|
||||||
private final ModType modType;
|
private final ModType modType;
|
||||||
@ -36,15 +35,15 @@ public class Mod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Mod get(String modName, Platform platform){
|
public static Mod get(String modName, Platform platform){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM Mods WHERE ModName = ? AND Platform = ?", modName, platform.value);
|
Mod mod = get.select(rs -> {
|
||||||
try{
|
|
||||||
if(rs.next())
|
if(rs.next())
|
||||||
return new Mod(modName, platform, ModType.valueOf(rs.getInt("ModType")));
|
return new Mod(modName, platform, ModType.valueOf(rs.getInt("ModType")));
|
||||||
}catch (SQLException e){
|
return null;
|
||||||
BungeeCore.log("Failed to load Mod", e);
|
}, modName, platform.value);
|
||||||
throw new SecurityException();
|
if(mod != null)
|
||||||
}
|
return mod;
|
||||||
SQL.update("INSERT INTO Mods (ModName, Platform) VALUES (?, ?)", modName, platform.value);
|
|
||||||
|
insert.update(modName, platform.value);
|
||||||
return new Mod(modName, platform, ModType.UNKLASSIFIED);
|
return new Mod(modName, platform, ModType.UNKLASSIFIED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
import de.steamwar.bungeecore.listeners.PollSystem;
|
import de.steamwar.bungeecore.listeners.PollSystem;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@ -29,6 +28,10 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class PollAnswer {
|
public class PollAnswer {
|
||||||
|
|
||||||
|
private static final Statement get = new Statement("SELECT * FROM PollAnswer WHERE UserID = ? AND Question = ?");
|
||||||
|
private static final Statement getResults = new Statement("SELECT Count(UserID) AS Times, Answer FROM PollAnswer WHERE Question = ? GROUP BY Answer ORDER BY `Times` ASC");
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO PollAnswer (UserID, Question, Answer) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Answer = VALUES(Answer)");
|
||||||
|
|
||||||
private final int userID;
|
private final int userID;
|
||||||
private final String question;
|
private final String question;
|
||||||
private int answer;
|
private int answer;
|
||||||
@ -44,38 +47,20 @@ public class PollAnswer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static PollAnswer get(int userID){
|
public static PollAnswer get(int userID){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM PollAnswer WHERE UserID = ? AND Question = ?", userID, PollSystem.getQuestion());
|
return get.select(rs -> {
|
||||||
try {
|
if(rs.next())
|
||||||
if(!rs.next())
|
|
||||||
return new PollAnswer(userID, PollSystem.getQuestion());
|
|
||||||
return new PollAnswer(rs);
|
return new PollAnswer(rs);
|
||||||
} catch (SQLException e) {
|
return new PollAnswer(userID, PollSystem.getQuestion());
|
||||||
throw new SecurityException("Unable to get PollAnswer", e);
|
}, userID, PollSystem.getQuestion());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, Integer> getCurrentResults() {
|
public static Map<String, Integer> getCurrentResults() {
|
||||||
ResultSet set = SQL.select("SELECT Count(UserID) AS Times, Answer FROM PollAnswer WHERE Question = ? GROUP BY Answer ORDER BY `Times` ASC", PollSystem.getQuestion());
|
return getResults.select(rs -> {
|
||||||
try {
|
|
||||||
Map<String, Integer> retMap = new HashMap<>();
|
Map<String, Integer> retMap = new HashMap<>();
|
||||||
while (set.next()) {
|
while (rs.next())
|
||||||
retMap.put(PollSystem.getAnswer(set.getInt("Answer")), set.getInt("Times"));
|
retMap.put(PollSystem.getAnswer(rs.getInt("Answer")), rs.getInt("Times"));
|
||||||
}
|
|
||||||
return retMap;
|
return retMap;
|
||||||
}catch (SQLException e) {
|
}, PollSystem.getQuestion());
|
||||||
throw new SecurityException("Unable to get PollAnswer", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Integer getAllAnswered() {
|
|
||||||
ResultSet set = SQL.select("SELECT Count(UserID) AS Times FROM PollAnswer WHERE Question = ?", PollSystem.getQuestion());
|
|
||||||
try {
|
|
||||||
if(!set.next())
|
|
||||||
throw new SecurityException("Could not get PollAnswers");
|
|
||||||
return set.getInt("Times");
|
|
||||||
}catch (SQLException e) {
|
|
||||||
throw new SecurityException("Unable to get PollAnswer", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasAnswered(){
|
public boolean hasAnswered(){
|
||||||
@ -84,6 +69,6 @@ public class PollAnswer {
|
|||||||
|
|
||||||
public void setAnswer(int answer){
|
public void setAnswer(int answer){
|
||||||
this.answer = answer;
|
this.answer = answer;
|
||||||
SQL.update("INSERT INTO PollAnswer (UserID, Question, Answer) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Answer = VALUES(Answer)", userID, question, answer);
|
insert.update(userID, question, answer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,45 +31,40 @@ import java.util.*;
|
|||||||
|
|
||||||
public class Punishment {
|
public class Punishment {
|
||||||
|
|
||||||
|
private static final Statement getPunishment = new Statement("SELECT * FROM Punishments WHERE UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1");
|
||||||
|
private static final Statement getPunishments = new Statement("SELECT * FROM Punishments WHERE PunishmentId IN (SELECT MAX(PunishmentId) FROM Punishments WHERE UserId = ? GROUP BY Type)");
|
||||||
|
private static final Statement getAllPunishments = new Statement("SELECT * FROM Punishments WHERE UserId = ? ORDER BY `PunishmentId` DESC");
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO Punishments (UserId, Punisher, Type, Reason, EndTime, Perma) VALUES (?, ?, ?, ?, ?, ?)");
|
||||||
|
private static final Statement update = new Statement("UPDATE Punishments SET EndTime = ?, Reason = ?, Perma = ? WHERE PunishmentId = ?");
|
||||||
|
|
||||||
public static Punishment getPunishmentOfPlayer(int user, PunishmentType type) {
|
public static Punishment getPunishmentOfPlayer(int user, PunishmentType type) {
|
||||||
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1", user, type.name());
|
return getPunishment.select(rs -> {
|
||||||
try {
|
if(rs.next())
|
||||||
if(!set.next())
|
return new Punishment(rs);
|
||||||
return null;
|
return null;
|
||||||
return new Punishment(set);
|
}, user, type.name());
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not Load Punishments", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<PunishmentType, Punishment> getPunishmentsOfPlayer(int user) {
|
public static Map<PunishmentType, Punishment> getPunishmentsOfPlayer(int user) {
|
||||||
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE PunishmentId IN (SELECT MAX(PunishmentId) FROM Punishments WHERE UserId = ? GROUP BY Type)", user);
|
return getPunishments.select(rs -> {
|
||||||
try {
|
|
||||||
Map<PunishmentType, Punishment> punishments = new HashMap<>();
|
Map<PunishmentType, Punishment> punishments = new HashMap<>();
|
||||||
while (set.next())
|
while (rs.next())
|
||||||
punishments.put(PunishmentType.valueOf(set.getString("Type")), new Punishment(set));
|
punishments.put(PunishmentType.valueOf(rs.getString("Type")), new Punishment(rs));
|
||||||
return punishments;
|
return punishments;
|
||||||
} catch (SQLException e) {
|
}, user);
|
||||||
throw new SecurityException("Could not Load Punishments", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Punishment> getAllPunishmentsOfPlayer(int user) {
|
public static List<Punishment> getAllPunishmentsOfPlayer(int user) {
|
||||||
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE UserId = ? ORDER BY `PunishmentId` DESC", user);
|
return getAllPunishments.select(rs -> {
|
||||||
try {
|
|
||||||
List<Punishment> punishments = new ArrayList<>();
|
List<Punishment> punishments = new ArrayList<>();
|
||||||
while (set.next()) {
|
while (rs.next())
|
||||||
punishments.add(new Punishment(set));
|
punishments.add(new Punishment(rs));
|
||||||
}
|
|
||||||
return punishments;
|
return punishments;
|
||||||
} catch (SQLException e) {
|
}, user);
|
||||||
throw new SecurityException("Could not Load all Punishments", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Punishment createPunishment(int user, int executor, PunishmentType type, String reason, Timestamp endTime, boolean perma) {
|
public static Punishment createPunishment(int user, int executor, PunishmentType type, String reason, Timestamp endTime, boolean perma) {
|
||||||
SQL.update("INSERT INTO Punishments (UserId, Punisher, Type, Reason, EndTime, Perma) VALUES (?, ?, ?, ?, ?, ?)",
|
insert.update(user, executor, type.name(), reason, endTime, perma);
|
||||||
user, executor, type.name(), reason, endTime, perma);
|
|
||||||
return getPunishmentOfPlayer(user, type);
|
return getPunishmentOfPlayer(user, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +117,7 @@ public class Punishment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateEndTime(int from, String newreason, Timestamp newUpdate, boolean perma) {
|
public void updateEndTime(int from, String newreason, Timestamp newUpdate, boolean perma) {
|
||||||
if(newreason.equals(reason) && newUpdate.equals(endTime) && perma == perma)
|
if(newreason.equals(reason) && newUpdate.equals(endTime) && this.perma == perma)
|
||||||
return;
|
return;
|
||||||
ProxiedPlayer player = BungeeCore.get().getProxy().getPlayer(SteamwarUser.get(from).getUuid());
|
ProxiedPlayer player = BungeeCore.get().getProxy().getPlayer(SteamwarUser.get(from).getUuid());
|
||||||
String newReason = Message.parse("BAN_CHANGED", player, reason,
|
String newReason = Message.parse("BAN_CHANGED", player, reason,
|
||||||
@ -131,7 +126,7 @@ public class Punishment {
|
|||||||
getBantime(newUpdate, perma),
|
getBantime(newUpdate, perma),
|
||||||
newreason);
|
newreason);
|
||||||
|
|
||||||
SQL.update("UPDATE Punishments SET EndTime = ?, Reason = ?, Perma = ? WHERE PunishmentId = ?", newUpdate, newReason, perma, id);
|
update.update(newUpdate, newReason, perma, id);
|
||||||
this.reason = newReason;
|
this.reason = newReason;
|
||||||
this.perma = perma;
|
this.perma = perma;
|
||||||
this.endTime = newUpdate;
|
this.endTime = newUpdate;
|
||||||
|
@ -1,95 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is a part of the SteamWar software.
|
|
||||||
|
|
||||||
Copyright (C) 2020 SteamWar.de-Serverteam
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
|
||||||
|
|
||||||
import java.sql.*;
|
|
||||||
|
|
||||||
|
|
||||||
public class SQL {
|
|
||||||
private SQL(){}
|
|
||||||
|
|
||||||
private static Connection con;
|
|
||||||
private static String url;
|
|
||||||
private static String user;
|
|
||||||
private static String password;
|
|
||||||
|
|
||||||
public static void connect(String url, String user, String password) {
|
|
||||||
SQL.url = url;
|
|
||||||
SQL.user = user;
|
|
||||||
SQL.password = password;
|
|
||||||
try {
|
|
||||||
con = DriverManager.getConnection(url + "?autoreconnect=true", user, password);
|
|
||||||
}catch (SQLException e) {
|
|
||||||
ProxyServer.getInstance().stop();
|
|
||||||
throw new SecurityException("Could not start SQL-Exception", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void close() {
|
|
||||||
try {
|
|
||||||
if(con != null)
|
|
||||||
con.close();
|
|
||||||
}catch (SQLException e) {
|
|
||||||
BungeeCore.log("Could not close SQL-Connection", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void update(String qry, Object... objects) {
|
|
||||||
try {
|
|
||||||
prepare(con, qry, objects).executeUpdate();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
sqlException();
|
|
||||||
try (PreparedStatement st = con.prepareStatement(qry)) {
|
|
||||||
st.executeUpdate();
|
|
||||||
} catch (SQLException ex) {
|
|
||||||
throw new SecurityException("Could not execute update statement", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static ResultSet select(String qry, Object... objects){
|
|
||||||
try{
|
|
||||||
return prepare(con, qry, objects).executeQuery();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
sqlException();
|
|
||||||
try {
|
|
||||||
return prepare(con, qry, objects).executeQuery();
|
|
||||||
} catch (SQLException ex) {
|
|
||||||
throw new SecurityException("Could not run Select-Statement", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static PreparedStatement prepare(Connection connection, String qry, Object... objects) throws SQLException{
|
|
||||||
PreparedStatement st = connection.prepareStatement(qry);
|
|
||||||
for(int i = 0; i < objects.length; i++){
|
|
||||||
st.setObject(i+1, objects[i]);
|
|
||||||
}
|
|
||||||
return st;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void sqlException(){
|
|
||||||
close();
|
|
||||||
connect(url, user, password);
|
|
||||||
}
|
|
||||||
}
|
|
@ -22,7 +22,9 @@ package de.steamwar.bungeecore.sql;
|
|||||||
public class SWException {
|
public class SWException {
|
||||||
private SWException(){}
|
private SWException(){}
|
||||||
|
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)");
|
||||||
|
|
||||||
public static void log(String server, String message, String stacktrace){
|
public static void log(String server, String message, String stacktrace){
|
||||||
SQL.update("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)", server, message, stacktrace);
|
insert.update(server, message, stacktrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,14 +23,22 @@ import java.sql.ResultSet;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class Schematic {
|
public class Schematic {
|
||||||
|
|
||||||
|
private static final Statement schemByName = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemName = ? AND SchemOwner = ?");
|
||||||
|
private static final Statement schemById = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemID = ?");
|
||||||
|
private static final Statement schemsByType = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ?");
|
||||||
|
private static final Statement schemsByUserType = new Statement("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ? AND SchemOwner = ?");
|
||||||
|
private static final Statement schemsOfUser = new Statement("SELECT SchemID, SchemName, SchemOwner, Item, SchemType, Rank, SchemFormat, Item FROM Schematic WHERE SchemOwner = ? ORDER BY SchemName");
|
||||||
|
private static final Statement updateType = new Statement("UPDATE Schematic SET SchemType = ? WHERE SchemID = ?");
|
||||||
|
private static final Statement updateRank = new Statement("UPDATE Schematic SET Rank = ? WHERE SchemID = ?");
|
||||||
|
|
||||||
private final int schemID;
|
private final int schemID;
|
||||||
private final String schemName;
|
private final String schemName;
|
||||||
private final int schemOwner;
|
private final int schemOwner;
|
||||||
private SchematicType schemType;
|
private SchematicType schemType;
|
||||||
private String schemItem;
|
private final String schemItem;
|
||||||
|
|
||||||
private Schematic(ResultSet rs) throws SQLException {
|
private Schematic(ResultSet rs) throws SQLException {
|
||||||
this.schemID = rs.getInt("SchemID");
|
this.schemID = rs.getInt("SchemID");
|
||||||
@ -40,74 +48,52 @@ public class Schematic {
|
|||||||
this.schemItem = rs.getString("Item");
|
this.schemItem = rs.getString("Item");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Schematic getSchemFromDB(String schemName, UUID schemOwner){
|
|
||||||
return getSchemFromDB(schemName, SteamwarUser.get(schemOwner).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Schematic getSchemFromDB(String schemName, int schemOwner){
|
public static Schematic getSchemFromDB(String schemName, int schemOwner){
|
||||||
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemName = ? AND SchemOwner = ?", schemName, schemOwner);
|
return schemByName.select(rs -> {
|
||||||
try {
|
if(!rs.next())
|
||||||
if(schematic == null || !schematic.next()){
|
return new Schematic(rs);
|
||||||
return null;
|
return null;
|
||||||
}
|
}, schemName, schemOwner);
|
||||||
return new Schematic(schematic);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Failed loading schematic", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Schematic getSchemFromDB(int schemID){
|
public static Schematic getSchemFromDB(int schemID){
|
||||||
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemID = ?", schemID);
|
return schemById.select(rs -> {
|
||||||
try {
|
if(!rs.next())
|
||||||
if(!schematic.next())
|
|
||||||
throw new SecurityException("Failed loading schematic " + schemID);
|
throw new SecurityException("Failed loading schematic " + schemID);
|
||||||
return new Schematic(schematic);
|
return new Schematic(rs);
|
||||||
} catch (SQLException e) {
|
}, schemID);
|
||||||
throw new SecurityException("Failed loading schematic", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Schematic> getAllSchemsOfType(SchematicType schemType){
|
public static List<Schematic> getAllSchemsOfType(SchematicType schemType){
|
||||||
try{
|
return schemsByType.select(rs -> {
|
||||||
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ?", schemType.toDB());
|
|
||||||
List<Schematic> schematics = new ArrayList<>();
|
List<Schematic> schematics = new ArrayList<>();
|
||||||
while(schematic.next()){
|
while(rs.next())
|
||||||
schematics.add(new Schematic(schematic));
|
schematics.add(new Schematic(rs));
|
||||||
}
|
|
||||||
return schematics;
|
return schematics;
|
||||||
}catch(SQLException e){
|
}, schemType.toDB());
|
||||||
throw new SecurityException("Failed loading all schems of type", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Schematic> getSchemsOfType(int userId, SchematicType schemType){
|
public static List<Schematic> getSchemsOfType(int userId, SchematicType schemType){
|
||||||
try{
|
return schemsByUserType.select(rs -> {
|
||||||
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, SchemType, Item FROM Schematic WHERE SchemType = ? AND SchemOwner = ?", schemType.toDB(), userId);
|
|
||||||
List<Schematic> schematics = new ArrayList<>();
|
List<Schematic> schematics = new ArrayList<>();
|
||||||
while(schematic.next()){
|
while(rs.next())
|
||||||
schematics.add(new Schematic(schematic));
|
schematics.add(new Schematic(rs));
|
||||||
}
|
|
||||||
return schematics;
|
return schematics;
|
||||||
}catch(SQLException e){
|
}, schemType.toDB(), userId);
|
||||||
throw new SecurityException("Failed loading schems of type", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Schematic> getSchemsAccessibleByUser(int schemOwner){
|
public static List<Schematic> getSchemsAccessibleByUser(int schemOwner){
|
||||||
try{
|
return schemsOfUser.select(rs -> {
|
||||||
ResultSet schematic = SQL.select("SELECT SchemID, SchemName, SchemOwner, Item, SchemType, Rank, SchemFormat, Item FROM Schematic WHERE SchemOwner = ? ORDER BY SchemName", schemOwner);
|
|
||||||
List<Schematic> schematics = new ArrayList<>();
|
List<Schematic> schematics = new ArrayList<>();
|
||||||
while(schematic.next()){
|
while(rs.next()){
|
||||||
schematics.add(new Schematic(schematic));
|
schematics.add(new Schematic(rs));
|
||||||
}
|
}
|
||||||
List<SchematicMember> addedSchems = SchematicMember.getAccessibleSchems(schemOwner);
|
List<SchematicMember> addedSchems = SchematicMember.getAccessibleSchems(schemOwner);
|
||||||
for(SchematicMember schem : addedSchems){
|
for(SchematicMember schem : addedSchems){
|
||||||
schematics.add(getSchemFromDB(schem.getSchemName(), schem.getSchemOwner()));
|
schematics.add(getSchemFromDB(schem.getSchemName(), schem.getSchemOwner()));
|
||||||
}
|
}
|
||||||
return schematics;
|
return schematics;
|
||||||
}catch(SQLException e){
|
}, schemOwner);
|
||||||
throw new SecurityException("Failed listing schematics", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSchemID() {
|
public int getSchemID() {
|
||||||
@ -132,10 +118,10 @@ public class Schematic {
|
|||||||
|
|
||||||
public void setSchemType(SchematicType schemType) {
|
public void setSchemType(SchematicType schemType) {
|
||||||
this.schemType = schemType;
|
this.schemType = schemType;
|
||||||
SQL.update("UPDATE Schematic SET SchemType = ? WHERE SchemID = ?", schemType.toDB(), schemID);
|
updateType.update(schemType.toDB(), schemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRank(int rank) {
|
public void setRank(int rank) {
|
||||||
SQL.update("UPDATE Schematic SET Rank = ? WHERE SchemID = ?", rank, schemID);
|
updateRank.update(rank, schemID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,15 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class SchematicMember {
|
public class SchematicMember {
|
||||||
|
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO SchemMember (SchemName, SchemOwner, Member) VALUES (?, ?, ?)");
|
||||||
|
private static final Statement selectSchems = new Statement("SELECT * FROM SchemMember WHERE Member = ?");
|
||||||
|
private static final Statement delete = new Statement("DELETE FROM SchemMember WHERE SchemOwner = ? AND SchemName = ? AND Member = ?");
|
||||||
|
|
||||||
private final int schemOwner;
|
private final int schemOwner;
|
||||||
private final String schemName;
|
private final String schemName;
|
||||||
private final int member;
|
private final int member;
|
||||||
@ -38,82 +40,17 @@ public class SchematicMember {
|
|||||||
updateDB();
|
updateDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SchematicMember(String schemName, int schemOwner, int schemMember){
|
|
||||||
this(schemName, schemOwner, schemMember, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SchematicMember(String schemName, UUID schemOwner, UUID schemMember){
|
|
||||||
this(schemName, SteamwarUser.get(schemOwner).getId(), SteamwarUser.get(schemMember).getId(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateDB(){
|
private void updateDB(){
|
||||||
SQL.update("INSERT INTO SchemMember (SchemName, SchemOwner, Member) VALUES (?, ?, ?)", schemName, schemOwner, member);
|
insert.update(schemName, schemOwner, member);
|
||||||
}
|
|
||||||
|
|
||||||
public static SchematicMember getSchemMemberFromDB(String schemName, UUID schemOwner, UUID schemMember){
|
|
||||||
return getSchemMemberFromDB(schemName, SteamwarUser.get(schemOwner).getId(), SteamwarUser.get(schemMember).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SchematicMember getSchemMemberFromDB(String schemName, int schemOwner, int schemMember){
|
|
||||||
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND SchemOwner = ? AND Member = ?", schemName, schemOwner, schemMember);
|
|
||||||
try {
|
|
||||||
if(schematicMember == null || !schematicMember.next()){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new SchematicMember(schemName, schemOwner, schemMember, false);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not get schemmember", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SchematicMember getMemberBySchematic(String schemName, int schemMember){
|
|
||||||
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND Member = ?", schemName, schemMember);
|
|
||||||
try {
|
|
||||||
if(schematicMember == null || !schematicMember.next()){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
int schemOwner = schematicMember.getInt("SchemOwner");
|
|
||||||
return new SchematicMember(schemName, schemOwner, schemMember, false);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not get member", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<SchematicMember> getSchemMembers(String schemName, UUID schemOwner){
|
|
||||||
return getSchemMembers(schemName, SteamwarUser.get(schemOwner).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<SchematicMember> getSchemMembers(String schemName, int schemOwner){
|
|
||||||
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE SchemName = ? AND SchemOwner = ?", schemName, schemOwner);
|
|
||||||
try {
|
|
||||||
List<SchematicMember> schematicMembers = new ArrayList<>();
|
|
||||||
while(schematicMember.next()){
|
|
||||||
int schemMember = schematicMember.getInt("Member");
|
|
||||||
schematicMembers.add(new SchematicMember(schemName, schemOwner, schemMember, false));
|
|
||||||
}
|
|
||||||
return schematicMembers;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException("Could not get schemmembers", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<SchematicMember> getAccessibleSchems(UUID schemMember){
|
|
||||||
return getAccessibleSchems(SteamwarUser.get(schemMember).getId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<SchematicMember> getAccessibleSchems(int schemMember){
|
public static List<SchematicMember> getAccessibleSchems(int schemMember){
|
||||||
ResultSet schematicMember = SQL.select("SELECT * FROM SchemMember WHERE Member = ?", schemMember);
|
return selectSchems.select(rs -> {
|
||||||
try {
|
|
||||||
List<SchematicMember> schematicMembers = new ArrayList<>();
|
List<SchematicMember> schematicMembers = new ArrayList<>();
|
||||||
while(schematicMember.next()){
|
while(rs.next())
|
||||||
String schemName = schematicMember.getString("SchemName");
|
schematicMembers.add(new SchematicMember(rs.getString("SchemName"), rs.getInt("SchemOwner"), schemMember, false));
|
||||||
int schemOwner = schematicMember.getInt("SchemOwner");
|
|
||||||
schematicMembers.add(new SchematicMember(schemName, schemOwner, schemMember, false));
|
|
||||||
}
|
|
||||||
return schematicMembers;
|
return schematicMembers;
|
||||||
} catch (SQLException e) {
|
}, schemMember);
|
||||||
throw new SecurityException("Could not get accessible schems", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSchemOwner() {
|
public int getSchemOwner() {
|
||||||
@ -129,6 +66,6 @@ public class SchematicMember {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void remove(){
|
public void remove(){
|
||||||
SQL.update("DELETE FROM SchemMember WHERE SchemOwner = ? AND SchemName = ? AND Member = ?", schemOwner, schemName, member);
|
delete.update(schemOwner, schemName, member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,12 @@ package de.steamwar.bungeecore.sql;
|
|||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
public class Session {
|
public class Session {
|
||||||
|
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO Session (UserID, StartTime, EndTime) VALUES (?, ?, NOW())");
|
||||||
|
|
||||||
private Session(){}
|
private Session(){}
|
||||||
|
|
||||||
public static void insertSession(int userID, Timestamp startTime){
|
public static void insertSession(int userID, Timestamp startTime){
|
||||||
SQL.update("INSERT INTO Session (UserID, StartTime, EndTime) VALUES (?, ?, NOW())", userID, startTime);
|
insert.update(userID, startTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
137
src/de/steamwar/bungeecore/sql/Statement.java
Normale Datei
137
src/de/steamwar/bungeecore/sql/Statement.java
Normale Datei
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
This file is a part of the SteamWar software.
|
||||||
|
|
||||||
|
Copyright (C) 2020 SteamWar.de-Serverteam
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
|
import de.steamwar.bungeecore.BungeeCore;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
public class Statement {
|
||||||
|
private static final List<Statement> statements = new ArrayList<>();
|
||||||
|
|
||||||
|
private static Connection con;
|
||||||
|
private static String url;
|
||||||
|
private static String user;
|
||||||
|
private static String password;
|
||||||
|
|
||||||
|
public static void connect(String url, String user, String password) {
|
||||||
|
Statement.url = url;
|
||||||
|
Statement.user = user;
|
||||||
|
Statement.password = password;
|
||||||
|
try {
|
||||||
|
con = DriverManager.getConnection(url + "?autoreconnect=true", user, password);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
ProxyServer.getInstance().stop();
|
||||||
|
throw new SecurityException("Could not start SQL-Connection", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void reset(SQLException e) {
|
||||||
|
BungeeCore.get().getLogger().log(Level.WARNING, "SQL Exception thrown", e);
|
||||||
|
close();
|
||||||
|
connect(url, user, password);
|
||||||
|
try {
|
||||||
|
for (Statement statement : statements) {
|
||||||
|
statement.init();
|
||||||
|
}
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
throw new SecurityException("Could not reprepare SQL Statements", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void close() {
|
||||||
|
for (Statement statement : statements) {
|
||||||
|
try {
|
||||||
|
statement.st.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
BungeeCore.get().getLogger().log(Level.INFO, "Could not close statement", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
con.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
BungeeCore.log("Could not close SQL-Connection", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final String sql;
|
||||||
|
private PreparedStatement st;
|
||||||
|
|
||||||
|
Statement(String sql) {
|
||||||
|
this.sql = sql;
|
||||||
|
statements.add(this);
|
||||||
|
try {
|
||||||
|
init();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
reset(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void init() throws SQLException {
|
||||||
|
st = con.prepareStatement(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
<T> T select(ResultSetUser<T> user, Object... objects) {
|
||||||
|
return prepare(() -> {
|
||||||
|
ResultSet rs = st.executeQuery();
|
||||||
|
T result = user.use(rs);
|
||||||
|
rs.close();
|
||||||
|
return result;
|
||||||
|
}, objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
void update(Object... objects) {
|
||||||
|
prepare(st::executeUpdate, objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized <T> T prepare(SQLRunnable<T> runnable, Object... objects) {
|
||||||
|
try {
|
||||||
|
setObjects(objects);
|
||||||
|
return runnable.run();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
reset(e);
|
||||||
|
try {
|
||||||
|
setObjects(objects);
|
||||||
|
return runnable.run();
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
throw new SecurityException("Could not execute SQL statement", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setObjects(Object... objects) throws SQLException {
|
||||||
|
for (int i = 0; i < objects.length; i++) {
|
||||||
|
st.setObject(i + 1, objects[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ResultSetUser<T> {
|
||||||
|
T use(ResultSet rs) throws SQLException;
|
||||||
|
}
|
||||||
|
|
||||||
|
private interface SQLRunnable<T> {
|
||||||
|
T run() throws SQLException;
|
||||||
|
}
|
||||||
|
}
|
@ -24,16 +24,14 @@ import de.steamwar.bungeecore.BungeeCore;
|
|||||||
import de.steamwar.bungeecore.Message;
|
import de.steamwar.bungeecore.Message;
|
||||||
import de.steamwar.bungeecore.commands.WebregisterCommand;
|
import de.steamwar.bungeecore.commands.WebregisterCommand;
|
||||||
import de.steamwar.bungeecore.listeners.ConnectionListener;
|
import de.steamwar.bungeecore.listeners.ConnectionListener;
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Scanner;
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.connection.PendingConnection;
|
import net.md_5.bungee.api.connection.PendingConnection;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
import java.net.URL;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -41,18 +39,26 @@ import java.sql.Timestamp;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Scanner;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
|
||||||
public class SteamwarUser {
|
public class SteamwarUser {
|
||||||
private final int id;
|
|
||||||
private final UUID uuid;
|
private static final Statement updateName = new Statement("UPDATE UserData SET UserName = ? WHERE id = ?");
|
||||||
private String userName;
|
private static final Statement updateBedrock = new Statement("UPDATE UserData SET Bedrock = ? WHERE id = ?");
|
||||||
private UserGroup userGroup;
|
private static final Statement insert = new Statement("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES (?, ?, 'Member')");
|
||||||
private int team;
|
private static final Statement byUUID = new Statement("SELECT * FROM UserData WHERE UUID = ?");
|
||||||
private boolean leader;
|
private static final Statement byName = new Statement("SELECT * FROM UserData WHERE lower(UserName) = ?");
|
||||||
private Map<Punishment.PunishmentType, Punishment> punishments;
|
private static final Statement byID = new Statement("SELECT * FROM UserData WHERE id = ?");
|
||||||
private String discordId;
|
private static final Statement byDiscord = new Statement("SELECT * FROM UserData WHERE DiscordId = ?");
|
||||||
|
private static final Statement updateTeam = new Statement("Update UserData SET Team = ? WHERE id = ?");
|
||||||
|
private static final Statement updateDiscord = new Statement("Update UserData SET DiscordId = ? WHERE id = ?");
|
||||||
|
private static final Statement deleteIPs = new Statement("DELETE FROM BannedUserIPs WHERE UserID = ?");
|
||||||
|
private static final Statement updateLeader = new Statement("Update UserData SET Leader = ? WHERE id = ?");
|
||||||
|
private static final Statement getPlaytime = new Statement("SELECT SUM(UNIX_TIMESTAMP(EndTime) - UNIX_TIMESTAMP(StartTime)) as Playtime FROM Session WHERE UserID = ?");
|
||||||
|
private static final Statement getFirstjoin = new Statement("SELECT MIN(StartTime) AS FirstJoin FROM Session WHERE UserID = ?");
|
||||||
|
|
||||||
private static final Map<String, SteamwarUser> usersByName = new HashMap<>();
|
private static final Map<String, SteamwarUser> usersByName = new HashMap<>();
|
||||||
private static final Map<UUID, SteamwarUser> usersByUUID = new HashMap<>();
|
private static final Map<UUID, SteamwarUser> usersByUUID = new HashMap<>();
|
||||||
@ -62,6 +68,15 @@ public class SteamwarUser {
|
|||||||
private static final String API_URL = "https://api.mojang.com/users/profiles/minecraft/";
|
private static final String API_URL = "https://api.mojang.com/users/profiles/minecraft/";
|
||||||
private static final JsonParser jsonParser = new JsonParser();
|
private static final JsonParser jsonParser = new JsonParser();
|
||||||
|
|
||||||
|
private final int id;
|
||||||
|
private final UUID uuid;
|
||||||
|
private String userName;
|
||||||
|
private final UserGroup userGroup;
|
||||||
|
private int team;
|
||||||
|
private boolean leader;
|
||||||
|
private final Map<Punishment.PunishmentType, Punishment> punishments;
|
||||||
|
private String discordId;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
LIXFEL_DE = InetAddress.getByAddress(new byte[]{(byte) 195, (byte) 201, (byte) 242, 43});
|
LIXFEL_DE = InetAddress.getByAddress(new byte[]{(byte) 195, (byte) 201, (byte) 242, 43});
|
||||||
@ -93,7 +108,7 @@ public class SteamwarUser {
|
|||||||
if(user != null){
|
if(user != null){
|
||||||
String userName = connection.getName();
|
String userName = connection.getName();
|
||||||
if(!user.userName.equals(userName)){
|
if(!user.userName.equals(userName)){
|
||||||
SQL.update("UPDATE UserData SET UserName = ? WHERE id = ?", userName, user.id);
|
updateName.update(userName, user.id);
|
||||||
WebregisterCommand.changeUsername(user.userName, userName);
|
WebregisterCommand.changeUsername(user.userName, userName);
|
||||||
user.userName = userName;
|
user.userName = userName;
|
||||||
}
|
}
|
||||||
@ -105,7 +120,7 @@ public class SteamwarUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean bedrock = connection.getAddress().getAddress().equals(LIXFEL_DE);
|
boolean bedrock = connection.getAddress().getAddress().equals(LIXFEL_DE);
|
||||||
SQL.update("UPDATE UserData SET Bedrock = ? WHERE id = ?", bedrock, user.id);
|
updateBedrock.update(bedrock, user.id);
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +130,7 @@ public class SteamwarUser {
|
|||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID uuid = SteamwarUser.loadUUID(name);
|
UUID uuid = SteamwarUser.getUUIDofOfflinePlayer(name);
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -124,21 +139,28 @@ public class SteamwarUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static SteamwarUser createUserInDatabase(UUID uuid, String name) {
|
private static SteamwarUser createUserInDatabase(UUID uuid, String name) {
|
||||||
SQL.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES (?, ?, 'Member')", uuid.toString(), name);
|
insert.update(uuid.toString(), name);
|
||||||
return dbInit(SQL.select("SELECT * FROM UserData WHERE UUID = ?", uuid.toString()));
|
return get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SteamwarUser get(String userName){
|
public static SteamwarUser get(String userName){
|
||||||
userName = userName.toLowerCase();
|
userName = userName.toLowerCase();
|
||||||
if(usersByName.containsKey(userName))
|
if(usersByName.containsKey(userName))
|
||||||
return usersByName.get(userName);
|
return usersByName.get(userName);
|
||||||
return dbInit(SQL.select("SELECT * FROM UserData WHERE lower(UserName) = ?", userName));
|
return byName.select(rs -> {
|
||||||
|
if(rs.next())
|
||||||
|
return new SteamwarUser(rs);
|
||||||
|
return null;
|
||||||
|
}, userName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SteamwarUser get(UUID uuid){
|
public static SteamwarUser get(UUID uuid){
|
||||||
if(usersByUUID.containsKey(uuid))
|
if(usersByUUID.containsKey(uuid))
|
||||||
return usersByUUID.get(uuid);
|
return usersByUUID.get(uuid);
|
||||||
return dbInit(SQL.select("SELECT * FROM UserData WHERE UUID = ?", uuid.toString()));
|
return byUUID.select(rs -> {
|
||||||
|
rs.next();
|
||||||
|
return new SteamwarUser(rs);
|
||||||
|
}, uuid.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SteamwarUser get(ProxiedPlayer player){
|
public static SteamwarUser get(ProxiedPlayer player){
|
||||||
@ -148,13 +170,20 @@ public class SteamwarUser {
|
|||||||
public static SteamwarUser get(int id){
|
public static SteamwarUser get(int id){
|
||||||
if(usersById.containsKey(id))
|
if(usersById.containsKey(id))
|
||||||
return usersById.get(id);
|
return usersById.get(id);
|
||||||
return dbInit(SQL.select("SELECT * FROM UserData WHERE id = ?", id));
|
return byID.select(rs -> {
|
||||||
|
rs.next();
|
||||||
|
return new SteamwarUser(rs);
|
||||||
|
}, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SteamwarUser get(Long discordId) {
|
public static SteamwarUser get(Long discordId) {
|
||||||
if(usersByDiscord.containsKey(discordId.toString()))
|
if(usersByDiscord.containsKey(discordId.toString()))
|
||||||
return usersByDiscord.get(discordId.toString());
|
return usersByDiscord.get(discordId.toString());
|
||||||
return dbInit(SQL.select("SELECT * FROM UserData WHERE DiscordId = ?", discordId));
|
return byDiscord.select(rs -> {
|
||||||
|
if(rs.next())
|
||||||
|
return new SteamwarUser(rs);
|
||||||
|
return null;
|
||||||
|
}, discordId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearCache(){
|
public static void clearCache(){
|
||||||
@ -164,25 +193,20 @@ public class SteamwarUser {
|
|||||||
usersByDiscord.clear();
|
usersByDiscord.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UUID loadUUID(String playerName) {
|
private static UUID getUUIDofOfflinePlayer(String playerName) {
|
||||||
try {
|
try {
|
||||||
final URL url = new URL(API_URL + playerName);
|
final URL url = new URL(API_URL + playerName);
|
||||||
return getUniqueIdFromString(jsonParser.parse(new Scanner(url.openConnection().getInputStream()).nextLine()).getAsJsonObject().get("id").getAsString());
|
String uuid = jsonParser.parse(new Scanner(url.openConnection().getInputStream()).nextLine()).getAsJsonObject().get("id").getAsString();
|
||||||
} catch (MalformedURLException e) {
|
return UUID.fromString(uuid.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"));
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
BungeeCore.get().getLogger().log(Level.SEVERE, "Could not get offline player UUID", e);
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UUID getUniqueIdFromString(String uuid) {
|
|
||||||
return UUID.fromString(uuid.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTeam(int team){
|
public void setTeam(int team){
|
||||||
this.team = team;
|
this.team = team;
|
||||||
SQL.update("Update UserData SET Team = ? WHERE id = ?", team, id);
|
updateTeam.update(team, id);
|
||||||
setLeader(false);
|
setLeader(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +241,7 @@ public class SteamwarUser {
|
|||||||
public void setDiscordId(String discordId) {
|
public void setDiscordId(String discordId) {
|
||||||
usersByDiscord.remove(this.discordId);
|
usersByDiscord.remove(this.discordId);
|
||||||
this.discordId = discordId;
|
this.discordId = discordId;
|
||||||
SQL.update("Update UserData SET DiscordId = ? WHERE id = ?", discordId, id);
|
updateDiscord.update(discordId, id);
|
||||||
if(discordId != null) {
|
if(discordId != null) {
|
||||||
usersByDiscord.put(discordId, this);
|
usersByDiscord.put(discordId, this);
|
||||||
}
|
}
|
||||||
@ -227,7 +251,7 @@ public class SteamwarUser {
|
|||||||
if(!punishments.containsKey(Punishment.PunishmentType.Ban))
|
if(!punishments.containsKey(Punishment.PunishmentType.Ban))
|
||||||
return false;
|
return false;
|
||||||
if(!punishments.get(Punishment.PunishmentType.Ban).isCurrent()) {
|
if(!punishments.get(Punishment.PunishmentType.Ban).isCurrent()) {
|
||||||
SQL.update("DELETE FROM BannedUserIPs WHERE UserID = ?", id);
|
deleteIPs.update(id);
|
||||||
punishments.remove(Punishment.PunishmentType.Ban);
|
punishments.remove(Punishment.PunishmentType.Ban);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -298,38 +322,20 @@ public class SteamwarUser {
|
|||||||
punishments.put(Punishment.PunishmentType.Mute, Punishment.createPunishment(id, from, Punishment.PunishmentType.Mute, muteReason, time, perma));
|
punishments.put(Punishment.PunishmentType.Mute, Punishment.createPunishment(id, from, Punishment.PunishmentType.Mute, muteReason, time, perma));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SteamwarUser dbInit(ResultSet rs){
|
|
||||||
try {
|
|
||||||
if(!rs.next())
|
|
||||||
return null;
|
|
||||||
return new SteamwarUser(rs);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getOnlinetime() {
|
public double getOnlinetime() {
|
||||||
ResultSet set = SQL.select("SELECT SUM(UNIX_TIMESTAMP(EndTime) - UNIX_TIMESTAMP(StartTime)) as Playtime FROM Session WHERE UserID = ?", id);
|
return getPlaytime.select(rs -> {
|
||||||
try {
|
if(rs.next())
|
||||||
if(!set.next())
|
return rs.getBigDecimal("Playtime").doubleValue();
|
||||||
return 0;
|
return 0.0;
|
||||||
return set.getBigDecimal("Playtime").doubleValue();
|
}, id);
|
||||||
} catch (SQLException throwables) {
|
|
||||||
throw new SecurityException("Could not load Online Time", throwables);
|
|
||||||
} catch (NullPointerException e) { //When no Sessions are recorded
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Timestamp getFirstjoin() {
|
public Timestamp getFirstjoin() {
|
||||||
ResultSet set = SQL.select("SELECT MIN(StartTime) AS FirstJoin FROM Session WHERE UserID = ?", id);
|
return getFirstjoin.select(rs -> {
|
||||||
try {
|
if(rs.next())
|
||||||
if(!set.next())
|
return rs.getTimestamp("FirstJoin");
|
||||||
return null;
|
return null;
|
||||||
return set.getTimestamp("FirstJoin");
|
}, id);
|
||||||
} catch (SQLException throwables) {
|
|
||||||
throw new SecurityException("Could not load First Join");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLeader() {
|
public boolean isLeader() {
|
||||||
@ -338,6 +344,6 @@ public class SteamwarUser {
|
|||||||
|
|
||||||
public void setLeader(boolean leader) {
|
public void setLeader(boolean leader) {
|
||||||
this.leader = leader;
|
this.leader = leader;
|
||||||
SQL.update("Update UserData SET Leader = ? WHERE id = ?", leader, id);
|
updateLeader.update(leader, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,25 +19,31 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static de.steamwar.bungeecore.sql.SQL.select;
|
|
||||||
|
|
||||||
public class Team {
|
public class Team {
|
||||||
|
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO Team (TeamKuerzel, TeamName) VALUES (?, ?)");
|
||||||
|
private static final Statement delete = new Statement("UPDATE Team SET TeamDeleted = 1 WHERE TeamID = ?");
|
||||||
|
private static final Statement update = new Statement("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamColor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamColor = VALUES(TeamColor)");
|
||||||
|
private static final Statement getSize = new Statement("SELECT COUNT(id) FROM UserData WHERE Team = ?");
|
||||||
|
private static final Statement getMembers = new Statement("SELECT id FROM UserData WHERE Team = ?");
|
||||||
|
private static final Statement byId = new Statement("SELECT * FROM Team WHERE TeamID = ?");
|
||||||
|
private static final Statement byName = new Statement("SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted");
|
||||||
|
private static final Statement all = new Statement("SELECT * FROM Team WHERE NOT TeamDeleted");
|
||||||
|
|
||||||
|
private static final List<Team> teamCache = new LinkedList<>();
|
||||||
|
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
|
||||||
|
|
||||||
private final int teamId;
|
private final int teamId;
|
||||||
private String teamKuerzel;
|
private String teamKuerzel;
|
||||||
private String teamName;
|
private String teamName;
|
||||||
private String teamColor;
|
private String teamColor;
|
||||||
|
|
||||||
private static final List<Team> teamCache = new LinkedList<>();
|
|
||||||
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
|
|
||||||
|
|
||||||
private Team(int id, String kuerzel, String name, String color){
|
private Team(int id, String kuerzel, String name, String color){
|
||||||
teamId = id;
|
teamId = id;
|
||||||
teamKuerzel = kuerzel;
|
teamKuerzel = kuerzel;
|
||||||
@ -52,8 +58,8 @@ public class Team {
|
|||||||
this(rs.getInt("TeamID"), rs.getString("TeamKuerzel"), rs.getString("TeamName"), rs.getString("TeamColor"));
|
this(rs.getInt("TeamID"), rs.getString("TeamKuerzel"), rs.getString("TeamName"), rs.getString("TeamColor"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void create(String kuerzel, String name, SteamwarUser user){
|
public static void create(String kuerzel, String name){
|
||||||
SQL.update("INSERT INTO Team (TeamKuerzel, TeamName) VALUES (?, ?)", kuerzel, name);
|
insert.update(kuerzel, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team get(int id){
|
public static Team get(int id){
|
||||||
@ -64,51 +70,38 @@ public class Team {
|
|||||||
for(Team team : teamCache)
|
for(Team team : teamCache)
|
||||||
if(team.teamId == id)
|
if(team.teamId == id)
|
||||||
return team;
|
return team;
|
||||||
return load(select("SELECT * FROM Team WHERE TeamID = ?", id));
|
return byId.select(rs -> {
|
||||||
|
rs.next();
|
||||||
|
return new Team(rs);
|
||||||
|
}, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team get(String name){
|
public static Team get(String name){
|
||||||
for(Team team : teamCache)
|
for(Team team : teamCache)
|
||||||
if(team.teamName.equalsIgnoreCase(name))
|
if(team.teamName.equalsIgnoreCase(name) || team.teamKuerzel.equalsIgnoreCase(name))
|
||||||
return team;
|
return team;
|
||||||
for(Team team : teamCache)
|
return byName.select(rs -> {
|
||||||
if(team.teamKuerzel.equalsIgnoreCase(name))
|
if(rs.next())
|
||||||
return team;
|
return new Team(rs);
|
||||||
return load(select("SELECT * FROM Team WHERE (lower(TeamName) = ? OR lower(TeamKuerzel) = ?) AND NOT TeamDeleted", name.toLowerCase(), name.toLowerCase()));
|
return null;
|
||||||
|
}, name.toLowerCase(), name.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Team> getAll(){
|
public static List<Team> getAll(){
|
||||||
clearCache();
|
clearCache();
|
||||||
try{
|
return all.select(rs -> {
|
||||||
ResultSet rs = select("SELECT * FROM Team WHERE NOT TeamDeleted");
|
|
||||||
if(rs == null)
|
|
||||||
return teamCache;
|
|
||||||
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
new Team(rs);
|
new Team(rs);
|
||||||
} catch (SQLException e) {
|
|
||||||
BungeeCore.log("Could not get all Teams", e);
|
|
||||||
}
|
|
||||||
return teamCache;
|
return teamCache;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearCache(){
|
public static void clearCache(){
|
||||||
teamCache.clear();
|
teamCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Team load(ResultSet dbteam){
|
|
||||||
try {
|
|
||||||
if(!dbteam.next())
|
|
||||||
return null;
|
|
||||||
return new Team(dbteam);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
BungeeCore.log("Could not load Team", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateDB(){
|
private void updateDB(){
|
||||||
SQL.update("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamColor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamColor = VALUES(TeamColor)", teamId, teamKuerzel, teamName, teamColor);
|
update.update(teamId, teamKuerzel, teamName, teamColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTeamId() {
|
public int getTeamId() {
|
||||||
@ -143,33 +136,24 @@ public class Team {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int size(){
|
public int size(){
|
||||||
ResultSet rs = select("SELECT COUNT(id) FROM UserData WHERE Team = ?", teamId);
|
return getSize.select(rs -> {
|
||||||
try {
|
|
||||||
rs.next();
|
rs.next();
|
||||||
return rs.getInt("COUNT(id)");
|
return rs.getInt("COUNT(id)");
|
||||||
}catch (SQLException e) {
|
}, teamId);
|
||||||
BungeeCore.log("Could not get Teamsize", e);
|
|
||||||
return 1000;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disband(SteamwarUser user){
|
public void disband(SteamwarUser user){
|
||||||
user.setLeader(false);
|
user.setLeader(false);
|
||||||
SQL.update("UPDATE Team SET TeamDeleted = 1 WHERE TeamID = ?", teamId);
|
delete.update(teamId);
|
||||||
teamCache.remove(this);
|
teamCache.remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Integer> getMembers(){
|
public List<Integer> getMembers(){
|
||||||
try{
|
return getMembers.select(rs -> {
|
||||||
ResultSet memberlist = select("SELECT id FROM UserData WHERE Team = ?", teamId);
|
|
||||||
List<Integer> members = new ArrayList<>();
|
List<Integer> members = new ArrayList<>();
|
||||||
while(memberlist.next()){
|
while(rs.next())
|
||||||
members.add(memberlist.getInt("id"));
|
members.add(rs.getInt("id"));
|
||||||
}
|
|
||||||
return members;
|
return members;
|
||||||
}catch(SQLException e){
|
}, teamId);
|
||||||
BungeeCore.log("Could not get Teammembers", e);
|
|
||||||
}
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,55 +19,46 @@
|
|||||||
|
|
||||||
package de.steamwar.bungeecore.sql;
|
package de.steamwar.bungeecore.sql;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class TeamTeilnahme {
|
public class TeamTeilnahme {
|
||||||
private TeamTeilnahme(){}
|
private TeamTeilnahme(){}
|
||||||
|
|
||||||
|
private static final Statement insert = new Statement("INSERT INTO TeamTeilnahme (TeamID, EventID) VALUES (?, ?)");
|
||||||
|
private static final Statement delete = new Statement("DELETE FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?");
|
||||||
|
private static final Statement byEventTeam = new Statement("SELECT * FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?");
|
||||||
|
private static final Statement byEvent = new Statement("SELECT * FROM TeamTeilnahme WHERE EventID = ?");
|
||||||
|
private static final Statement byTeam = new Statement("SELECT * FROM TeamTeilnahme WHERE TeamID = ?");
|
||||||
|
|
||||||
public static void teilnehmen(int teamID, int eventID){
|
public static void teilnehmen(int teamID, int eventID){
|
||||||
SQL.update("INSERT INTO TeamTeilnahme (TeamID, EventID) VALUES (?, ?)", teamID, eventID);
|
insert.update(teamID, eventID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void notTeilnehmen(int teamID, int eventID){
|
public static void notTeilnehmen(int teamID, int eventID){
|
||||||
SQL.update("DELETE FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?", teamID, eventID);
|
delete.update(teamID, eventID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean nimmtTeil(int teamID, int eventID){
|
public static boolean nimmtTeil(int teamID, int eventID){
|
||||||
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE TeamID = ? AND EventID = ?", teamID, eventID);
|
return byEventTeam.select(ResultSet::next, teamID, eventID);
|
||||||
try{
|
|
||||||
return rs.next();
|
|
||||||
}catch (SQLException e){
|
|
||||||
BungeeCore.log("Failed to load TeamTeilnahme", e);
|
|
||||||
throw new SecurityException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Team> getTeams(int eventID){
|
public static Set<Team> getTeams(int eventID){
|
||||||
|
return byEvent.select(rs -> {
|
||||||
Set<Team> teams = new HashSet<>();
|
Set<Team> teams = new HashSet<>();
|
||||||
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE EventID = ?", eventID);
|
|
||||||
try{
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
teams.add(Team.get(rs.getInt("TeamID")));
|
teams.add(Team.get(rs.getInt("TeamID")));
|
||||||
}catch (SQLException e){
|
|
||||||
BungeeCore.log("Failed to load TeamTeilnahmen", e);
|
|
||||||
}
|
|
||||||
return teams;
|
return teams;
|
||||||
|
}, eventID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Event> getEvents(int teamID){
|
public static Set<Event> getEvents(int teamID){
|
||||||
|
return byTeam.select(rs -> {
|
||||||
Set<Event> events = new HashSet<>();
|
Set<Event> events = new HashSet<>();
|
||||||
ResultSet rs = SQL.select("SELECT * FROM TeamTeilnahme WHERE TeamID = ?", teamID);
|
|
||||||
try{
|
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
events.add(Event.get(rs.getInt("EventID")));
|
events.add(Event.get(rs.getInt("EventID")));
|
||||||
}catch (SQLException e){
|
|
||||||
BungeeCore.log("Failed to load TeamTeilnahmen", e);
|
|
||||||
}
|
|
||||||
return events;
|
return events;
|
||||||
|
}, teamID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren