diff --git a/pom.xml b/pom.xml
index ce9d7cb..5925e60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,5 +61,10 @@
javadoc
provided
+
+ commons-io
+ commons-io
+ 2.6
+
\ No newline at end of file
diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java
index cbbd0b5..0ddcc56 100644
--- a/src/de/steamwar/bungeecore/BungeeCore.java
+++ b/src/de/steamwar/bungeecore/BungeeCore.java
@@ -2,7 +2,11 @@ package de.steamwar.bungeecore;
import de.steamwar.bungeecore.arenasystem.ArenaMode;
import de.steamwar.bungeecore.arenasystem.ArenaSystem;
+import de.steamwar.bungeecore.bausystem.BauSystem;
import de.steamwar.bungeecore.commands.*;
+import de.steamwar.bungeecore.sql.Bauwelt;
+import de.steamwar.bungeecore.sql.BauweltMember;
+import de.steamwar.bungeecore.sql.WarkingUser;
import de.steamwar.bungeecore.sql.sql;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.plugin.Command;
@@ -24,6 +28,8 @@ public class BungeeCore extends Plugin {
public static BungeeCore instance;
public static String ChatPrefix;
+ public static String WorldFolder;
+ public static String BauweltPrototyp;
public static final String TeamchatPrefix = "§4T§7c§r §e";
public static final DateTimeFormatter DateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy");
public static String LobbyServer;
@@ -65,6 +71,8 @@ public class BungeeCore extends Plugin {
}
ChatPrefix = config.getString("prefix");
+ WorldFolder = config.getString("worldfolder");
+ BauweltPrototyp = config.getString("bauweltprototyp");
LobbyServer = config.getString("lobbyserver");
sql.connect(
config.getString("db.url"),
@@ -116,17 +124,24 @@ public class BungeeCore extends Plugin {
LastBroadCast = 0;
}
}, 10, 10, TimeUnit.MINUTES);
+
+ getProxy().getScheduler().schedule(this, () -> {
+ WarkingUser.clearCache();
+ Bauwelt.clearCache();
+ BauweltMember.clearCache();
+ }, 1, 1, TimeUnit.HOURS);
}
@Override
public void onDisable(){
ArenaSystem.shutdown();
+ BauSystem.shutdown();
sql.close();
getProxy().getPluginManager().unregisterCommands(this);
getProxy().getPluginManager().unregisterListeners(this);
}
- public static void log(final String message, final ServerInfo server){
+ static void log(final String message, final ServerInfo server){
log("[" + server.getName() + "] " + message);
}
diff --git a/src/de/steamwar/bungeecore/PlayerListener.java b/src/de/steamwar/bungeecore/PlayerListener.java
index 61a29fe..0a54786 100644
--- a/src/de/steamwar/bungeecore/PlayerListener.java
+++ b/src/de/steamwar/bungeecore/PlayerListener.java
@@ -2,6 +2,9 @@ package de.steamwar.bungeecore;
import de.steamwar.bungeecore.arenasystem.Arena;
import de.steamwar.bungeecore.arenasystem.ArenaSystem;
+import de.steamwar.bungeecore.bausystem.BauServer;
+import de.steamwar.bungeecore.bausystem.BauSystem;
+import de.steamwar.bungeecore.commands.BauCommand;
import de.steamwar.bungeecore.sql.BannedUserIPs;
import de.steamwar.bungeecore.sql.WarkingUser;
import net.md_5.bungee.api.AbstractReconnectHandler;
@@ -28,11 +31,11 @@ public class PlayerListener implements Listener {
if(user.isBanned()) {
user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress());
event.setCancelled(true);
- if (user.BanTime.before(WarkingUser.PermaBan)) {
- event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + "§cDu bist permanent gebannt. §r§lGrund§r: §c" + user.BanReason));
+ if (user.getBanTime().before(WarkingUser.PermaBan)) {
+ event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + "§cDu bist permanent gebannt. §r§lGrund§r: §c" + user.getBanReason()));
} else {
event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + " Du bist bis zum " +
- user.BanTime.toLocalDateTime().format(BungeeCore.DateFormat) + " gebannt. §r§lGrund§r: §c" + user.BanReason));
+ user.getBanTime().toLocalDateTime().format(BungeeCore.DateFormat) + " gebannt. §r§lGrund§r: §c" + user.getBanReason()));
}
return;
}
@@ -42,7 +45,7 @@ public class PlayerListener implements Listener {
StringBuilder potentialBan = new StringBuilder();
potentialBan.append(BungeeCore.ChatPrefix);
potentialBan.append("§cMögliche Bannumgehung durch §r");
- potentialBan.append(user.UserName);
+ potentialBan.append(user.getUserName());
potentialBan.append("§c:");
for(BannedUserIPs banned : ips){
@@ -50,12 +53,12 @@ public class PlayerListener implements Listener {
potentialBan.append(" §e");
potentialBan.append(banned.getTimestamp().toLocalDateTime().format(BungeeCore.DateFormat));
potentialBan.append(" §c");
- potentialBan.append(bannedUser.UserName);
+ potentialBan.append(bannedUser.getUserName());
}
TextComponent msg = new TextComponent(potentialBan.toString());
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cBanne Spieler wegen Bannumgehung").create()));
- msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ban " + user.UserName + " perma Bannumgehung"));
+ msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ban " + user.getUserName() + " perma Bannumgehung"));
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
if ((target.hasPermission("bungeecore.teamchat"))
&& (target.getChatMode() == ProxiedPlayer.ChatMode.COMMANDS_ONLY
@@ -71,7 +74,7 @@ public class PlayerListener implements Listener {
ProxiedPlayer player = event.getPlayer();
WarkingUser user = new WarkingUser(player);
player.removeGroups("Admin", "team");
- switch(user.UserGroup){
+ switch(user.getUserGroup()){
case "Admin":
player.addGroups("admin", "team");
player.setPermission("bungeecore.group.admin", true);
@@ -152,6 +155,12 @@ public class PlayerListener implements Listener {
Arena a = ArenaSystem.getArena(p);
if(a != null && !p.getServer().getInfo().equals(a.server)){
a.removePlayer(p);
+ return;
+ }
+
+ BauServer bau = BauSystem.getBau(p);
+ if(bau != null && !p.getServer().getInfo().equals(bau.getServer())){
+ bau.removePlayer(p);
}
}
@@ -166,11 +175,7 @@ public class PlayerListener implements Listener {
sender.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Befehl.");
}
}else if(command[0].equalsIgnoreCase("/bau") && e.getSender() instanceof ProxiedPlayer){
- ProxiedPlayer sender = (ProxiedPlayer) e.getSender();
- if(!sender.getServer().getInfo().getName().equals("Bau")){
- e.setCancelled(true);
- sender.connect(ProxyServer.getInstance().getServerInfo("Bau"));
- }
+ BauCommand.onBau(e, command);
}
}else{
if(e.getSender() instanceof ProxiedPlayer){
@@ -191,16 +196,11 @@ public class PlayerListener implements Listener {
if(sender.hasPermission("bungeecore.group.admin")){
chatsuffix = "§7» §6";
message = ChatColor.translateAlternateColorCodes('&', message);
- }else if(sender.hasPermission("bungeecore.group.developer")){
- chatsuffix = "§7» §r";
- message = ChatColor.translateAlternateColorCodes('&', message);
- }else if(sender.hasPermission("bungeecore.group.moderator")){
- chatsuffix = "§7» §r";
- message = ChatColor.translateAlternateColorCodes('&', message);
- }else if(sender.hasPermission("bungeecore.group.supporter")){
- chatsuffix = "§7» §r";
- message = ChatColor.translateAlternateColorCodes('&', message);
- }else if(sender.hasPermission("bungeecore.group.builder")){
+ }else if(
+ sender.hasPermission("bungeecore.group.developer") ||
+ sender.hasPermission("bungeecore.group.moderator") ||
+ sender.hasPermission("bungeecore.group.supporter") ||
+ sender.hasPermission("bungeecore.group.builder")){
chatsuffix = "§7» §r";
message = ChatColor.translateAlternateColorCodes('&', message);
}else if(sender.hasPermission("bungeecore.group.youtuber") ||
@@ -209,8 +209,8 @@ public class PlayerListener implements Listener {
}
String msg = name + chatsuffix + message;
- for(ProxiedPlayer target : sender.getServer().getInfo().getPlayers()){
- if(target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
+ for(ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
+ if(target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN && !ArenaSystem.inArena(target)){
target.sendMessage(msg);
}
}
diff --git a/src/de/steamwar/bungeecore/arenasystem/Arena.java b/src/de/steamwar/bungeecore/arenasystem/Arena.java
index 57e6234..eddf6ef 100644
--- a/src/de/steamwar/bungeecore/arenasystem/Arena.java
+++ b/src/de/steamwar/bungeecore/arenasystem/Arena.java
@@ -42,7 +42,7 @@ public class Arena implements Runnable{
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, this);
InetSocketAddress address = new InetSocketAddress("127.0.0.1", port);
server = ProxyServer.getInstance().constructServerInfo(
- serverName, address, "WarKing.de - Arena", false);
+ serverName, address, "SteamWar.de - Arena", false);
ProxyServer.getInstance().getServers().put(serverName, server);
writer = new PrintWriter( p.getOutputStream(), true);
}catch(IOException e) {
@@ -84,24 +84,26 @@ public class Arena implements Runnable{
player.connect(ProxyServer.getInstance().getServerInfo(BungeeCore.LobbyServer));
}
writer.println("stop");
- try{
- p.waitFor();
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
-
- ProxyServer.getInstance().getServers().remove(serverName);
- ArenaSystem.arenen.remove(this);
+ ProxyServer.getInstance().getServers().remove(serverName);
+ ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, ()->{
+ try {
+ p.waitFor();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ ArenaSystem.arenen.remove(this);
+ });
+ }else
+ ArenaSystem.arenen.remove(this);
}
private void fatalError(){
for(ProxiedPlayer cached : cachedPlayers){
- cached.sendMessage(BungeeCore.ChatPrefix + "§7Unerwarteter Fehler beim Arenenstart");
+ cached.sendMessage(BungeeCore.ChatPrefix + "§cUnerwarteter Fehler beim Arenenstart.");
}
for(ProxiedPlayer player : server.getPlayers()){
player.connect(ProxyServer.getInstance().getServerInfo(BungeeCore.LobbyServer));
- player.sendMessage(BungeeCore.ChatPrefix + "§7Unerwarteter Fehler in der Arena");
+ player.sendMessage(BungeeCore.ChatPrefix + "§cUnerwarteter Fehler in der Arena.");
}
stop();
}
diff --git a/src/de/steamwar/bungeecore/arenasystem/ArenaSystem.java b/src/de/steamwar/bungeecore/arenasystem/ArenaSystem.java
index e8fad38..cd83c9d 100644
--- a/src/de/steamwar/bungeecore/arenasystem/ArenaSystem.java
+++ b/src/de/steamwar/bungeecore/arenasystem/ArenaSystem.java
@@ -3,11 +3,13 @@ package de.steamwar.bungeecore.arenasystem;
import net.md_5.bungee.api.connection.ProxiedPlayer;
-import java.util.Vector;
+import java.util.ArrayList;
public class ArenaSystem {
- protected static Vector arenen = new Vector<>();
+ private ArenaSystem(){}
+
+ static ArrayList arenen = new ArrayList<>();
private static int freeId(){
int id = 0;
@@ -33,7 +35,7 @@ public class ArenaSystem {
public static void shutdown(){
while(!arenen.isEmpty())
- arenen.firstElement().stop();
+ arenen.get(0).stop();
}
public static boolean inArena(ProxiedPlayer p){
diff --git a/src/de/steamwar/bungeecore/bausystem/BauServer.java b/src/de/steamwar/bungeecore/bausystem/BauServer.java
new file mode 100644
index 0000000..bac05fe
--- /dev/null
+++ b/src/de/steamwar/bungeecore/bausystem/BauServer.java
@@ -0,0 +1,174 @@
+package de.steamwar.bungeecore.bausystem;
+
+import de.steamwar.bungeecore.BungeeCore;
+import de.steamwar.bungeecore.sql.WarkingUser;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.ClickEvent;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.chat.HoverEvent;
+import net.md_5.bungee.api.chat.TextComponent;
+import net.md_5.bungee.api.config.ServerInfo;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+public class BauServer implements Runnable{
+
+ private final UUID owner;
+ private final int id;
+ private final String name;
+
+ private Process p;
+ private PrintWriter writer;
+ private ServerInfo server;
+ private boolean started = false;
+ private boolean stopped = false;
+
+ private final List cachedPlayers = new ArrayList<>();
+ private final List players = new ArrayList<>();
+
+ BauServer(int id, UUID owner){
+ this.id = id;
+ this.owner = owner;
+ this.name = new WarkingUser(owner).getUserName() + "s Bau";
+ int port = 4000 + id;
+ ProcessBuilder pb = new ProcessBuilder(
+ "/home/minecraft/mc",
+ "-b", owner.toString(), Integer.toString(port));
+ try{
+ p = pb.start();
+ ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, this);
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", port);
+ server = ProxyServer.getInstance().constructServerInfo(
+ name, address, "SteamWar.de - BauServer", false);
+ ProxyServer.getInstance().getServers().put(name, server);
+ writer = new PrintWriter( p.getOutputStream(), true);
+ }catch(IOException e) {
+ e.printStackTrace();
+ stop();
+ }
+ }
+
+ public void stop(){
+ if(p != null && p.isAlive()) {
+ for (ProxiedPlayer player : server.getPlayers()) {
+ player.connect(ProxyServer.getInstance().getServerInfo(BungeeCore.LobbyServer));
+ }
+ stopped = true;
+ writer.println("stop");
+ ProxyServer.getInstance().getServers().remove(name);
+ ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, ()->{
+ try {
+ p.waitFor();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ BauSystem.server.remove(owner);
+ });
+ }else
+ BauSystem.server.remove(owner);
+ }
+
+ void sendPlayer(ProxiedPlayer p){
+ if(stopped) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§7Die Bauwelt derzeit entladen, bitte versuche es später erneut.");
+ }else if(!started){
+ p.sendMessage(BungeeCore.ChatPrefix + "§7Die Bauwelt wird geladen, einen Moment bitte...");
+ cachedPlayers.add(p);
+ }else{
+ p.connect(server);
+ players.add(p);
+ }
+ }
+
+ boolean onBau(ProxiedPlayer p){
+ for(ProxiedPlayer ap : cachedPlayers)
+ if(ap.equals(p))
+ return true;
+ for(ProxiedPlayer ap : players)
+ if(ap.equals(p))
+ return true;
+ return false;
+ }
+
+ public void removePlayer(ProxiedPlayer p){
+ cachedPlayers.remove(p);
+ players.remove(p);
+ }
+
+ private void fatalError(){
+ for(ProxiedPlayer cached : cachedPlayers){
+ cached.sendMessage(BungeeCore.ChatPrefix + "§cUnerwarteter Fehler beim Laden der Bauwelt.");
+ }
+ for(ProxiedPlayer player : server.getPlayers()){
+ player.connect(ProxyServer.getInstance().getServerInfo(BungeeCore.LobbyServer));
+ player.sendMessage(BungeeCore.ChatPrefix + "§cUnerwarteter Fehler in der Bauwelt.");
+ }
+ stop();
+ }
+
+ @Override
+ public void run() {
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line = "";
+
+ while (!started && (line = reader.readLine()) != null) {
+ started = line.contains(" INFO]: Done (");
+ }
+
+ if(line == null){
+ BungeeCore.log("Bau "+name+" stopped to early!");
+ fatalError();
+ return;
+ }
+
+ Thread.sleep(1000);
+
+ for(ProxiedPlayer player : cachedPlayers){
+ sendPlayer(player);
+ }
+ cachedPlayers.clear();
+
+ p.waitFor();
+ }catch(IOException e){
+ e.printStackTrace();
+ fatalError();
+ }catch(InterruptedException e){
+ BungeeCore.log("Bau "+name+" was interrupted!");
+ fatalError();
+ }
+ stop();
+ }
+
+ public UUID getOwner() {
+ return owner;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public ServerInfo getServer() {
+ return server;
+ }
+
+ public static void sendDeniedMessage(ProxiedPlayer p, UUID owner){
+ ProxiedPlayer o = ProxyServer.getInstance().getPlayer(owner);
+ if(o == null)
+ return;
+
+ o.sendMessage(BungeeCore.ChatPrefix + "§e" + p.getName() + " §7möchte auf deine Bauwelt.");
+ TextComponent tc = new TextComponent("§7Klicke §ehier§7, wenn du das erlauben möchtest.");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§e/bau addmember " + p.getName()).create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau addmember " + p.getName()));
+ o.sendMessage(tc);
+ }
+}
diff --git a/src/de/steamwar/bungeecore/bausystem/BauSystem.java b/src/de/steamwar/bungeecore/bausystem/BauSystem.java
new file mode 100644
index 0000000..f3454db
--- /dev/null
+++ b/src/de/steamwar/bungeecore/bausystem/BauSystem.java
@@ -0,0 +1,72 @@
+package de.steamwar.bungeecore.bausystem;
+
+import de.steamwar.bungeecore.BungeeCore;
+import de.steamwar.bungeecore.sql.Bauwelt;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import org.apache.commons.io.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.UUID;
+
+public class BauSystem {
+
+ private BauSystem(){}
+
+ static HashMap server = new HashMap<>();
+
+ private static int freeId(){
+ int id = 0;
+ boolean isFree = false;
+ while(!isFree){
+ id++;
+ isFree = true;
+ for(BauServer bau : server.values()){
+ if(bau.getId() == id){
+ isFree = false;
+ break;
+ }
+ }
+ }
+ return id;
+ }
+
+ public static void sendToServer(ProxiedPlayer p, UUID owner){
+ if(server.containsKey(owner)){
+ server.get(owner).sendPlayer(p);
+ }else{
+ File w = new File(BungeeCore.WorldFolder + owner);
+ if (!w.exists() || !w.isDirectory()){
+ try {
+ FileUtils.copyDirectory(new File(BungeeCore.BauweltPrototyp), w);
+ } catch (IOException e) {
+ e.printStackTrace();
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDas Erstellen der Welt ist fehlgeschlagen.");
+ return;
+ }
+ if(Bauwelt.getBauwelt(owner) == null)
+ new Bauwelt(owner, false, false);
+ }
+ BauServer bau = new BauServer(freeId(), owner);
+ server.put(owner, bau);
+ bau.sendPlayer(p);
+ }
+ }
+
+ public static BauServer getBau(ProxiedPlayer p){
+ for(BauServer bau : server.values()){
+ if(bau.onBau(p))
+ return bau;
+ }
+ return null;
+ }
+
+ public static void shutdown(){
+ Iterator it = server.values().iterator();
+ while(it.hasNext()){
+ it.next().stop();
+ }
+ }
+}
diff --git a/src/de/steamwar/bungeecore/commands/BanCommand.java b/src/de/steamwar/bungeecore/commands/BanCommand.java
index 4108906..949ab05 100644
--- a/src/de/steamwar/bungeecore/commands/BanCommand.java
+++ b/src/de/steamwar/bungeecore/commands/BanCommand.java
@@ -24,7 +24,7 @@ public class BanCommand extends Command {
}
WarkingUser target = new WarkingUser(args[0]);
- if(target.UserName == null){
+ if(target.getUserName() == null){
sender.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler existiert nicht.");
return;
}
@@ -55,8 +55,8 @@ public class BanCommand extends Command {
}
String msg = banReason.toString();
msgBuilder.append(msg);
- sender.sendMessage(BungeeCore.ChatPrefix + "Du hast " + target.UserName + " gebannt. Grund: §c" + msg);
- ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(target.UUID);
+ sender.sendMessage(BungeeCore.ChatPrefix + "Du hast " + target.getUserName() + " gebannt. Grund: §c" + msg);
+ ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(target.getUUID());
if(targetPlayer != null){
target.banPlayer(targetPlayer.getAddress().getAddress().getHostAddress(), banTime, msg);
targetPlayer.disconnect(msgBuilder.toString());
diff --git a/src/de/steamwar/bungeecore/commands/BauCommand.java b/src/de/steamwar/bungeecore/commands/BauCommand.java
new file mode 100644
index 0000000..0a2d819
--- /dev/null
+++ b/src/de/steamwar/bungeecore/commands/BauCommand.java
@@ -0,0 +1,259 @@
+package de.steamwar.bungeecore.commands;
+
+import de.steamwar.bungeecore.BungeeCore;
+import de.steamwar.bungeecore.bausystem.BauServer;
+import de.steamwar.bungeecore.bausystem.BauSystem;
+import de.steamwar.bungeecore.sql.Bauwelt;
+import de.steamwar.bungeecore.sql.BauweltMember;
+import de.steamwar.bungeecore.sql.Permission;
+import de.steamwar.bungeecore.sql.WarkingUser;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.event.ChatEvent;
+
+import java.io.File;
+import java.util.UUID;
+
+public class BauCommand {
+
+ private BauCommand(){}
+
+ public static void onBau(ChatEvent e, String[] command){
+ ProxiedPlayer p = (ProxiedPlayer) e.getSender();
+ BauServer bau = BauSystem.getBau(p);
+ boolean ownBau = bau != null && bau.getOwner().equals(p.getUniqueId());
+ e.setCancelled(true);
+
+ if(command.length == 1){
+ BauSystem.sendToServer(p, p.getUniqueId());
+ }else if(ownBau && command.length != 2 && (
+ command[1].equalsIgnoreCase("togglebuild") ||
+ command[1].equalsIgnoreCase("togglewe") ||
+ command[1].equalsIgnoreCase("toggleworld"))) {
+ e.setCancelled(false);
+ }else if(command[1].equalsIgnoreCase("addmember")){
+ if (!hasWorld(p)){
+ return;
+ }else if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau addmember ");
+ return;
+ }
+
+ UUID id = WarkingUser.get(command[2]).getUUID();
+ if (id == null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spieler");
+ return;
+ }else if (BauweltMember.getBauMember(p.getUniqueId(), id) != null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist bereits Mitglied auf deiner Welt");
+ return;
+ }
+
+ new BauweltMember(p.getUniqueId(), id, true, false, false);
+ p.sendMessage(BungeeCore.ChatPrefix + "§aDer Spieler wurde zu deiner Welt hinzugefügt");
+
+ ProxiedPlayer z = ProxyServer.getInstance().getPlayer(id);
+ if(z != null)
+ z.sendMessage(BungeeCore.ChatPrefix + "§aDu wurdest zu der Welt von §6" + p.getName() + " §ahinzugefügt");
+ }else if(command[1].equalsIgnoreCase("tp")){
+ if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau tp ");
+ return;
+ }
+
+ UUID worldOwner = WarkingUser.get(command[2]).getUUID();
+ if (worldOwner == null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spieler");
+ return;
+ }else if (!hasPermission(worldOwner, p, Permission.member)){
+ BauServer.sendDeniedMessage(p, worldOwner);
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDu darfst dich nicht auf diese Welt teleportieren");
+ return;
+ }
+ BauSystem.sendToServer(p, worldOwner);
+ }else if(command[1].equalsIgnoreCase("togglebuild")){
+ if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau togglebuild ");
+ return;
+ }
+
+ UUID id = WarkingUser.get(command[2]).getUUID();
+ if(!toggleCheck(p, id)){
+ return;
+ }
+
+ BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id);
+ toggleBuild(p, target);
+ }else if(command[1].equalsIgnoreCase("togglewe")){
+ if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau togglewe ");
+ return;
+ }
+
+ UUID id = WarkingUser.get(command[2]).getUUID();
+ if(!toggleCheck(p, id)){
+ return;
+ }
+
+ BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id);
+ toggleWE(p, target);
+ }else if(command[1].equalsIgnoreCase("toggleworld")) {
+ if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau toggleworld ");
+ return;
+ }
+
+ UUID id = WarkingUser.get(command[2]).getUUID();
+ if (!toggleCheck(p, id)) {
+ return;
+ }
+
+ BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id);
+ toggleTestblock(p, target);
+ }else if(command[1].equalsIgnoreCase("delmember")){
+ if (command.length == 2) {
+ p.sendMessage(BungeeCore.ChatPrefix + "/bau delmember ");
+ return;
+ }
+
+ UUID id = WarkingUser.get(command[2]).getUUID();
+ if(!toggleCheck(p, id)){
+ return;
+ }
+
+ BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id);
+ removePlayer(p, target);
+ }else if(command[1].equalsIgnoreCase("resetall") ||
+ command[1].equalsIgnoreCase("delete")){
+ p.sendMessage(BungeeCore.ChatPrefix + "§aDeine Welt wird zurückgesetzt. Einen Moment bitte...");
+ BauServer bauserver = BauSystem.getBau(p);
+ if(bauserver != null){
+ bauserver.stop();
+ }
+ File directory = new File(BungeeCore.WorldFolder + p.getUniqueId().toString());
+ del(directory);
+ }else{
+ HelpCommand.sendBauHelp(p);
+ }
+ }
+
+ public static void toggleBuild(ProxiedPlayer p, BauweltMember target){
+ target.setBuild(!target.isBuild());
+ ProxiedPlayer z = ProxyServer.getInstance().getPlayer(WarkingUser.get(target.getMemberID()).getUUID());
+ if (z != null) {
+ if (target.isBuild()) {
+ z.sendMessage(BungeeCore.ChatPrefix + "§aDu kannst nun auf der Welt von §6" + p.getName() + "§a bauen");
+ }else {
+ z.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst nun nicht mehr auf der Welt von §6" + p.getName() + "§c bauen");
+ }
+ }
+ if (target.isBuild()) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§aDer Spieler darf nun bauen");
+ } else {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler darf nun nicht mehr bauen");
+ }
+ }
+
+ public static void toggleWE(ProxiedPlayer p, BauweltMember target){
+ target.setWorldEdit(!target.isWorldEdit());
+ ProxiedPlayer z = ProxyServer.getInstance().getPlayer(WarkingUser.get(target.getMemberID()).getUUID());
+ if (z != null) {
+ if (target.isWorldEdit()) {
+ z.sendMessage(BungeeCore.ChatPrefix + "§aDu kannst nun auf der Welt von §6" + p.getName() + "§a WorldEdit verwenden");
+ }else {
+ z.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst nun nicht mehr auf der Welt von §6" + p.getName() + "§c WorldEdit verwenden");
+ }
+ }
+ if (target.isWorldEdit()) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§aDer Spieler darf nun WorldEdit verwenden");
+ } else {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler darf nun kein WorldEdit mehr verwenden");
+ }
+ }
+
+ public static void toggleTestblock(ProxiedPlayer p, BauweltMember target){
+ target.setWorld(!target.isWorld());
+ ProxiedPlayer z = ProxyServer.getInstance().getPlayer(WarkingUser.get(target.getMemberID()).getUUID());
+ if (z != null) {
+ if (target.isWorld()) {
+ z.sendMessage(BungeeCore.ChatPrefix + "§aDu kannst nun auf der Welt von §6" + p.getName() + "§a Einstellungen vornehmen");
+ }else {
+ z.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst nun nicht mehr auf der Welt von §6" + p.getName() + "§c Einstellungen vornehmen");
+ }
+ }
+ if (target.isWorld()) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§aDer Spieler darf nun Einstellungen vornehmen");
+ } else {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler darf nun nicht mehr Einstellungen vornehmen");
+ }
+ }
+
+ public static void removePlayer(ProxiedPlayer p, BauweltMember target){
+ target.remove();
+ ProxiedPlayer z = ProxyServer.getInstance().getPlayer(WarkingUser.get(target.getMemberID()).getUUID());
+ if(z != null){
+ z.sendMessage(BungeeCore.ChatPrefix + "§cDu wurdest von der Welt von §6" + p.getName() + " §centfernt.");
+ BauServer server = BauSystem.getBau(z);
+ if(server != null && server.getOwner().equals(p.getUniqueId()))
+ z.connect(ProxyServer.getInstance().getServerInfo(BungeeCore.LobbyServer));
+ }
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler wurde entfernt.");
+ }
+
+ private static boolean toggleCheck(ProxiedPlayer p, UUID id){
+ if (id == null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spieler");
+ return false;
+ }
+
+ BauweltMember target = BauweltMember.getBauMember(p.getUniqueId(), id);
+ if (target == null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler ist kein Mitglied deiner Welt!");
+ return false;
+ }
+ return true;
+ }
+
+ public static boolean hasPermission(UUID welt, ProxiedPlayer member, Permission perm){
+ if(member.getUniqueId().equals(welt))
+ return true;
+
+ BauweltMember member1 = BauweltMember.getBauMember(welt, member.getUniqueId());
+ if(member1 == null)
+ return false;
+
+ switch(perm){
+ case build:
+ return member1.isBuild();
+ case worldedit:
+ return member1.isWorldEdit();
+ case world:
+ return member1.isWorld();
+ case member:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private static void del(File dir){
+ if (dir.isDirectory()){
+ String[] entries = dir.list();
+ for (String entry : entries) {
+ File aktFile = new File(dir.getPath(), entry);
+ del(aktFile);
+ }
+ dir.delete();
+ }
+ else{
+ dir.delete();
+ }
+ }
+
+ private static boolean hasWorld(ProxiedPlayer p){
+ if (Bauwelt.getBauwelt(p.getUniqueId()).getUUID() == null) {
+ p.sendMessage(BungeeCore.ChatPrefix + "§cDu hast keine Bauwelt");
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/de/steamwar/bungeecore/commands/HelpCommand.java b/src/de/steamwar/bungeecore/commands/HelpCommand.java
index 11930b8..999202d 100644
--- a/src/de/steamwar/bungeecore/commands/HelpCommand.java
+++ b/src/de/steamwar/bungeecore/commands/HelpCommand.java
@@ -6,6 +6,7 @@ import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
public class HelpCommand extends Command {
public HelpCommand() {
@@ -14,36 +15,84 @@ public class HelpCommand extends Command {
@Override
public void execute(CommandSender sender, String[] args) {
-
if(args.length != 1){
- TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "§7Kehre von überall mit §e/l §7zur Lobby zurück!");
- tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZurück zur Lobby").create()));
+ TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "§7Kehre von überall mit §8/§el §7zur Lobby zurück!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZurück zur Lobby").create()));
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/l"));
sender.sendMessage(tc);
- tc = new TextComponent(BungeeCore.ChatPrefix + "§7Komme mit §e/bau §7auf den Bauserver!");
- tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZum Bauserver").create()));
+ tc = new TextComponent(BungeeCore.ChatPrefix + "§7Komme mit §8/§ebau §7auf den Bauserver!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZum Bauserver").create()));
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bauserver"));
sender.sendMessage(tc);
- tc = new TextComponent(BungeeCore.ChatPrefix + "§7Erhalte mit §e/bau §7Hilfe auf dem Bauserver!");
- tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cHilfe zum Bausystem").create()));
- tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau"));
+ tc = new TextComponent(BungeeCore.ChatPrefix + "§7Erhalte mit §8/§ehelp bauserver §7Hilfe zum Bauserver!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eHilfe zum Bauserver").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bauserver"));
sender.sendMessage(tc);
- tc = new TextComponent(BungeeCore.ChatPrefix + "§7Starte mit §e/fight §7einen neuen Kampf!");
- tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZum Kampfsystem").create()));
+ tc = new TextComponent(BungeeCore.ChatPrefix + "§7Starte mit §8/§efight §7einen neuen Kampf!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZum Kampfsystem").create()));
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/fight"));
sender.sendMessage(tc);
- tc = new TextComponent(BungeeCore.ChatPrefix + "§7Trete mit §e/join [Spieler] §7einem Kampf bei!");
- tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cSpieler nachjoinen").create()));
+ tc = new TextComponent(BungeeCore.ChatPrefix + "§7Trete mit §8/§ejoin §8[§eSpieler§8] §7einem Kampf bei!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eSpieler beitreten").create()));
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/join"));
sender.sendMessage(tc);
- }else{
- switch(args[0]){
-
- }
+ }else if(args[0].equalsIgnoreCase("bauserver")){
+ sendBauHelp((ProxiedPlayer) sender);
+ }else if(args[0].equalsIgnoreCase("bau")){
+ sender.sendMessage("§8/§etnt §8- §7(de)aktiviert Explosionsschaden");
+ sender.sendMessage("§8/§efire §8- §7(de)aktiviert Feuerschaden");
+ sender.sendMessage("§8/§etestblock §8- §7Erneuert den nächsten Testblock");
+ sender.sendMessage("§8/§ereset §8- §7Setzt die derzeitige Region zurück");
+ sender.sendMessage("§8/§espeed §8- §7Ändert deine Fluggeschwindigkeit");
+ sender.sendMessage("§8/§env §8- §7(de)aktiviert Nachtsicht");
+ sender.sendMessage("§8/§etrace §8- §7Gibt einen Überblick über den TNT-Tracer");
+ sender.sendMessage("§8/§ehelp bauserver §8- §7Hilfe zum Bauserver");
}
}
+
+ static void sendBauHelp(ProxiedPlayer p){
+ TextComponent tc = new TextComponent("§8/§ebau tp §8- §7Gehe auf Bauserver von Freunden!");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eZu einem anderen Bauserver").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau tp "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau addmember §8- §7Fügt einen Freund hinzu");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eFüge einen Freund hinzu").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau addmember "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau delmember §8- §7Entfernt einen Spieler");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eEntfernt einen Spieler").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delmember "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau togglebuild §8- §7Berechtigung zum Bauen, /tp, /gm");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglebuild "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau togglewe §8- §7Berechtigung für WorldEdit, /testblock");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau togglewe "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau toggleworld §8- §7/reset, /trace, /fire, /tnt");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eStellt Spielerberechtigungen ein").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau toggleworld "));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ebau delete §8- §7Setzt deine Bauwelt zurück");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eBauwelt zurücksetzen").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/bau delete"));
+ p.sendMessage(tc);
+
+ tc = new TextComponent("§8/§ehelp bau §8- §7Hilfe zu nützlichen Werkzeugen");
+ tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eNützliche Zusatzfunktionen").create()));
+ tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help bau"));
+ p.sendMessage(tc);
+ }
}
diff --git a/src/de/steamwar/bungeecore/commands/JoinmeCommand.java b/src/de/steamwar/bungeecore/commands/JoinmeCommand.java
index e699d85..fb0e9d4 100644
--- a/src/de/steamwar/bungeecore/commands/JoinmeCommand.java
+++ b/src/de/steamwar/bungeecore/commands/JoinmeCommand.java
@@ -3,6 +3,9 @@ package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.BungeeCore;
import de.steamwar.bungeecore.arenasystem.Arena;
import de.steamwar.bungeecore.arenasystem.ArenaSystem;
+import de.steamwar.bungeecore.bausystem.BauServer;
+import de.steamwar.bungeecore.bausystem.BauSystem;
+import de.steamwar.bungeecore.sql.BauweltMember;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ClickEvent;
@@ -16,6 +19,8 @@ import java.util.ArrayList;
public class JoinmeCommand extends Command {
+ private static final String DENY_MESSAGE = "§cDu kannst diesem Spieler derzeit nicht folgen.";
+
public JoinmeCommand() {
super("join", "", "joinme");
}
@@ -42,18 +47,27 @@ public class JoinmeCommand extends Command {
ServerInfo server = target.getServer().getInfo();
String ServerPerm = BungeeCore.serverPermissions.get(server.getName());
Arena arena = ArenaSystem.getArena(target);
+ BauServer bauserver = BauSystem.getBau(target);
- if(arena != null){
+ if(arena != null) {
arena.sendPlayer(player);
+ }else if(bauserver != null){
+ if(bauserver.getOwner().equals(player.getUniqueId()) ||
+ BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null){
+ BauSystem.sendToServer(player, bauserver.getOwner());
+ }else{
+ BauServer.sendDeniedMessage(player, bauserver.getOwner());
+ player.sendMessage(BungeeCore.ChatPrefix + DENY_MESSAGE);
+ }
}else if(ServerPerm != null && !player.hasPermission(ServerPerm)){
- player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen.");
+ player.sendMessage(BungeeCore.ChatPrefix + DENY_MESSAGE);
}else if(ServerPerm == null && !player.getGroups().contains("team")) {
- player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen.");
+ player.sendMessage(BungeeCore.ChatPrefix + DENY_MESSAGE);
}else{
player.connect(server);
}
} else {
- player.sendMessage(BungeeCore.ChatPrefix + "§7Mit §r/join §8[§rSpieler§8] §7kannst du einem Spieler folgen §8(z.B. in eine Arena)§7.");
+ player.sendMessage(BungeeCore.ChatPrefix + "§7Mit §8/§ejoin §8[§eSpieler§8] §7kannst du einem Spieler folgen §8(z.B. in eine Arena)§7.");
}
}
}
diff --git a/src/de/steamwar/bungeecore/sql/Bauwelt.java b/src/de/steamwar/bungeecore/sql/Bauwelt.java
new file mode 100644
index 0000000..49b15d8
--- /dev/null
+++ b/src/de/steamwar/bungeecore/sql/Bauwelt.java
@@ -0,0 +1,77 @@
+package de.steamwar.bungeecore.sql;
+
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+public class Bauwelt {
+
+ private final int UserID;
+ private boolean TNTDmg;
+ private boolean FireDmg;
+
+ private static List welten = new ArrayList<>();
+
+ private Bauwelt(int userID, boolean tntDmg, boolean fireDmg, boolean updateDB){
+ UserID = userID;
+ TNTDmg = tntDmg;
+ FireDmg = fireDmg;
+ if(updateDB)
+ updateDB();
+ welten.add(this);
+ }
+
+ public Bauwelt(int userID, boolean tntDmg, boolean fireDmg){
+ this(userID, tntDmg, fireDmg, true);
+ }
+
+ public Bauwelt(UUID userID, boolean tntDmg, boolean fireDmg){
+ this(WarkingUser.get(userID).getId(), tntDmg, fireDmg, true);
+ }
+
+ private void updateDB(){
+ sql.update("INSERT INTO Bauwelt" +
+ " (UserID, TNTDmg, FireDmg)" +
+ " VALUES" +
+ " ('" + UserID + "', '" + sql.booleanToInt(TNTDmg) + "', '" + sql.booleanToInt(FireDmg) + "')" +
+ " ON DUPLICATE KEY UPDATE" +
+ " TNTDmg = VALUES(TNTDmg), FireDmg = VALUES(FireDmg)");
+ }
+
+ public static Bauwelt getBauwelt(UUID user){
+ return getBauwelt(WarkingUser.get(user).getId());
+ }
+
+ public static Bauwelt getBauwelt(int userId){
+ for(Bauwelt welt : welten)
+ if(welt.UserID == userId)
+ return welt;
+ ResultSet bauwelt = sql.select("SELECT * FROM Bauwelt WHERE UserID = '" + userId + "'");
+ try {
+ if(bauwelt == null || !bauwelt.next()){
+ return null;
+ }
+ boolean tntDmg = bauwelt.getBoolean("TNTDmg");
+ boolean fireDmg = bauwelt.getBoolean("FireDmg");
+ return new Bauwelt(userId, tntDmg, fireDmg, false);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void clearCache(){
+ welten.clear();
+ }
+
+ public int getUserID() {
+ return UserID;
+ }
+
+ public UUID getUUID(){
+ return WarkingUser.get(UserID).getUUID();
+ }
+}
\ No newline at end of file
diff --git a/src/de/steamwar/bungeecore/sql/BauweltMember.java b/src/de/steamwar/bungeecore/sql/BauweltMember.java
new file mode 100644
index 0000000..1cc384b
--- /dev/null
+++ b/src/de/steamwar/bungeecore/sql/BauweltMember.java
@@ -0,0 +1,134 @@
+package de.steamwar.bungeecore.sql;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+public class BauweltMember{
+ private final int BauweltID;
+ private final int MemberID;
+ private boolean Build;
+ private boolean WorldEdit;
+ private boolean World;
+
+ private static final List members = new ArrayList<>();
+
+ private BauweltMember(int ownerID, int memberID, boolean build, boolean worldEdit, boolean world, boolean updateDB){
+ BauweltID = ownerID;
+ MemberID = memberID;
+ Build = build;
+ WorldEdit = worldEdit;
+ World = world;
+ if(updateDB)
+ updateDB();
+ members.add(this);
+ }
+
+ public BauweltMember(int ownerID, int memberID, boolean build, boolean worldEdit, boolean world){
+ this(ownerID, memberID, build, worldEdit, world, true);
+ }
+
+ public BauweltMember(UUID ownerID, UUID memberID, boolean build, boolean worldEdit, boolean world){
+ this(WarkingUser.get(ownerID).getId(), WarkingUser.get(memberID).getId(), build, worldEdit, world, true);
+ }
+
+ public void remove(){
+ sql.update("DELETE FROM BauweltMember WHERE BauweltID = " + BauweltID + " AND MemberID = " + MemberID);
+ members.remove(this);
+ }
+
+ private void updateDB(){
+ sql.update("INSERT INTO BauweltMember" +
+ " (BauweltID, MemberID, Build, ChangeGM, Teleport, WorldEdit, Testblock)" +
+ " VALUES" +
+ " ('" + BauweltID + "', '" + MemberID + "', '" + sql.booleanToInt(Build) + "', '" + sql.booleanToInt(WorldEdit) + "', '" + sql.booleanToInt(World) + "')" +
+ " ON DUPLICATE KEY UPDATE" +
+ " Build = VALUES(Build), WorldEdit = VALUES(WorldEdit), World = VALUES(World)");
+ }
+
+ public static BauweltMember getBauMember(UUID ownerID, UUID memberID){
+ return getBauMember(WarkingUser.get(ownerID).getId(), WarkingUser.get(memberID).getId());
+ }
+
+ public static BauweltMember getBauMember(int ownerID, int memberID){
+ for(BauweltMember member : members)
+ if(member.BauweltID == ownerID && member.MemberID == memberID)
+ return member;
+ ResultSet member = sql.select("SELECT * FROM BauweltMember WHERE BauweltID = '" + ownerID + "' AND MemberID = '" + memberID + "'");
+ try {
+ if(member == null || !member.next()){
+ return null;
+ }
+ boolean build = member.getBoolean("Build");
+ boolean worldEdit = member.getBoolean("WorldEdit");
+ boolean world = member.getBoolean("World");
+ return new BauweltMember(ownerID, memberID, build, worldEdit, world, false);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void clearCache(){
+ members.clear();
+ }
+
+ public static List getMembers(UUID bauweltID){
+ return getMembers(WarkingUser.get(bauweltID).getId());
+ }
+
+ public static List getMembers(int bauweltID){
+ try{
+ ResultSet memberlist = sql.select("SELECT * FROM BauweltMember WHERE BauweltID = '" + bauweltID + "'");
+ List members = new ArrayList<>();
+ while(memberlist.next()){
+ int memberID = memberlist.getInt("MemberID");
+ boolean build = memberlist.getBoolean("Build");
+ boolean worldEdit = memberlist.getBoolean("WorldEdit");
+ boolean world = memberlist.getBoolean("World");
+ members.add(new BauweltMember(bauweltID, memberID, build, worldEdit, world, false));
+ }
+ return members;
+ }catch(SQLException e){
+ e.printStackTrace();
+ }
+ return new ArrayList<>();
+ }
+
+ public int getBauweltID() {
+ return BauweltID;
+ }
+
+ public int getMemberID() {
+ return MemberID;
+ }
+
+ public boolean isBuild() {
+ return Build;
+ }
+
+ public void setBuild(boolean build) {
+ Build = build;
+ updateDB();
+ }
+
+ public boolean isWorldEdit() {
+ return WorldEdit;
+ }
+
+ public void setWorldEdit(boolean worldEdit) {
+ WorldEdit = worldEdit;
+ updateDB();
+ }
+
+ public boolean isWorld() {
+ return World;
+ }
+
+ public void setWorld(boolean world) {
+ World = world;
+ updateDB();
+ }
+}
\ No newline at end of file
diff --git a/src/de/steamwar/bungeecore/sql/Permission.java b/src/de/steamwar/bungeecore/sql/Permission.java
new file mode 100644
index 0000000..0064e6c
--- /dev/null
+++ b/src/de/steamwar/bungeecore/sql/Permission.java
@@ -0,0 +1,9 @@
+package de.steamwar.bungeecore.sql;
+
+public enum Permission {
+ world,
+ worldedit,
+ build,
+ member,
+ owner
+}
diff --git a/src/de/steamwar/bungeecore/sql/WarkingUser.java b/src/de/steamwar/bungeecore/sql/WarkingUser.java
index c0ca4cc..81c6486 100644
--- a/src/de/steamwar/bungeecore/sql/WarkingUser.java
+++ b/src/de/steamwar/bungeecore/sql/WarkingUser.java
@@ -7,17 +7,20 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import java.util.UUID;
public class WarkingUser {
- public int id;
- public UUID UUID;
- public String UserName;
- public String UserGroup;
- public Timestamp BanTime;
- public String BanReason;
+ private int id;
+ private UUID UUID;
+ private String UserName;
+ private String UserGroup;
+ private Timestamp BanTime;
+ private String BanReason;
+ private static final List allUsers = new ArrayList<>();
public static Timestamp PermaBan = Timestamp.from(Instant.ofEpochSecond(946684800));
public WarkingUser(int id){
@@ -42,9 +45,9 @@ public class WarkingUser {
UUID = connection.getUniqueId();
UserName = connection.getName();
UserGroup = "Member";
- sql.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES ('" + UUID.toString() + "', '" + UserName + "', '" + UserGroup + "')");
+ sql.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES ('" + getUUID().toString() + "', '" + getUserName() + "', '" + getUserGroup() + "')");
- dbplayer = sql.select("SELECT * FROM UserData WHERE UUID = '" + UUID.toString() + "'");
+ dbplayer = sql.select("SELECT * FROM UserData WHERE UUID = '" + getUUID().toString() + "'");
init(dbplayer);
}
} catch (SQLException e) {
@@ -62,9 +65,9 @@ public class WarkingUser {
UUID = player.getUniqueId();
UserName = player.getName();
UserGroup = "Member";
- sql.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES ('" + UUID.toString() + "', '" + UserName + "', '" + UserGroup + "')");
+ sql.update("INSERT INTO UserData (UUID, UserName, UserGroup) VALUES ('" + getUUID().toString() + "', '" + getUserName() + "', '" + getUserGroup() + "')");
- dbplayer = sql.select("SELECT * FROM UserData WHERE UUID = '" + UUID.toString() + "'");
+ dbplayer = sql.select("SELECT * FROM UserData WHERE UUID = '" + getUUID().toString() + "'");
init(dbplayer);
}
} catch (SQLException e) {
@@ -72,6 +75,32 @@ public class WarkingUser {
}
}
+ public static WarkingUser get(String userName){
+ userName = sql.disarmString(userName);
+ for(WarkingUser user : allUsers)
+ if(user.getUserName().equalsIgnoreCase(userName))
+ return user;
+ return new WarkingUser(userName);
+ }
+
+ public static WarkingUser get(UUID uuid){
+ for(WarkingUser user : allUsers)
+ if(user.getUUID().equals(uuid))
+ return user;
+ return new WarkingUser(uuid);
+ }
+
+ public static WarkingUser get(int id){
+ for(WarkingUser user : allUsers)
+ if(user.getId() == id)
+ return user;
+ return new WarkingUser(id);
+ }
+
+ public static void clearCache(){
+ allUsers.clear();
+ }
+
private void init(ResultSet dbplayer){
try {
if(!dbplayer.next()){
@@ -83,19 +112,20 @@ public class WarkingUser {
UserGroup = dbplayer.getString("UserGroup");
BanTime = dbplayer.getTimestamp("BanTime");
BanReason = dbplayer.getString("BanReason");
+ allUsers.add(this);
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean isBanned(){
- if(BanTime == null){
+ if(getBanTime() == null){
return false;
- }else if(BanTime.after(new Date()) || BanTime.before(PermaBan)){
+ }else if(getBanTime().after(new Date()) || getBanTime().before(PermaBan)){
return true;
}else{
- sql.update("UPDATE UserData SET BanTime = NULL, BanReason = '' WHERE UUID = '" + UUID.toString() + "'");
- sql.update("DELETE FROM BannedUserIPs WHERE UserID = '" + id + "'");
+ sql.update("UPDATE UserData SET BanTime = NULL, BanReason = '' WHERE UUID = '" + getUUID().toString() + "'");
+ sql.update("DELETE FROM BannedUserIPs WHERE UserID = '" + getId() + "'");
BanTime = null;
BanReason = "";
return false;
@@ -106,14 +136,38 @@ public class WarkingUser {
sql.update("INSERT INTO BannedUserIPs\n" +
" (UserID, Timestamp, IP)\n" +
"VALUES\n" +
- " (" + id + ", NOW(), '" + ip + "')\n" +
+ " (" + getId() + ", NOW(), '" + ip + "')\n" +
"ON DUPLICATE KEY UPDATE\n" +
" Timestamp=NOW()");
}
public void banPlayer(String ip, Timestamp time, String banReason){
- sql.update("UPDATE UserData SET BanTime = '" + time.toString() + "', BanReason = '" + banReason + "' WHERE UUID = '" + UUID.toString() + "'");
+ sql.update("UPDATE UserData SET BanTime = '" + time.toString() + "', BanReason = '" + banReason + "' WHERE UUID = '" + getUUID().toString() + "'");
if(ip != null)
updateBanIP(ip);
}
+
+ public int getId() {
+ return id;
+ }
+
+ public UUID getUUID() {
+ return UUID;
+ }
+
+ public String getUserName() {
+ return UserName;
+ }
+
+ public String getUserGroup() {
+ return UserGroup;
+ }
+
+ public Timestamp getBanTime() {
+ return BanTime;
+ }
+
+ public String getBanReason() {
+ return BanReason;
+ }
}
diff --git a/src/de/steamwar/bungeecore/sql/sql.java b/src/de/steamwar/bungeecore/sql/sql.java
index 2ca98d9..294c7df 100644
--- a/src/de/steamwar/bungeecore/sql/sql.java
+++ b/src/de/steamwar/bungeecore/sql/sql.java
@@ -73,8 +73,16 @@ public class sql {
return null;
}
- public static Connection getCon(){
- return con;
+
+ public static String disarmString(String s){
+ return s.replace("'", "");
+ }
+
+ public static Integer booleanToInt(boolean b){
+ if(b)
+ return 1;
+ else
+ return 0;
}
public static void setWebpw(WarkingUser user, String password){
@@ -85,7 +93,7 @@ public class sql {
" (?, password(?))\n" +
"ON DUPLICATE KEY UPDATE\n" +
" WebPassword = VALUES(WebPassword)");
- st.setInt(1, user.id);
+ st.setInt(1, user.getId());
st.setString(2, password);
st.executeUpdate();
} catch (SQLException e) {
@@ -98,7 +106,7 @@ public class sql {
" (?, password(?))\n" +
"ON DUPLICATE KEY UPDATE\n" +
" WebPassword = VALUES(WebPassword)");
- st.setInt(1, user.id);
+ st.setInt(1, user.getId());
st.setString(2, password);
st.executeUpdate();
} catch (SQLException ex) {