Spigot Java Arrays?

2 Antworten

Guck dir mal die String-Methode "startsWith()" an, das ist wahrscheinlich das, wonach du suchst

ich will aber was universelles haben

0
@Anonymer255

Ja.. dann kannst du startsWith verwenden..

Wenn der erlaube Befehl dem Anfang deines eingegebenen Befehls entspricht, dann ist der ganze Befehl erlaubt..

startsWith("gamemode") gibt dann bei
"gamemode" true
"gamemode c" true
"gamemode survival" true

Das ist das, was du möchtest?

0
@XGamer11208

nein ich habe die befehle in einer array list wie zum beispiel:

ControllComannds.cmds.add("/gamemode");

hierzu möchte ich aber das der command auch funktioniert wenn man /gamemode creative eingibt

0
@Anonymer255

ja.. das ist mir schon klar..

Trotzdem ist die einfache Lösung nach der du suchst startsWith()..

Guck in den Java-Docs.. wie man das benutzt.
Oder stackoverflow..

0
@XGamer11208

StartsWith wäre womöglich nicht die beste Lösung...

Angenommen man hätte zwei Befehle:

/Ab und /Abc da /Abc aber auch mit /Ab anfängt wird dieser automatisch auch als erlaubter Befehl erkannt obwohl dieser verboten sein sollte

0
@Endivie04

startsWith mit einem Leerzeichen bzw die Filterliste kann auch Leerzeichen enthalten

0

Probier mal folgendes:

if(command.contains(" "){
String[] args = command.split(" ");
if(arrayList.contains(args[0].toLowerCase() /*generell solltest du die Befehle in der ArrayListe klein einspeichern. Der Befehl /Ab kann nämlich auch /aB geschrieben werden*/) {
//Dein Code
} else {
//Dein Code
}
} else if(arrayList.contains(command.toLowerCase())) {
//DeinCode
} else {
//Dein Code
}

Damit hast du alle Befehle wie /gamemode creative und /gamemode survival dann auf er Whitelist

Und contains ist noch schlimmer als startswith mit leerzeichen..

Jetzt brauch nur irgendwo im befehl der passende erlaubte befehl auftauchen (vor jedem leerzeichen)

Und jetzt kann man nicht mehr befehls-argumente filtern

0
@XGamer11208

In wie fern? Wenn ein Leerzeichen enthalten ist wird das *aller erste Argument* (der Command) abgefragt ob dieser erlaubt ist... Da kann ich noch wie wild einen anderen Command dazuhauen...

0
@Endivie04

Was meinst du mit "Und jetzt kann man nicht mehr befehls-argumente filtern" Warum sollte dies der Fall sein?

0
@Endivie04

"meinOpBefehl".contains("Op") => true

Und wenn ich einschränken möchte, dass nur "gamemode creative" und "gamemode survival" geht, dann wird dein code jeden gamemode zulassen

0
@XGamer11208

Er möchte aber genau das Gegenteil:

Nur /gamemode in der ArrayListe und trotzdem alle GameModes freigeben...

0
@Endivie04

Ja, aber stell dir vor er hat einen befehl, bei dem er den 1. Argumenten des Befehls auch fest-limitieren möchte?

Immer schön dynamisch denken.. Code has Consequences.

String[] erlaubteBefehle = new String[] {"befehl arg1", "befehl arg2"};
String befehl = "befehl arg1 arg2".toLowerCase();

bool erlaubt = false;
for(String erlaubterBefehl : erlaubteBefehle)
{
  if(befehl.startsWith(erlaubterBefehl))
  {
    erlaubt = true;
    break;
  }
}
if(erlaubt) runCmd(befehl);
0

Was möchtest Du wissen?