Commenting Fight out + various small changes
Dieser Commit ist enthalten in:
Ursprung
78e6cd5696
Commit
510114e53c
@ -2,6 +2,7 @@ package de.warking.bungeecore;
|
|||||||
|
|
||||||
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
||||||
import de.warking.bungeecore.commands.*;
|
import de.warking.bungeecore.commands.*;
|
||||||
|
import de.warking.bungeecore.sql.sql;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.plugin.Command;
|
import net.md_5.bungee.api.plugin.Command;
|
||||||
import net.md_5.bungee.api.plugin.Plugin;
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
@ -22,7 +23,7 @@ public class BungeeCore extends Plugin {
|
|||||||
public static BungeeCore instance;
|
public static BungeeCore instance;
|
||||||
public static String ChatPrefix;
|
public static String ChatPrefix;
|
||||||
public static final String TeamchatPrefix = "§4T§7c§r §e";
|
public static final String TeamchatPrefix = "§4T§7c§r §e";
|
||||||
public static final DateTimeFormatter DateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
|
public static final DateTimeFormatter DateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy");
|
||||||
public static String LobbyServer;
|
public static String LobbyServer;
|
||||||
public static final HashMap<String, String> serverPermissions = new HashMap<>();
|
public static final HashMap<String, String> serverPermissions = new HashMap<>();
|
||||||
public static final HashMap<String, String> commands = new HashMap<>();
|
public static final HashMap<String, String> commands = new HashMap<>();
|
||||||
@ -91,8 +92,9 @@ public class BungeeCore extends Plugin {
|
|||||||
addCmd(new AlertCommand());
|
addCmd(new AlertCommand());
|
||||||
addCmd(new KickCommand());
|
addCmd(new KickCommand());
|
||||||
addCmd(new JoinmeCommand());
|
addCmd(new JoinmeCommand());
|
||||||
addCmd(new FightCommand());
|
//addCmd(new FightCommand());
|
||||||
addCmd(new HelpCommand());
|
addCmd(new HelpCommand());
|
||||||
|
addCmd(new BanCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
package de.warking.bungeecore;
|
package de.warking.bungeecore;
|
||||||
|
|
||||||
|
import de.warking.bungeecore.arenasystem.Arena;
|
||||||
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
||||||
|
import de.warking.bungeecore.sql.BannedUserIPs;
|
||||||
|
import de.warking.bungeecore.sql.WarkingUser;
|
||||||
import net.md_5.bungee.api.AbstractReconnectHandler;
|
import net.md_5.bungee.api.AbstractReconnectHandler;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
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.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
@ -12,6 +18,7 @@ import net.md_5.bungee.api.plugin.Listener;
|
|||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class PlayerListener implements Listener {
|
public class PlayerListener implements Listener {
|
||||||
|
|
||||||
@ -19,6 +26,7 @@ public class PlayerListener implements Listener {
|
|||||||
public void onLogin(LoginEvent event) {
|
public void onLogin(LoginEvent event) {
|
||||||
WarkingUser user = new WarkingUser(event.getConnection());
|
WarkingUser user = new WarkingUser(event.getConnection());
|
||||||
if(user.isBanned()) {
|
if(user.isBanned()) {
|
||||||
|
user.updateBanIP(event.getConnection().getAddress().getAddress().getHostAddress());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
if (user.BanTime.before(WarkingUser.PermaBan)) {
|
if (user.BanTime.before(WarkingUser.PermaBan)) {
|
||||||
event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + "§cDu bist permanent gebannt. §r§lGrund§r: §c" + user.BanReason));
|
event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + "§cDu bist permanent gebannt. §r§lGrund§r: §c" + user.BanReason));
|
||||||
@ -27,6 +35,34 @@ public class PlayerListener implements Listener {
|
|||||||
user.BanTime.toLocalDateTime().format(BungeeCore.DateFormat) + " gebannt. §r§lGrund§r: §c" + user.BanReason));
|
user.BanTime.toLocalDateTime().format(BungeeCore.DateFormat) + " gebannt. §r§lGrund§r: §c" + user.BanReason));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<BannedUserIPs> ips = BannedUserIPs.get(event.getConnection().getAddress().getAddress().getHostAddress());
|
||||||
|
if(ips.size() > 0){
|
||||||
|
StringBuilder potentialBan = new StringBuilder();
|
||||||
|
potentialBan.append(BungeeCore.ChatPrefix);
|
||||||
|
potentialBan.append("§cMögliche Bannumgehung durch §r");
|
||||||
|
potentialBan.append(user.UserName);
|
||||||
|
potentialBan.append("§c:");
|
||||||
|
|
||||||
|
for(BannedUserIPs banned : ips){
|
||||||
|
WarkingUser bannedUser = new WarkingUser(banned.getUserID());
|
||||||
|
potentialBan.append(" §6");
|
||||||
|
potentialBan.append(banned.getTimestamp().toLocalDateTime().format(BungeeCore.DateFormat));
|
||||||
|
potentialBan.append(" §c");
|
||||||
|
potentialBan.append(bannedUser.UserName);
|
||||||
|
}
|
||||||
|
|
||||||
|
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"));
|
||||||
|
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
|
||||||
|
if ((target.hasPermission("bungeecore.teamchat"))
|
||||||
|
&& (target.getChatMode() == ProxiedPlayer.ChatMode.COMMANDS_ONLY
|
||||||
|
|| target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN)){
|
||||||
|
target.sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -74,7 +110,12 @@ public class PlayerListener implements Listener {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//player.getModList(); For the Future!
|
Map<String, String> modlist = player.getModList();
|
||||||
|
for(String key : modlist.keySet()){
|
||||||
|
System.out.println(key + " > " + modlist.get(key));
|
||||||
|
}
|
||||||
|
if(player.isForgeUser())
|
||||||
|
System.out.println("Forge user!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** To redirect players to the lobby in case of server closure. */
|
/** To redirect players to the lobby in case of server closure. */
|
||||||
@ -104,6 +145,15 @@ public class PlayerListener implements Listener {
|
|||||||
ev.setCancelServer(kickTo);
|
ev.setCancelServer(kickTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onServerSwitchEvent(ServerSwitchEvent e){
|
||||||
|
ProxiedPlayer p = e.getPlayer();
|
||||||
|
Arena a = ArenaSystem.getArena(p);
|
||||||
|
if(a != null && !p.getServer().getInfo().equals(a.server)){
|
||||||
|
a.removePlayer(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onChatEvent(ChatEvent e){
|
public void onChatEvent(ChatEvent e){
|
||||||
if(e.isCommand()){
|
if(e.isCommand()){
|
||||||
@ -129,9 +179,8 @@ public class PlayerListener implements Listener {
|
|||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(ArenaSystem.getPlayer(sender) != null){
|
if(ArenaSystem.inArena(sender))
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
String name = sender.getDisplayName();
|
String name = sender.getDisplayName();
|
||||||
String message = e.getMessage();
|
String message = e.getMessage();
|
||||||
|
@ -11,31 +11,32 @@ import java.io.InputStreamReader;
|
|||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Arena implements Runnable{
|
public class Arena implements Runnable{
|
||||||
|
|
||||||
public final String serverName;
|
public final String serverName;
|
||||||
public final int arenenNummer;
|
public final int arenenNummer;
|
||||||
public final String spielModus;
|
public final ArenaMode spielModus;
|
||||||
|
|
||||||
private Process p;
|
private Process p;
|
||||||
private PrintWriter writer;
|
private PrintWriter writer;
|
||||||
private ServerInfo server;
|
public ServerInfo server;
|
||||||
private boolean started = false;
|
private boolean started = false;
|
||||||
|
|
||||||
private final List<ArenaPlayer> cachedPlayers = new ArrayList<>();
|
private final List<ProxiedPlayer> cachedPlayers = new ArrayList<>();
|
||||||
private final List<ArenaPlayer> players = new ArrayList<>();
|
private final List<ProxiedPlayer> players = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
public Arena(String modus, int id){
|
public Arena(ArenaMode modus, int id){
|
||||||
spielModus = modus;
|
spielModus = modus;
|
||||||
arenenNummer = id;
|
arenenNummer = id;
|
||||||
serverName = modus + id;
|
serverName = modus.name() + id;
|
||||||
int port = 2500 + arenenNummer;
|
int port = 2500 + arenenNummer;
|
||||||
ProcessBuilder pb = new ProcessBuilder(
|
ProcessBuilder pb = new ProcessBuilder(
|
||||||
"/home/netuser/mc",
|
"/home/netuser/mc",
|
||||||
"-a", modus, serverName, Integer.toString(port));
|
"-a", modus.name(), serverName, Integer.toString(port));
|
||||||
try{
|
try{
|
||||||
p = pb.start();
|
p = pb.start();
|
||||||
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, this);
|
ProxyServer.getInstance().getScheduler().runAsync(BungeeCore.instance, this);
|
||||||
@ -50,54 +51,30 @@ public class Arena implements Runnable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendPlayer(ArenaPlayer p){
|
public void sendPlayer(ProxiedPlayer p){
|
||||||
if(!started){
|
if(!started){
|
||||||
p.player.sendMessage(BungeeCore.ChatPrefix + "Die Arena wird gestartet, einen Moment bitte...");
|
p.sendMessage(BungeeCore.ChatPrefix + "Die Arena wird gestartet, einen Moment bitte...");
|
||||||
cachedPlayers.add(p);
|
cachedPlayers.add(p);
|
||||||
}else{
|
}else{
|
||||||
if(players.contains(p)){
|
p.connect(server);
|
||||||
p.player.connect(server);
|
|
||||||
players.add(p);
|
players.add(p);
|
||||||
}
|
}
|
||||||
p.player.getServer().sendData("FightSystem:NewPlayer", p.role.name().getBytes());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPlayer(ProxiedPlayer p){
|
public void removePlayer(ProxiedPlayer p){
|
||||||
ArenaRole role;
|
Iterator<ProxiedPlayer> it = cachedPlayers.iterator();
|
||||||
switch(cachedPlayers.size() + players.size()){
|
while(it.hasNext()){
|
||||||
case 0:
|
if(it.next().equals(p)){
|
||||||
role = ArenaRole.RED_LEADER;
|
it.remove();
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
role = ArenaRole.BLUE_LEADER;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
role = ArenaRole.SPECTATOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArenaPlayer aP = new ArenaPlayer(p, role);
|
|
||||||
sendPlayer(aP);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendPlayer(ProxiedPlayer p, ProxiedPlayer initiator){
|
|
||||||
ArenaPlayer parent = getPlayer(initiator);
|
|
||||||
if(parent == null)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
switch(parent.role){
|
}
|
||||||
case RED_LEADER:
|
it = players.iterator();
|
||||||
case RED_MEMBER:
|
while(it.hasNext()){
|
||||||
sendPlayer(new ArenaPlayer(p, ArenaRole.RED_MEMBER));
|
if(it.next().equals(p)){
|
||||||
break;
|
it.remove();
|
||||||
case BLUE_MEMBER:
|
return;
|
||||||
case BLUE_LEADER:
|
}
|
||||||
sendPlayer(new ArenaPlayer(p, ArenaRole.BLUE_MEMBER));
|
|
||||||
break;
|
|
||||||
case SPECTATOR:
|
|
||||||
default:
|
|
||||||
sendPlayer(new ArenaPlayer(p, ArenaRole.SPECTATOR));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,42 +95,35 @@ public class Arena implements Runnable{
|
|||||||
ArenaSystem.arenen.remove(this);
|
ArenaSystem.arenen.remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArenaPlayer getPlayer(ProxiedPlayer p){
|
public boolean inArena(ProxiedPlayer p){
|
||||||
for(int i = 0; i < cachedPlayers.size(); i++)
|
for(ProxiedPlayer ap : cachedPlayers)
|
||||||
if(cachedPlayers.get(i).player.equals(p)){
|
if(ap.equals(p))
|
||||||
if(server.equals(p.getServer().getInfo())) {
|
return true;
|
||||||
return cachedPlayers.get(i);
|
for(ProxiedPlayer ap : players)
|
||||||
}else{
|
if(ap.equals(p))
|
||||||
cachedPlayers.remove(i);
|
return true;
|
||||||
return null;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int i = 0; i < players.size(); i++)
|
|
||||||
if(players.get(i).player.equals(p)){
|
|
||||||
if(server.equals(p.getServer().getInfo())) {
|
|
||||||
return players.get(i);
|
|
||||||
}else{
|
|
||||||
players.remove(i);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||||||
String line;
|
String line = "";
|
||||||
|
|
||||||
while (!started && (line = reader.readLine()) != null) {
|
while (!started && (line = reader.readLine()) != null) {
|
||||||
//started = line.contains(" INFO]: Done ("); Problematisch
|
//started = line.contains(" INFO]: Done ("); Problematisch
|
||||||
started = line.contains("INFO]: [AAC] AAC has been enabled.");
|
started = line.contains("INFO]: [AAC] AAC has been enabled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Thread.sleep(1000);
|
if(line == null){
|
||||||
|
System.out.println("Fatal error starting arena!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for(ArenaPlayer aP : cachedPlayers){
|
Thread.sleep(200);
|
||||||
|
|
||||||
|
for(ProxiedPlayer aP : cachedPlayers){
|
||||||
sendPlayer(aP);
|
sendPlayer(aP);
|
||||||
}
|
}
|
||||||
cachedPlayers.clear();
|
cachedPlayers.clear();
|
||||||
|
8
src/de/warking/bungeecore/arenasystem/ArenaMode.java
Normale Datei
8
src/de/warking/bungeecore/arenasystem/ArenaMode.java
Normale Datei
@ -0,0 +1,8 @@
|
|||||||
|
package de.warking.bungeecore.arenasystem;
|
||||||
|
|
||||||
|
public enum ArenaMode {
|
||||||
|
AirShip,
|
||||||
|
WarShip,
|
||||||
|
WarGear,
|
||||||
|
MiniWarGear
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
package de.warking.bungeecore.arenasystem;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
||||||
|
|
||||||
public class ArenaPlayer {
|
|
||||||
public ProxiedPlayer player;
|
|
||||||
public ArenaRole role;
|
|
||||||
|
|
||||||
public ArenaPlayer(ProxiedPlayer p, ArenaRole r){
|
|
||||||
player = p;
|
|
||||||
role = r;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
package de.warking.bungeecore.arenasystem;
|
|
||||||
|
|
||||||
public enum ArenaRole {
|
|
||||||
RED_LEADER,
|
|
||||||
RED_MEMBER,
|
|
||||||
BLUE_LEADER,
|
|
||||||
BLUE_MEMBER,
|
|
||||||
SPECTATOR
|
|
||||||
}
|
|
@ -25,7 +25,7 @@ public class ArenaSystem {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Arena startServer(String modus){
|
public static Arena startServer(ArenaMode modus){
|
||||||
Arena arena = new Arena(modus, freeId());
|
Arena arena = new Arena(modus, freeId());
|
||||||
arenen.add(arena);
|
arenen.add(arena);
|
||||||
return arena;
|
return arena;
|
||||||
@ -36,19 +36,17 @@ public class ArenaSystem {
|
|||||||
arenen.firstElement().stop();
|
arenen.firstElement().stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArenaPlayer getPlayer(ProxiedPlayer p){
|
public static boolean inArena(ProxiedPlayer p){
|
||||||
for(Arena a : arenen){
|
for(Arena a : arenen){
|
||||||
ArenaPlayer aP = a.getPlayer(p);
|
if(a.inArena(p))
|
||||||
if(aP != null)
|
return true;
|
||||||
return aP;
|
|
||||||
}
|
}
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Arena getArena(ProxiedPlayer p){
|
public static Arena getArena(ProxiedPlayer p){
|
||||||
for(Arena a : arenen){
|
for(Arena a : arenen){
|
||||||
ArenaPlayer aP = a.getPlayer(p);
|
if(a.inArena(p))
|
||||||
if(aP != null)
|
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
63
src/de/warking/bungeecore/commands/BanCommand.java
Normale Datei
63
src/de/warking/bungeecore/commands/BanCommand.java
Normale Datei
@ -0,0 +1,63 @@
|
|||||||
|
package de.warking.bungeecore.commands;
|
||||||
|
|
||||||
|
import de.warking.bungeecore.BungeeCore;
|
||||||
|
import de.warking.bungeecore.sql.WarkingUser;
|
||||||
|
import net.md_5.bungee.api.*;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class BanCommand extends Command {
|
||||||
|
|
||||||
|
public BanCommand() {
|
||||||
|
super("ban", "bungeecore.ban");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender sender, String[] args) {
|
||||||
|
if(args.length < 3){
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "/ban [Spieler] [dd.mm.yyyy oder perma] [Grund]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WarkingUser target = new WarkingUser(args[0]);
|
||||||
|
if(target.UserName == null){
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "§cDer Spieler existiert nicht.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder msgBuilder = new StringBuilder();
|
||||||
|
msgBuilder.append(BungeeCore.ChatPrefix);
|
||||||
|
Timestamp banTime;
|
||||||
|
if(args[1].equalsIgnoreCase("perma")) {
|
||||||
|
msgBuilder.append("§cDu bist permanent gebannt. §r§lGrund§r: §c");
|
||||||
|
banTime = Timestamp.from(Instant.ofEpochSecond(946674800));
|
||||||
|
}else{
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
|
||||||
|
try{
|
||||||
|
Date parsedDate = dateFormat.parse(args[1]);
|
||||||
|
banTime = new java.sql.Timestamp(parsedDate.getTime());
|
||||||
|
msgBuilder.append(" Du bist bis zum ");
|
||||||
|
msgBuilder.append(banTime.toLocalDateTime().format(BungeeCore.DateFormat));
|
||||||
|
msgBuilder.append(" gebannt. §r§lGrund§r: §c");
|
||||||
|
}catch(ParseException e){
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "§cUngültige Zeitangabe.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder banReason = new StringBuilder();
|
||||||
|
for (int i = 2; i < args.length; i++){
|
||||||
|
banReason.append(args[i]).append(" ");
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
target.banPlayer(targetPlayer.getAddress().getAddress().getHostAddress(), banTime, msg);
|
||||||
|
targetPlayer.disconnect(msgBuilder.toString());
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,6 @@ public abstract class Command extends net.md_5.bungee.api.plugin.Command impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
|
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
|
||||||
return null;
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package de.warking.bungeecore.commands;
|
|||||||
|
|
||||||
import de.warking.bungeecore.BungeeCore;
|
import de.warking.bungeecore.BungeeCore;
|
||||||
import de.warking.bungeecore.arenasystem.Arena;
|
import de.warking.bungeecore.arenasystem.Arena;
|
||||||
|
import de.warking.bungeecore.arenasystem.ArenaMode;
|
||||||
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
@ -23,7 +24,11 @@ public class FightCommand extends Command {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(CommandSender sender, String[] args) {
|
||||||
if(args.length != 1){
|
if(args.length != 1){
|
||||||
sender.sendMessage(BungeeCore.ChatPrefix + "/fight airship");
|
sender.sendMessage(BungeeCore.ChatPrefix + "§7Mit §6/fight §7kannst du einen neuen Kampf starten!");
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "/fight AirShip §8- §7Starte einen §6AirShip§8-§7Kampf§8!");
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "/fight WarShip §8- §7Starte einen §6WarShip§8-§7Kampf§8!");
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "/fight WarGear §8- §7Starte einen §6WarGear§8-§7Kampf§8!");
|
||||||
|
sender.sendMessage(BungeeCore.ChatPrefix + "/fight MiniWarGear §8- §7Starte einen §6Mini§8-§6WarGear§8-§7Kampf§8!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(sender instanceof ProxiedPlayer){
|
if(sender instanceof ProxiedPlayer){
|
||||||
@ -32,7 +37,19 @@ public class FightCommand extends Command {
|
|||||||
switch(args[0].toLowerCase()){
|
switch(args[0].toLowerCase()){
|
||||||
case "as":
|
case "as":
|
||||||
case "airship":
|
case "airship":
|
||||||
arena = ArenaSystem.startServer("Airship");
|
arena = ArenaSystem.startServer(ArenaMode.AirShip);
|
||||||
|
break;
|
||||||
|
case "ws":
|
||||||
|
case "warship":
|
||||||
|
arena = ArenaSystem.startServer(ArenaMode.WarShip);
|
||||||
|
break;
|
||||||
|
case "wg":
|
||||||
|
case "wargear":
|
||||||
|
arena = ArenaSystem.startServer(ArenaMode.WarGear);
|
||||||
|
break;
|
||||||
|
case "mwg":
|
||||||
|
case "miniwargear":
|
||||||
|
arena = ArenaSystem.startServer(ArenaMode.MiniWarGear);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sender.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spielmodus: " + args[0]);
|
sender.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spielmodus: " + args[0]);
|
||||||
@ -40,8 +57,8 @@ public class FightCommand extends Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
arena.sendPlayer(player);
|
arena.sendPlayer(player);
|
||||||
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Kämpfe jetzt " + arena.spielModus + " gegen " + player.getName() + "[Hier Klicken]!");
|
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "§7Klicke §6hier§7, um jetzt §6" + arena.spielModus + " §7gegen §6" + player.getName() + " §7zu kämpfen!");
|
||||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aGegen Spieler kämpfen").create()));
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aGegen §7" + player.getName() + " §ckämpfen").create()));
|
||||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName()));
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName()));
|
||||||
ProxyServer.getInstance().broadcast(tc);
|
ProxyServer.getInstance().broadcast(tc);
|
||||||
}
|
}
|
||||||
@ -51,8 +68,14 @@ public class FightCommand extends Command {
|
|||||||
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
|
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
|
||||||
List<String> gamemodes = new ArrayList<>();
|
List<String> gamemodes = new ArrayList<>();
|
||||||
if(args.length == 1){
|
if(args.length == 1){
|
||||||
gamemodes.add("airship");
|
gamemodes.add("AirShip");
|
||||||
gamemodes.add("as");
|
gamemodes.add("AS");
|
||||||
|
gamemodes.add("WarShip");
|
||||||
|
gamemodes.add("WS");
|
||||||
|
gamemodes.add("WarGear");
|
||||||
|
gamemodes.add("WG");
|
||||||
|
gamemodes.add("MiniWarGear");
|
||||||
|
gamemodes.add("MWG");
|
||||||
}
|
}
|
||||||
System.out.println(args);
|
System.out.println(args);
|
||||||
return gamemodes;
|
return gamemodes;
|
||||||
|
@ -16,12 +16,30 @@ public class HelpCommand extends Command {
|
|||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(CommandSender sender, String[] args) {
|
||||||
|
|
||||||
if(args.length != 1){
|
if(args.length != 1){
|
||||||
sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§l§7Hilfe"));
|
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "§7Kehre von überall mit §6/l §7zur Lobby zurück!");
|
||||||
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZurück zur Lobby").create()));
|
||||||
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/l"));
|
||||||
|
sender.sendMessage(tc);
|
||||||
|
|
||||||
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Klicke hier, um dem Server beizutreten!");
|
tc = new TextComponent(BungeeCore.ChatPrefix + "§7Komme mit §6/bau §7auf den Bauserver!");
|
||||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cServer beitreten").create()));
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZum Bauserver").create()));
|
||||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help "));
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bauserver"));
|
||||||
|
sender.sendMessage(tc);
|
||||||
|
|
||||||
|
tc = new TextComponent(BungeeCore.ChatPrefix + "§7Erhalte mit §6/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"));
|
||||||
|
sender.sendMessage(tc);
|
||||||
|
|
||||||
|
/*tc = new TextComponent(BungeeCore.ChatPrefix + "§7Starte mit §6/fight §7einen neuen Kampf!");
|
||||||
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cZum Kampfsystem").create()));
|
||||||
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/fight"));
|
||||||
|
sender.sendMessage(tc);
|
||||||
|
|
||||||
|
tc = new TextComponent(BungeeCore.ChatPrefix + "§7Trete mit §6/join [Spieler] §7einem Kampf bei!");
|
||||||
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cSpieler nachjoinen").create()));
|
||||||
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/join"));
|
||||||
|
sender.sendMessage(tc);*/
|
||||||
}else{
|
}else{
|
||||||
switch(args[0]){
|
switch(args[0]){
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package de.warking.bungeecore.commands;
|
|||||||
|
|
||||||
import de.warking.bungeecore.BungeeCore;
|
import de.warking.bungeecore.BungeeCore;
|
||||||
import de.warking.bungeecore.arenasystem.Arena;
|
import de.warking.bungeecore.arenasystem.Arena;
|
||||||
import de.warking.bungeecore.arenasystem.ArenaPlayer;
|
|
||||||
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
import de.warking.bungeecore.arenasystem.ArenaSystem;
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
@ -25,38 +24,32 @@ public class JoinmeCommand extends Command {
|
|||||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
ProxiedPlayer player = (ProxiedPlayer) sender;
|
||||||
|
|
||||||
if (args.length == 0 && player.hasPermission("bungeecore.joinme")) {
|
if (args.length == 0 && player.hasPermission("bungeecore.joinme")) {
|
||||||
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Klicke hier, um dem Spieler " + player.getName() + " auf " + player.getServer().getInfo().getName() + " zu folgen!");
|
TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "§7Klicke §6hier§8, §7um zu §6" + player.getName() + " §7auf §6" + player.getServer().getInfo().getName() + " §7zu kommen§8!");
|
||||||
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aSpieler folgen").create()));
|
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aSpieler folgen").create()));
|
||||||
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName()));
|
tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName()));
|
||||||
ProxyServer.getInstance().broadcast(tc);
|
ProxyServer.getInstance().broadcast(tc);
|
||||||
} else if (args.length == 1) {
|
} else if (args.length == 1) {
|
||||||
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
|
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
|
||||||
if(target == null || !target.isConnected()){
|
if(target == null || !target.isConnected()){
|
||||||
player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit offline.");
|
player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist offline.");
|
||||||
return;
|
return;
|
||||||
}else if(target.equals(player)){
|
}else if(target.equals(player)){
|
||||||
player.sendMessage(BungeeCore.ChatPrefix + "§cDu bist bereits in deiner Sphäre.");
|
player.sendMessage(BungeeCore.ChatPrefix + "§cSei eins mit dir selbst!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ServerInfo server = ProxyServer.getInstance().getPlayer(args[0]).getServer().getInfo();
|
ServerInfo server = target.getServer().getInfo();
|
||||||
String ServerPerm = BungeeCore.serverPermissions.get(server.getName());
|
String ServerPerm = BungeeCore.serverPermissions.get(server.getName());
|
||||||
|
Arena arena = ArenaSystem.getArena(target);
|
||||||
|
|
||||||
if(ServerPerm == null){
|
if(arena != null){
|
||||||
Arena arena = ArenaSystem.getArena(player);
|
arena.sendPlayer(player);
|
||||||
|
}else if(ServerPerm != null && !player.hasPermission(ServerPerm)){
|
||||||
if(arena == null){
|
|
||||||
player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
arena.sendPlayer(player, target);
|
|
||||||
}else if(!player.hasPermission(ServerPerm)){
|
|
||||||
player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen.");
|
player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen.");
|
||||||
}else{
|
}else{
|
||||||
player.connect(server);
|
player.connect(server);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(BungeeCore.ChatPrefix + "/join [Spieler]");
|
player.sendMessage(BungeeCore.ChatPrefix + "§7Mit §r/join §8[§rSpieler§8] §7kannst du einem Spieler folgen §8(z.B. in eine Arena)§7.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public class TeamchatCommand extends Command {
|
|||||||
msg = ChatColor.translateAlternateColorCodes('&', msg);
|
msg = ChatColor.translateAlternateColorCodes('&', msg);
|
||||||
|
|
||||||
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
|
for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){
|
||||||
if ((target.hasPermission("bungeecore.teamchat") || target.hasPermission("bungeecore.*"))
|
if ((target.hasPermission("bungeecore.teamchat"))
|
||||||
&& target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
|
&& target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){
|
||||||
target.sendMessage(msg);
|
target.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package de.warking.bungeecore.commands;
|
package de.warking.bungeecore.commands;
|
||||||
|
|
||||||
import de.warking.bungeecore.BungeeCore;
|
import de.warking.bungeecore.BungeeCore;
|
||||||
import de.warking.bungeecore.WarkingUser;
|
import de.warking.bungeecore.sql.WarkingUser;
|
||||||
import de.warking.bungeecore.sql;
|
import de.warking.bungeecore.sql.sql;
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
64
src/de/warking/bungeecore/sql/BannedUserIPs.java
Normale Datei
64
src/de/warking/bungeecore/sql/BannedUserIPs.java
Normale Datei
@ -0,0 +1,64 @@
|
|||||||
|
package de.warking.bungeecore.sql;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BannedUserIPs {
|
||||||
|
|
||||||
|
private int UserID;
|
||||||
|
private Timestamp Timestamp;
|
||||||
|
private String IP;
|
||||||
|
|
||||||
|
private BannedUserIPs(int userID, Timestamp timestamp, String ip){
|
||||||
|
UserID = userID;
|
||||||
|
Timestamp = timestamp;
|
||||||
|
IP = ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<BannedUserIPs> get(int userID){
|
||||||
|
List<BannedUserIPs> userIPs = new ArrayList<>();
|
||||||
|
ResultSet dbentry = sql.select("SELECT * FROM BannedUserIPs WHERE UserID = '" + userID + "' ORDER BY Timestamp ASC");
|
||||||
|
try {
|
||||||
|
while(dbentry.next()){
|
||||||
|
userIPs.add(new BannedUserIPs(
|
||||||
|
userID,
|
||||||
|
dbentry.getTimestamp("Timestamp"),
|
||||||
|
dbentry.getString("IP")));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return userIPs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<BannedUserIPs> get(String ip){
|
||||||
|
List<BannedUserIPs> userIDs = new ArrayList<>();
|
||||||
|
ResultSet dbentry = sql.select("SELECT * FROM BannedUserIPs WHERE IP = '" + ip + "' ORDER BY Timestamp DESC");
|
||||||
|
try {
|
||||||
|
while(dbentry.next()){
|
||||||
|
userIDs.add(new BannedUserIPs(
|
||||||
|
dbentry.getInt("UserID"),
|
||||||
|
dbentry.getTimestamp("Timestamp"),
|
||||||
|
ip));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return userIDs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUserID() {
|
||||||
|
return UserID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public java.sql.Timestamp getTimestamp() {
|
||||||
|
return Timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIP() {
|
||||||
|
return IP;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package de.warking.bungeecore;
|
package de.warking.bungeecore.sql;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
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;
|
||||||
|
|
||||||
@ -20,12 +21,16 @@ public class WarkingUser {
|
|||||||
|
|
||||||
public static Timestamp PermaBan = Timestamp.from(Instant.ofEpochSecond(946684800));
|
public static Timestamp PermaBan = Timestamp.from(Instant.ofEpochSecond(946684800));
|
||||||
|
|
||||||
|
public WarkingUser(int id){
|
||||||
|
init(sql.select("SELECT * FROM UserData WHERE id = '" + id + "'"));
|
||||||
|
}
|
||||||
|
|
||||||
public WarkingUser(UUID UUID){
|
public WarkingUser(UUID UUID){
|
||||||
init(sql.select("SELECT * FROM UserData WHERE UUID = '" + UUID.toString() + "'"));
|
init(sql.select("SELECT * FROM UserData WHERE UUID = '" + UUID.toString() + "'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public WarkingUser(String UserName){
|
public WarkingUser(String UserName){
|
||||||
init(sql.select("SELECT * FROM UserData WHERE UserName = '" + UserName + "'"));
|
init(sql.select("SELECT * FROM UserData WHERE lower(UserName) = '" + UserName.toLowerCase() + "'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public WarkingUser(PendingConnection connection){
|
public WarkingUser(PendingConnection connection){
|
||||||
@ -91,9 +96,24 @@ public class WarkingUser {
|
|||||||
return true;
|
return true;
|
||||||
}else{
|
}else{
|
||||||
sql.update("UPDATE UserData SET BanTime = NULL, BanReason = '' WHERE UUID = '" + UUID.toString() + "'");
|
sql.update("UPDATE UserData SET BanTime = NULL, BanReason = '' WHERE UUID = '" + UUID.toString() + "'");
|
||||||
|
sql.update("DELETE FROM BannedUserIPs WHERE UserID = '" + id + "'");
|
||||||
BanTime = null;
|
BanTime = null;
|
||||||
BanReason = "";
|
BanReason = "";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateBanIP(String ip){
|
||||||
|
sql.update("INSERT INTO BannedUserIPs\n" +
|
||||||
|
" (UserID, Timestamp, IP)\n" +
|
||||||
|
"VALUES\n" +
|
||||||
|
" (" + id + ", 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() + "'");
|
||||||
|
updateBanIP(ip);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package de.warking.bungeecore;
|
package de.warking.bungeecore.sql;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
In neuem Issue referenzieren
Einen Benutzer sperren