SteamWar/SpigotCore
Archiviert
13
0

Merge remote-tracking branch 'origin/master' into schematic-node
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

# Conflicts:
#	SpigotCore_Main/src/de/steamwar/sql/CheckedSchematic.java
#	SpigotCore_Main/src/de/steamwar/sql/DownloadSchematic.java
#	SpigotCore_Main/src/de/steamwar/sql/Schematic.java
Dieser Commit ist enthalten in:
Chaoscaot 2021-11-03 16:12:10 +01:00
Commit 1e3d387ff8
17 geänderte Dateien mit 194 neuen und 205 gelöschten Zeilen

Datei anzeigen

@ -34,6 +34,7 @@ import java.util.stream.Collectors;
public abstract class SWCommand {
private boolean initialized = false;
private final Command command;
private final List<SubCommand> commandList = new ArrayList<>();
private final List<SubCommand> commandHelpList = new ArrayList<>();
@ -47,6 +48,9 @@ public abstract class SWCommand {
this.command = new Command(command, "", "/" + command, Arrays.asList(aliases)) {
@Override
public boolean execute(CommandSender sender, String alias, String[] args) {
if (!initialized) {
createMapping();
}
if (commandList.stream().anyMatch(s -> s.invoke(sender, args))) return false;
commandHelpList.stream().anyMatch(s -> s.invoke(sender, args));
return false;
@ -54,6 +58,9 @@ public abstract class SWCommand {
@Override
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
if (!initialized) {
createMapping();
}
String string = args[args.length - 1].toLowerCase();
return commandList.stream()
.map(s -> s.tabComplete(sender, args))
@ -66,7 +73,9 @@ public abstract class SWCommand {
};
unregister();
register();
}
private synchronized void createMapping() {
Method[] methods = getClass().getDeclaredMethods();
for (Method method : methods) {
addMapper(Mapper.class, method, i -> i == 0, false, TypeMapper.class, (anno, typeMapper) -> {
@ -123,6 +132,7 @@ public abstract class SWCommand {
});
commandHelpList.sort(Comparator.comparingInt(o -> -o.subCommand.length));
}
initialized = true;
}
private <T extends Annotation> void add(Class<T> annotation, Method method, IntPredicate parameterTester, boolean firstParameter, Class<?> returnType, BiConsumer<T, Parameter[]> consumer) {

Datei anzeigen

@ -56,6 +56,8 @@ public class Core extends JavaPlugin{
version = 12;
}
private ErrorHandler errorHandler;
@Override
public void onLoad() {
setInstance(this);
@ -63,7 +65,7 @@ public class Core extends JavaPlugin{
@Override
public void onEnable() {
new ErrorHandler();
errorHandler = new ErrorHandler();
Bukkit.getPluginManager().registerEvents(new PlayerJoinedEvent(), this);
Bukkit.getPluginManager().registerEvents(new ChattingEvent(), this);
@ -80,7 +82,9 @@ public class Core extends JavaPlugin{
}
@Override
public void onDisable(){
public void onDisable() {
ChunkListener.protocol.close();
errorHandler.unregister();
SQL.close();
}

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.core;
import de.steamwar.sql.SQL;
import de.steamwar.sql.SWException;
import java.io.ByteArrayOutputStream;
@ -39,6 +40,10 @@ public class ErrorHandler extends Handler {
Logger.getLogger("").addHandler(this);
}
void unregister() {
Logger.getLogger("").removeHandler(this);
}
@Override
public void publish(LogRecord logRecord) {
if(logRecord.getLevel().intValue() < Level.WARNING.intValue())
@ -48,6 +53,8 @@ public class ErrorHandler extends Handler {
return;
String message = logRecord.getMessage();
if(message == null)
message = "";
for(String reason : ignoreStartsWith)
if(message.startsWith(reason))
return;
@ -76,6 +83,9 @@ public class ErrorHandler extends Handler {
if(stacktrace.contains("POI data mismatch"))
return;
if(!SQL.connectionStable())
return;
SWException.log(message, stacktrace);
}
@ -129,6 +139,8 @@ public class ErrorHandler extends Handler {
startsWith.add("Failed to save player data for ");
startsWith.add("Failed to check session lock for world located at");
startsWith.add("Saving oversized chunk ");
startsWith.add("Ignoring plugin channel");
startsWith.add("Ignoring incoming plugin");
ignoreStartsWith = Collections.unmodifiableList(startsWith);
List<String> contains = new ArrayList<>();

Datei anzeigen

@ -103,7 +103,7 @@ public class SWInventory implements Listener {
}
public void setCallback(int pos, InvCallback c) {
callbacks.put(pos, inventoryClickEvent -> c.clicked(inventoryClickEvent.getClick()));
callbacks.put(pos, inventoryClickEvent -> c.clicked(inventoryClickEvent == null ? null : inventoryClickEvent.getClick()));
}
public void setItemEvent(int pos, ItemStack itemStack, Consumer<InventoryClickEvent> c) {

Datei anzeigen

@ -19,14 +19,15 @@
package de.steamwar.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
public class BauweltMember{
private static final SQL.Statement getMember = new SQL.Statement("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?");
private static final SQL.Statement getMembers = new SQL.Statement("SELECT * FROM BauweltMember WHERE BauweltID = ?");
private final int bauweltID;
private final int memberID;
private boolean worldEdit;
@ -56,11 +57,13 @@ public class BauweltMember{
this(SteamwarUser.get(ownerID).getId(), SteamwarUser.get(memberID).getId(), worldEdit, world, true);
}
@Deprecated
public void remove(){
SQL.update("DELETE FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?", bauweltID, memberID);
members.remove(this);
}
@Deprecated
private void updateDB(){
SQL.update("INSERT INTO BauweltMember (BauweltID, MemberID, WorldEdit, World) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE WorldEdit = VALUES(WorldEdit), World = VALUES(World)",
bauweltID, memberID, worldEdit, world);
@ -74,17 +77,11 @@ public class BauweltMember{
for(BauweltMember member : members)
if(member.memberID == memberID)
return member;
ResultSet member = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ? AND MemberID = ?", ownerID, memberID);
try {
if(member == null || !member.next()){
return getMember.select(rs -> {
if(!rs.next())
return null;
}
boolean worldEdit = member.getBoolean("WorldEdit");
boolean testblock = member.getBoolean("World");
return new BauweltMember(ownerID, memberID, worldEdit, testblock, false);
} catch (SQLException e) {
throw new SecurityException("Did not get member", e);
}
return new BauweltMember(ownerID, memberID, rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false);
}, ownerID, memberID);
}
public static List<BauweltMember> getMembers(UUID bauweltID){
@ -92,19 +89,12 @@ public class BauweltMember{
}
public static List<BauweltMember> getMembers(int bauweltID){
try{
ResultSet memberlist = SQL.select("SELECT * FROM BauweltMember WHERE BauweltID = ?", bauweltID);
List<BauweltMember> members = new LinkedList<>();
while(memberlist.next()){
int memberID = memberlist.getInt("MemberID");
boolean worldEdit = memberlist.getBoolean("WorldEdit");
boolean testblock = memberlist.getBoolean("World");
members.add(new BauweltMember(bauweltID, memberID, worldEdit, testblock, false));
}
return getMembers.select(rs -> {
List<BauweltMember> members = new ArrayList<>();
while(rs.next())
members.add(new BauweltMember(bauweltID, rs.getInt("MemberID"), rs.getBoolean("WorldEdit"), rs.getBoolean("World"), false));
return members;
}catch(SQLException e){
throw new SecurityException("Did not get members", e);
}
}, bauweltID);
}
public int getBauweltID() {
@ -119,6 +109,7 @@ public class BauweltMember{
return worldEdit;
}
@Deprecated
public void setWorldEdit(boolean worldEdit) {
this.worldEdit = worldEdit;
updateDB();
@ -128,6 +119,7 @@ public class BauweltMember{
return world;
}
@Deprecated
public void setWorld(boolean world) {
this.world = world;
updateDB();

Datei anzeigen

@ -19,24 +19,21 @@
package de.steamwar.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Elo {
private Elo(){}
private static final SQL.Statement get = new SQL.Statement("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?");
private static final SQL.Statement set = new SQL.Statement("INSERT INTO Elo (UserID, GameMode, Elo) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Elo = VALUES(Elo)");
public static int getElo(int userId, String gameMode){
ResultSet rs = SQL.select("SELECT Elo FROM Elo WHERE UserID = ? AND GameMode = ?", userId, gameMode);
try{
if(!rs.next())
return get.select(rs -> {
if(rs.next())
return rs.getInt("id");
return 1000;
return rs.getInt("Elo");
}catch(SQLException e){
throw new SecurityException("Could not get elo", e);
}
}, userId, gameMode);
}
public static void setElo(int userId, String gameMode, int elo){
SQL.update("INSERT INTO Elo (UserID, GameMode, Elo) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Elo = VALUES(Elo)", userId, gameMode, elo);
set.update(userId, gameMode, elo);
}
}

Datei anzeigen

@ -19,15 +19,14 @@
package de.steamwar.sql;
import org.bukkit.Bukkit;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.logging.Level;
public class Event {
private static final SQL.Statement get = new SQL.Statement("SELECT * FROM Event WHERE EventID = ?");
private final int eventID;
private final String eventName;
private final Timestamp start;
@ -47,16 +46,10 @@ public class Event {
}
public static Event get(int eventID){
ResultSet rs = SQL.select("SELECT * FROM Event WHERE EventID = ?", eventID);
try{
if(!rs.next())
throw new IllegalArgumentException();
return get.select(rs -> {
rs.next();
return new Event(rs);
}catch (SQLException e){
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Event", e);
throw new SecurityException();
}
}, eventID);
}
public int getEventID() {

Datei anzeigen

@ -19,19 +19,21 @@
package de.steamwar.sql;
import org.bukkit.Bukkit;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
public class EventFight {
private int eventID;
private int fightID;
private int teamBlue;
private int teamRed;
private int kampfleiter;
private int ergebnis;
private static final SQL.Statement get = new SQL.Statement("SELECT * FROM EventFight WHERE FightID = ?");
private static final SQL.Statement setResult = new SQL.Statement("UPDATE EventFight SET Ergebnis = ? WHERE FightID = ?");
private static final SQL.Statement setFight = new SQL.Statement("UPDATE EventFight SET Fight = ? WHERE FightID = ?");
private final int eventID;
private final int fightID;
private final int teamBlue;
private final int teamRed;
private final int kampfleiter;
private final int ergebnis;
private EventFight(ResultSet rs) throws SQLException{
this.eventID = rs.getInt("EventID");
@ -43,23 +45,19 @@ public class EventFight {
}
public static EventFight get(int fightID){
ResultSet rs = SQL.select("SELECT * FROM EventFight WHERE FightID = " + fightID);
try{
return get.select(rs -> {
rs.next();
return new EventFight(rs);
}catch (SQLException e){
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight", e);
}
return null;
}, fightID);
}
public void setErgebnis(int winner){
SQL.update("UPDATE EventFight SET Ergebnis = ? WHERE FightID = ?", winner, fightID);
setResult.update(winner, fightID);
}
public void setFight(int fight){
//Fight.FightID, not EventFight.FightID
SQL.update("UPDATE EventFight SET Fight = ? WHERE FightID = ?", fight, fightID);
setFight.update(fight, fightID);
}
public int getTeamBlue() {

Datei anzeigen

@ -21,44 +21,48 @@ package de.steamwar.sql;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.function.Consumer;
public class Fight {
private Fight(){}
private static final SQL.Statement create = new SQL.Statement("INSERT INTO Fight (GameMode, Server, Arena, StartTime, Duration, BlueLeader, RedLeader, BlueSchem, RedSchem, Win, WinCondition) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
private static final SQL.Statement lastId = new SQL.Statement("SELECT LAST_INSERT_ID() AS FightID");
private static final SQL.Statement getReplay = new SQL.Statement("SELECT Replay FROM Fight WHERE FightID = ?");
private static final SQL.Statement setReplay = new SQL.Statement("UPDATE Fight SET Replay = ? WHERE FightID = ?");
public static int create(String gamemode, String arena, Timestamp starttime, int duration, int blueleader, int redleader, Integer blueschem, Integer redschem, int win, String wincondition){
return create(gamemode, arena, null, starttime, duration, blueleader, redleader, blueschem, redschem, win, wincondition);
}
public static int create(String gamemode, String server, String arena, Timestamp starttime, int duration, int blueleader, int redleader, Integer blueschem, Integer redschem, int win, String wincondition){
SQL.update("INSERT INTO Fight (GameMode, Server, Arena, StartTime, Duration, BlueLeader, RedLeader, BlueSchem, RedSchem, Win, WinCondition) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
gamemode, server, arena, starttime, duration, blueleader, redleader, blueschem, redschem, win, wincondition);
ResultSet rs = SQL.select("SELECT LAST_INSERT_ID() AS FightID");
try{
if(!rs.next())
throw new SecurityException("No last insert id");
create.update(gamemode, server, arena, starttime, duration, blueleader, redleader, blueschem, redschem, win, wincondition);
return lastId.select(rs -> {
rs.next();
return rs.getInt("FightID");
} catch (SQLException e) {
throw new SecurityException(e);
}
});
}
@Deprecated
public static InputStream getReplay(int fightID) {
ResultSet rs = SQL.select("SELECT Replay FROM Fight WHERE FightID = ?", fightID);
try {
return getReplay.select(rs -> {
rs.next();
Blob replay = rs.getBlob("Replay");
if(replay == null)
throw new SecurityException("Replay null");
return replay.getBinaryStream();
} catch (SQLException e) {
throw new SecurityException(e);
}
}, fightID);
}
public static void getReplay(int fightID, Consumer<InputStream> reader) {
getReplay.select(rs -> {
rs.next();
reader.accept(rs.getBinaryStream("Replay"));
return null;
}, fightID);
}
@Deprecated
public static void setReplay(int fightID, byte[] data) {
Blob blob = SQL.blob();
try {
@ -66,6 +70,10 @@ public class Fight {
} catch (SQLException e) {
throw new SecurityException(e);
}
SQL.update("UPDATE Fight SET Replay = ? WHERE FightID = ?", blob, fightID);
setReplay.update(blob, fightID);
}
public static void setReplay(int fightID, InputStream data) {
setReplay.update(data, fightID);
}
}

Datei anzeigen

@ -22,14 +22,9 @@ package de.steamwar.sql;
public class FightPlayer {
private FightPlayer(){}
public static void create(int fightID, int userID, boolean blue, String kit, int kills, boolean isOut){
SQL.update("INSERT INTO FightPlayer (FightID, UserID, Team, Kit, Kills, IsOut) VALUES (?, ?, ?, ?, ?, ?)",
fightID, userID, blue ? 1 : 2, kit, kills, isOut);
}
private static final SQL.Statement create = new SQL.Statement("INSERT INTO FightPlayer (FightID, UserID, Team, Kit, Kills, IsOut) VALUES (?, ?, ?, ?, ?, ?)");
@Deprecated
public static void create(int fightID, int userID, String kit, int kills, boolean isOut){
SQL.update("INSERT INTO FightPlayer (FightID, UserID, Kit, Kills, IsOut) VALUES (?, ?, ?, ?, ?)",
fightID, userID, kit, kills, isOut);
public static void create(int fightID, int userID, boolean blue, String kit, int kills, boolean isOut){
create.update(fightID, userID, blue ? 1 : 2, kit, kills, isOut);
}
}

Datei anzeigen

@ -31,6 +31,12 @@ import java.util.Objects;
public class PersonalKit {
private static final SQL.Statement getKits = new SQL.Statement("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ?");
private static final SQL.Statement getKit = new SQL.Statement("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?");
private static final SQL.Statement getKitInUse = new SQL.Statement("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND InUse = 1");
private static final SQL.Statement delete = new SQL.Statement("DELETE FROM `PersonalKit` WHERE UserID = ? AND GameMode = ? AND Name = ?");
private static final SQL.Statement update = new SQL.Statement("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor, InUse) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(Name), InUse = VALUES(InUse)");
private final int userID;
private String name;
private final String gamemode;
@ -48,26 +54,20 @@ public class PersonalKit {
}
public static List<PersonalKit> get(int userID, String gamemode){
ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ?", userID, gamemode);
try {
return getKits.select(rs -> {
List<PersonalKit> list = new ArrayList<>();
while (rs.next())
list.add(new PersonalKit(rs));
return list;
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
}, userID, gamemode);
}
public static PersonalKit get(int userID, String gamemode, String name) {
ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
try {
if(!rs.next())
return null;
return getKit.select(rs -> {
if(rs.next())
return new PersonalKit(rs);
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
return null;
}, userID, gamemode, name);
}
public static PersonalKit create(int userID, String gamemode, String name, ItemStack[] inventory, ItemStack[] armor){
@ -80,24 +80,17 @@ public class PersonalKit {
}
public static PersonalKit getKitInUse(int userID, String gamemode) {
ResultSet rs = SQL.select("SELECT * FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND InUse = ?", userID, gamemode, true);
try {
List<PersonalKit> list = new ArrayList<>();
return getKitInUse.select(rs -> {
if(!rs.next())
return null;
PersonalKit kit = new PersonalKit(rs);
while (rs.next())
list.add(new PersonalKit(rs));
if(list.size() > 1) {
list.forEach(kit -> {
if(list.indexOf(kit) >= 1) kit.setUse(false);
});
list.removeIf(kit -> !kit.isInUse());
}
if(list.isEmpty()) return null;
return list.get(0);
} catch (SQLException e) {
throw new SecurityException("Failed loading personal kit", e);
}
new PersonalKit(rs).setUse(false); //TODO: Violation of integrity, should not be necessary?
return kit;
}, userID, gamemode);
}
@Deprecated
public static boolean nameInUse(int userID, String gamemode, String name) {
ResultSet set = SQL.select("SELECT COUNT(*) AS Count FROM PersonalKit WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
try {
@ -165,7 +158,7 @@ public class PersonalKit {
}
public void delete() {
SQL.update("DELETE FROM `PersonalKit` WHERE UserID = ? AND GameMode = ? AND Name = ?", userID, gamemode, name);
delete.update(userID, gamemode, name);
}
private static String saveInvConfig(String name, ItemStack[] inv) {
@ -176,7 +169,6 @@ public class PersonalKit {
}
private void updateDB() {
SQL.update("INSERT INTO PersonalKit (UserID, GameMode, Name, Inventory, Armor, InUse) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE Inventory = VALUES(Inventory), Armor = VALUES(Armor), Name = VALUES(Name), InUse = VALUES(InUse)",
userID, gamemode, name, inventory, armor, inUse);
update.update(userID, gamemode, name, inventory, armor, inUse);
}
}

Datei anzeigen

@ -53,7 +53,7 @@ public class SQL {
private static void connect() {
try {
con = DriverManager.getConnection(url + "?autoreconnect=true", user, password);
con = DriverManager.getConnection(url + "?autoReconnect=true&useServerPrepStmts=true", user, password);
} catch (SQLException e) {
throw new SecurityException("Could not start SQL connection", e);
}
@ -71,14 +71,14 @@ public class SQL {
try {
con.close();
} catch (SQLException e) {
Core.getInstance().getLogger().log(Level.WARNING, "Could not close SQL-Connection", e);
Core.getInstance().getLogger().log(Level.INFO, "Could not close SQL connection", e);
}
}
private static void reset(SQLException e) {
Core.getInstance().getLogger().log(Level.WARNING, "SQL Exception thrown", e);
private static void reset() {
close();
connect();
try {
for (Statement statement : Statement.statements) {
statement.init();
@ -88,16 +88,20 @@ public class SQL {
}
}
public static boolean connectionStable() {
try {
return !con.isClosed();
} catch (SQLException e) {
return false;
}
}
static void update(String qry, Object... objects) {
try {
prepare(qry, objects).executeUpdate();
} catch (SQLException e) {
reset(e);
try {
prepare(qry, objects).executeUpdate();
} catch (SQLException ex) {
throw new SecurityException("Could not perform update", ex);
}
reset();
throw new SecurityException("Could not execute SQL statement", e);
}
}
@ -105,12 +109,8 @@ public class SQL {
try {
return prepare(qry, objects).executeQuery();
} catch (SQLException e) {
reset(e);
try {
return prepare(qry, objects).executeQuery();
} catch (SQLException ex) {
throw new SecurityException("Could not perform select", ex);
}
reset();
throw new SecurityException("Could not execute SQL statement", e);
}
}
@ -118,12 +118,8 @@ public class SQL {
try {
return con.createBlob();
} catch (SQLException e) {
reset(e);
try {
return con.createBlob();
} catch (SQLException ex) {
throw new SecurityException("Could not create blob", ex);
}
reset();
throw new SecurityException("Could not execute SQL statement", e);
}
}
@ -147,7 +143,7 @@ public class SQL {
try {
init();
} catch (SQLException e) {
reset(e);
throw new SecurityException("Could not init statement", e);
}
}
@ -173,13 +169,8 @@ public class SQL {
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);
}
reset();
throw new SecurityException("Could not execute SQL statement", e);
}
}

Datei anzeigen

@ -25,6 +25,8 @@ import org.bukkit.entity.Player;
public class SWException {
private SWException(){}
private static final SQL.Statement insert = new SQL.Statement("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)");
public static void log(String message, String stacktrace){
message += "\n";
for(Player player : Bukkit.getOnlinePlayers())
@ -36,6 +38,6 @@ public class SWException {
else
server = Bukkit.getWorlds().get(0).getName();
SQL.update("INSERT INTO Exception (server, message, stacktrace) VALUES (?, ?, ?)", server, message, stacktrace);
insert.update(server, message, stacktrace);
}
}

Datei anzeigen

@ -28,6 +28,10 @@ import java.util.*;
public class SteamwarUser {
private static final SQL.Statement getId = new SQL.Statement("SELECT * FROM UserData WHERE id = ?");
private static final SQL.Statement getUUID = new SQL.Statement("SELECT * FROM UserData WHERE UUID = ?");
private static final SQL.Statement getName = new SQL.Statement("SELECT * FROM UserData WHERE lower(UserName) = ?");
private static final Map<UUID, SteamwarUser> byUUID = new HashMap<>();
private static final Map<String, SteamwarUser> byName = new HashMap<>();
private static final Map<Integer, SteamwarUser> byId = new HashMap<>();
@ -88,35 +92,34 @@ public class SteamwarUser {
return bedrock;
}
private static SteamwarUser fromDB(String statement, Object identifier){
ResultSet rs = SQL.select(statement, identifier);
try {
if(rs.next())
return new SteamwarUser(rs);
} catch (SQLException e) {
throw new SecurityException("SQL Statement failed to get User", e);
}
return null;
}
public static SteamwarUser get(String userName){
SteamwarUser user = byName.get(userName.toLowerCase());
if(user == null)
user = fromDB("SELECT * FROM UserData WHERE lower(UserName) = ?", userName.toLowerCase());
user = getName.select(rs -> {
if(rs.next())
return new SteamwarUser(rs);
return null;
}, userName.toLowerCase());
return user;
}
public static SteamwarUser get(UUID uuid){
SteamwarUser user = byUUID.get(uuid);
if(user == null)
user = fromDB("SELECT * FROM UserData WHERE UUID = ?", uuid.toString());
user = getUUID.select(rs -> {
rs.next();
return new SteamwarUser(rs);
}, uuid.toString());
return user;
}
public static SteamwarUser get(int id) {
SteamwarUser user = byId.get(id);
if(user == null)
user = fromDB("SELECT * FROM UserData WHERE id = ?", id);
user = getId.select(rs -> {
rs.next();
return new SteamwarUser(rs);
}, id);
return user;
}
}

Datei anzeigen

@ -21,10 +21,14 @@ package de.steamwar.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
public class Team {
private static final SQL.Statement get = new SQL.Statement("SELECT * FROM Team WHERE TeamID = ?");
private static final SQL.Statement getMembers = new SQL.Statement("SELECT id FROM UserData WHERE Team = ?");
private final int teamId;
private final String teamKuerzel;
private final String teamName;
@ -46,14 +50,10 @@ public class Team {
public static Team get(int id){
if(id == 0)
return pub;
ResultSet rs = SQL.select("SELECT * FROM Team WHERE TeamID = ?", id);
try {
if(!rs.next())
return null;
return get.select(rs -> {
rs.next();
return new Team(rs);
} catch (SQLException e) {
throw new SecurityException("Could not load team", e);
}
}, id);
}
public int getTeamId() {
@ -73,14 +73,11 @@ public class Team {
}
public List<Integer> getMembers(){
try{
ResultSet memberlist = SQL.select("SELECT id FROM UserData WHERE Team = ?", teamId);
List<Integer> members = new LinkedList<>();
while(memberlist.next())
members.add(memberlist.getInt("id"));
return getMembers.select(rs -> {
List<Integer> members = new ArrayList<>();
while(rs.next())
members.add(rs.getInt("id"));
return members;
}catch(SQLException e){
throw new SecurityException("Could not load Teammembers", e);
}
}, teamId);
}
}

Datei anzeigen

@ -19,30 +19,25 @@
package de.steamwar.sql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
public class UserConfig {
private UserConfig() {}
private UserConfig() {
}
private static final SQL.Statement get = new SQL.Statement("SELECT Value FROM UserConfig WHERE User = ? AND Config = ?");
private static final SQL.Statement set = new SQL.Statement("INSERT INTO UserConfig (User, Config, Value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Value = VALUES(Value)");
private static final SQL.Statement delete = new SQL.Statement("DELETE FROM UserConfig WHERE User = ? AND Config = ?");
public static String getConfig(UUID player, String config) {
return getConfig(SteamwarUser.get(player).getId(), config);
}
public static String getConfig(int player, String config) {
ResultSet configResult = SQL.select("SELECT * FROM UserConfig WHERE User = ? AND Config = ?", player, config);
try {
if (!configResult.next()) {
return get.select(rs -> {
if(rs.next())
return rs.getString("Value");
return null;
}
return configResult.getString("Value");
} catch (SQLException e) {
throw new SecurityException(e.getMessage(), e);
}
}, player, config);
}
public static void updatePlayerConfig(UUID uuid, String config, String value) {
@ -54,7 +49,7 @@ public class UserConfig {
removePlayerConfig(id, config);
return;
}
SQL.update("INSERT INTO UserConfig (User, Config, Value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE Value = VALUES(Value)", id, config, value);
set.update(id, config, value);
}
public static void removePlayerConfig(UUID uuid, String config) {
@ -62,6 +57,6 @@ public class UserConfig {
}
public static void removePlayerConfig(int id, String config) {
SQL.update("DELETE FROM UserConfig WHERE User = ? AND Config = ?", id, config);
delete.update(id, config);
}
}

Datei anzeigen

@ -123,7 +123,7 @@ if (steamwarProperties.containsKey("hostname")) {
doLast {
await(shell("scp ${libs}/${jarName} ${hostname}:${uploadPath}/${server}/plugins"))
if (!answer("Start ${server} server?")) {
if (steamwarProperties.getOrDefault("directStart", "false") == "false" && !answer("Start ${server} server?")) {
return
}
serverStart(server, serverStartFlags, hostname)