Add BauLock #415
@ -23,8 +23,7 @@ import de.steamwar.bungeecore.*;
|
||||
import de.steamwar.bungeecore.inventory.SWInventory;
|
||||
import de.steamwar.bungeecore.inventory.SWItem;
|
||||
import de.steamwar.bungeecore.network.NetworkSender;
|
||||
import de.steamwar.bungeecore.sql.BauweltMember;
|
||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||
import de.steamwar.bungeecore.sql.*;
|
||||
import de.steamwar.bungeecore.util.Chat19;
|
||||
import de.steamwar.messages.ChatSender;
|
||||
import de.steamwar.network.packets.server.BaumemberUpdatePacket;
|
||||
@ -67,7 +66,7 @@ public class BauCommand extends BasicCommand {
|
||||
togglewe(p, args);
|
||||
break;
|
||||
case "toggleworld":
|
||||
toggleworld(p, args);
|
||||
toggleWorld(p, args);
|
||||
break;
|
||||
case "delmember":
|
||||
delmember(p, args);
|
||||
@ -80,6 +79,15 @@ public class BauCommand extends BasicCommand {
|
||||
case "test":
|
||||
testarena(p, args);
|
||||
break;
|
||||
|
||||
case "lock":
|
||||
setLocked(SteamwarUser.get(p), args);
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
|
||||
break;
|
||||
|
||||
case "unlock":
|
||||
setLocked(SteamwarUser.get(p), new String[]{"", "OPEN"});
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Warum nimmt setLocked nicht genau einen String? Warum nimmt setLocked nicht genau einen String?
|
||||
break;
|
||||
|
||||
default:
|
||||
HelpCommand.sendBauHelp(ChatSender.of(p));
|
||||
}
|
||||
@ -120,10 +128,14 @@ public class BauCommand extends BasicCommand {
|
||||
}
|
||||
|
||||
SteamwarUser worldOwner = SteamwarUser.get(args[1]);
|
||||
if (worldOwner == null) {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Warum ist dieser check rausgefallen? Warum ist dieser check rausgefallen?
|
||||
Message.send("UNKNOWN_PLAYER", p);
|
||||
SteamwarUser user = SteamwarUser.get(p);
|
||||
|
||||
if(isLocked(worldOwner, user)) {
|
||||
Message.send("BAU_LOCKED_NOALLOWED", user.getPlayer());
|
||||
return;
|
||||
}else if (!p.getUniqueId().equals(worldOwner.getUuid()) && BauweltMember.getBauMember(worldOwner.getUuid(), p.getUniqueId()) == null){
|
||||
}
|
||||
|
||||
if ((!p.getUniqueId().equals(worldOwner.getUuid()) && BauweltMember.getBauMember(worldOwner.getUuid(), p.getUniqueId()) == null)){
|
||||
SubserverSystem.sendDeniedMessage(p, worldOwner.getUuid());
|
||||
Message.send("BAU_TP_NOALLOWED", p);
|
||||
return;
|
||||
@ -185,7 +197,7 @@ public class BauCommand extends BasicCommand {
|
||||
isAllowedTo(target.isWorldEdit(), p, target, "BAU_MEMBER_TOGGLE_WORLD_EDIT");
|
||||
}
|
||||
|
||||
private static void toggleworld(ProxiedPlayer p, String[] args){
|
||||
private static void toggleWorld(ProxiedPlayer p, String[] args){
|
||||
BauweltMember target = toggle(p, args, "toggleworld");
|
||||
if(target == null)
|
||||
return;
|
||||
@ -307,4 +319,31 @@ public class BauCommand extends BasicCommand {
|
||||
Message.send("BAU_MEMBER_TOGGLE_OFF", p, Message.parse(what, p));
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isLocked(SteamwarUser owner, SteamwarUser target) {
|
||||
if (owner == null) {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Dieser check gehört hier nicht rein. Dieser check gehört hier nicht rein.
|
||||
Message.send("UNKNOWN_PLAYER", target.getPlayer());
|
||||
return true;
|
||||
}
|
||||
|
||||
BauLockState activeLockState = BauLock.getUserLockState(owner.getId());
|
||||
return (activeLockState == BauLockState.TEAM && !(Team.get(owner.getId()) == Team.get(target.getId()))) || activeLockState == BauLockState.ALL;
|
||||
}
|
||||
|
||||
private static void setLocked(SteamwarUser owner, String[] args) {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Hier wird nie auf die Länge des Array geprüft! Wird Fehler werfen. Hier wird nie auf die Länge des Array geprüft! Wird Fehler werfen.
|
||||
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Hier bekommst du nicht so ganz die Teams zurück ;). Du versuchst hier UserIDs als TeamIDs zu verwenden. Das funktioniert nicht so ganz... Du kannst auch einfach die TeamIDs vergleichen, das wäre dann (SteamWarUser u).getTeam() oder so ähnlich (Kein Team.get nötig, der Vergleich der Teamobjekte mit == würde zudem immer fehlschlagen, weil dabei bei Objekten nur die Objektadresse verglichen wird und in dem Fall 2x zwar das gleiche Team, aber unterschiedliche Objekte zurückgegeben werden würde). Hier bekommst du nicht so ganz die Teams zurück ;). Du versuchst hier UserIDs als TeamIDs zu verwenden. Das funktioniert nicht so ganz... Du kannst auch einfach die TeamIDs vergleichen, das wäre dann (SteamWarUser u).getTeam() oder so ähnlich (Kein Team.get nötig, der Vergleich der Teamobjekte mit == würde zudem immer fehlschlagen, weil dabei bei Objekten nur die Objektadresse verglichen wird und in dem Fall 2x zwar das gleiche Team, aber unterschiedliche Objekte zurückgegeben werden würde).
|
||||
BauLockState newState = BauLockState.OPEN;
|
||||
if(args[1] != null) {
|
||||
BauLockState.valueOf(args[1].toUpperCase());
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Werte haben ist eine Sache diese zu nutzen ist eine andere. Werte haben ist eine Sache diese zu nutzen ist eine andere.
|
||||
newState = BauLockState.valueOf(args[1].toUpperCase());
|
||||
}
|
||||
|
||||
BauLock.updateUserConfig(owner.getId(), newState);
|
||||
|
||||
String messageKey = "BAU_LOCKED";
|
||||
xSpw markierte diese Unterhaltung als gelöst
YoyoNow
hat
Keine Individuellen Nachrichten für die einzelnen States? Keine Individuellen Nachrichten für die einzelnen States?
|
||||
if(newState == BauLockState.OPEN)
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Kann man mit einem Ternary operator inlinen Kann man mit einem Ternary operator inlinen
|
||||
messageKey = "BAU_UNLOCKED";
|
||||
|
||||
Message.send(messageKey, owner.getPlayer());
|
||||
}
|
||||
}
|
||||
|
38
src/de/steamwar/bungeecore/sql/BauLock.java
Normale Datei
@ -0,0 +1,38 @@
|
||||
package de.steamwar.bungeecore.sql;
|
||||
|
||||
public class BauLock {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Du hast die UserConfig nicht so ganz verstanden. Du sollst kein BauLock hinzufügen sondern ein UserConfig, wo du dann alles mit dem Key 'baulock' nutzt oder so. Du hast die UserConfig nicht so ganz verstanden. Du sollst kein BauLock hinzufügen sondern ein UserConfig, wo du dann alles mit dem Key 'baulock' nutzt oder so.
|
||||
|
||||
private static final String configName = "baulockstate";
|
||||
|
||||
private static final Statement insert = new Statement("INSERT INTO `UserConfig`(`User`, `Config`, `Value`) VALUES (?,?,?)");
|
||||
private static final Statement update = new Statement("UPDATE `UserConfig` SET `Value`= ? WHERE 'User' = ? AND 'Config' = ?");
|
||||
private static final Statement select = new Statement("SELECT `Value` FROM `UserConfig` WHERE 'User' = ? AND 'Config' = ?");
|
||||
private static final Statement selectAll = new Statement("SELECT * FROM `UserConfig` WHERE 'User' = ? AND Config' = ?");
|
||||
|
||||
public static BauLockState getUserLockState(int userID) {
|
||||
select.select(rs -> {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Select returned auch was? Wieso wird hier immer 'BauLockState.OPEN' aus der methode gereicht? Select returned auch was? Wieso wird hier immer 'BauLockState.OPEN' aus der methode gereicht?
|
||||
if(rs.next())
|
||||
return BauLockState.valueOf(rs.getString("Value"));
|
||||
return BauLockState.OPEN;
|
||||
}, userID, configName);
|
||||
return BauLockState.OPEN;
|
||||
}
|
||||
|
||||
public static void updateUserConfig(int userID, BauLockState state) {
|
||||
|
||||
if(!exists(userID)) {
|
||||
insert.update(userID, configName, String.valueOf(state));
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Ich weiß nicht ob es im SpigotCore ähnlich gemacht ist, sollte so aber nicht nötig sein. Ich weiß nicht ob es im SpigotCore ähnlich gemacht ist, sollte so aber nicht nötig sein.
|
||||
}else
|
||||
update.update(String.valueOf(state), userID, configName);
|
||||
}
|
||||
|
||||
private static boolean exists(int userID) {
|
||||
selectAll.select(rs -> {
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Der key existiert also nie? und warum mal '!= null' und mal direkt einfach 'null'? Der key existiert also nie? und warum mal '!= null' und mal direkt einfach 'null'?
|
||||
if(rs.next())
|
||||
return rs.getString(1) != null;
|
||||
return null;
|
||||
}, userID, configName);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
8
src/de/steamwar/bungeecore/sql/BauLockState.java
Normale Datei
@ -0,0 +1,8 @@
|
||||
package de.steamwar.bungeecore.sql;
|
||||
|
||||
public enum BauLockState {
|
||||
|
||||
ALL, // Locks the build server for all users
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
All klingt wie alle können drauf vllt eher zu (none) umbenenen All klingt wie alle können drauf vllt eher zu (none) umbenenen
Lixfel
hat
Ich fände NOBODY oder NOMEMBERS treffender. Ich fände NOBODY oder NOMEMBERS treffender.
|
||||
OPEN, //locks the build server for every user
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Kommentar passt nicht zum namen! Kommentar passt nicht zum namen!
|
||||
TEAM //opens the build server only for every added user which is in the same team as the buildOwner
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Reihenfolge ist etwas komisch Reihenfolge ist etwas komisch
|
||||
}
|
@ -196,6 +196,9 @@ BAU_ADDMEMBER_ADDED=§aThe player was added to your world.
|
||||
BAU_ADDMEMBER_ADDED_TARGET=§aYou have been added to the world of §e{0}§a.
|
||||
BAU_TP_USAGE=§8/§7build tp §8[§eplayer§8]
|
||||
BAU_TP_NOALLOWED=§cYou are not allowed to teleport to this player's world.
|
||||
BAU_LOCKED_NOALLOWED=&cThe buildserver is currently locked.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
|
||||
BAU_LOCKED=&eYou have locked your buildserver.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
YoyoNow
hat
Ich würde persönlich das 'have' rausnehmen. Ich würde persönlich das 'have' rausnehmen.
|
||||
BAU_UNLOCKED=&eYou have unlocked your buildserver.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
YoyoNow
hat
Ich würde persönlich das 'have' rausnehmen. Ich würde persönlich das 'have' rausnehmen.
|
||||
BAU_DELMEMBER_USAGE=§8/§7build delmember §8[§eplayer§8]
|
||||
BAU_DELMEMBER_SELFDEL=§cYou cannot remove yourself!
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Im englischen musst du build und server trennen (zwei Wörter, betrifft auch die folgenden Zeilen) Im englischen musst du build und server trennen (zwei Wörter, betrifft auch die folgenden Zeilen)
|
||||
BAU_DELMEMBER_DELETED=§cPlayer was removed.
|
||||
|
@ -180,6 +180,9 @@ BAU_ADDMEMBER_ADDED=§aDer Spieler wurde zu deiner Welt hinzugefügt.
|
||||
BAU_ADDMEMBER_ADDED_TARGET=§aDu wurdest zu der Welt von §e{0} §ahinzugefügt.
|
||||
BAU_TP_USAGE=§8/§7bau tp §8[§eSpieler§8]
|
||||
BAU_TP_NOALLOWED=§cDu darfst dich nicht auf diese Welt teleportieren.
|
||||
BAU_LOCKED_NOALLOWED=&cDer Buildserver ist momentan gelocked.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
|
||||
BAU_LOCKED=&eDu hast dein Bau geschlossen.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
|
||||
BAU_UNLOCKED=&eDu hast dein Bau wieder freigegeben.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Keine & in Nachrichten. Nutze § bitte. Keine & in Nachrichten. Nutze § bitte.
|
||||
BAU_DELMEMBER_USAGE=§8/§7bau delmember §8[§eSpieler§8]
|
||||
BAU_DELMEMBER_SELFDEL=§cDu kannst dich nicht selbst entfernen!
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Auf Deutsch ist es der Bauserver Auf Deutsch ist es der Bauserver
|
||||
BAU_DELMEMBER_DELETED=§cDer Spieler wurde entfernt.
|
||||
xSpw markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
Im Deutschen wäre Bauserverschließoptionen ein Wort. Im Deutschen wäre Bauserverschließoptionen ein Wort.
|
||||
|
siehe unten
Hier fliegt eine ArrayIndexOutOfBoundsException, wenn der User einfach nur /bau lock eingibt. Zudem solltest du auf das Argument noch .toUpperCase() ausführen, ansonsten muss der User den Lockzustand immer in Capslock schreiben.