Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben?

jonny_2k12

Mitglied
Hi, frage steht oben, im anhang screenshots.


Klasse 1:
code1.PNG


Klasse 2:
code.2.PNG

wie kann ich hier einen wert der arraylist admin hinzufügen?

Danke im vorraus
jonny_2k12
 
K

kneitzel

Gast
A) Code mite mit Code Tags (Button </> über dem Eingabefeld) posten. So mit Bildschirmfotos ist es nicht gut zu lesen.

B) du benötigst in der zweiten Klasse die Referenz auf die Instanz der anderen Klasse. Dann kannst du darauf zugreifen.

C) Strings vergleicht man mit equals und nicht mit ==.
 

jonny_2k12

Mitglied
A) Code mite mit Code Tags (Button </> über dem Eingabefeld) posten. So mit Bildschirmfotos ist es nicht gut zu lesen.

B) du benötigst in der zweiten Klasse die Referenz auf die Instanz der anderen Klasse. Dann kannst du darauf zugreifen.

C) Strings vergleicht man mit equals und nicht mit ==.
Hi, danke, bin noch sehr neu in Java (3 Tage), deshalb sorry wenn noch nicht alles richtig ist. :D
 

jonny_2k12

Mitglied
Hi, danke, bin noch sehr neu in Java (3 Tage), deshalb sorry wenn noch nicht alles richtig ist. :D
A) Code mite mit Code Tags (Button </> über dem Eingabefeld) posten. So mit Bildschirmfotos ist es nicht gut zu lesen.

B) du benötigst in der zweiten Klasse die Referenz auf die Instanz der anderen Klasse. Dann kannst du darauf zugreifen.

C) Strings vergleicht man mit equals und nicht mit ==.
Also wie soll ich die strings vergleichen?

Java:
UUID id = target.getUniqueId();
String rang = args[0];
if(rang equals "Admin") {
    admin.add(id);
    if(moderator.contains(id)) {
        moderator.remove(id);
    }
}

so?
 
Zuletzt bearbeitet:
K

kneitzel

Gast
String sind eine Klasse in Java und erbt damit von Object.
Object bietet eine Methode equals(Object) und diese wäre zu nutzen. Also etwas wie:
Java:
if(rang.equals("Admin") {

Falls rang auch null sein könnte, würde es sich anbieten, dies umzudrehen:
Java:
if("Admin".equals(rang) {

Dieses equals wäre die Methode, mit der generell Instanzen verglichen werden sollten.

String bietet natürlich noch weitere Methoden - falls die Gross-/Kleinschreibung egal sein sollte, dann gäbe es z.B. equalsIgnoreCase:
Java:
if("Admin".equalsIgnoreCase(rang) {

Hi, danke, bin noch sehr neu in Java (3 Tage), deshalb sorry wenn noch nicht alles richtig ist. :D
Das ist absolut kein Thema - daher kommen diese Hinweise. Auch wenn diese teilweise kurz ausfallen: Das bitte nicht als Unhöflich oder Abwerten ansehen. Das liegt einfach nur daran, dass es sich z.B. bei mir nur um kurze Pausen handelt und daher nur so kurze Antworten entstehen. Du bist herzlich willkommen und wir helfen gerne weiter. (Erst Recht, wenn so Hinweise direkt aufgenommen und umgesetzt werden, wie z.B. die Verwendung der Code Tags :) )

Da bezüglich B) noch keine Rückmeldung gekommen ist: Hat das so ausgereicht um durch eigene Recherche weiter zu kommen oder brauchst Du dies ausführlicher? (Es ist kein Problem, da nachzufragen oder mehr einzufordern! Manchmal sind Antworten unverständlich oder so... Daher nicht zögern, wenn es nicht weiter hilft.)

Das einfach mal als eine Antwort mit etwas mehr Text :)
 

jonny_2k12

Mitglied
Da bezüglich B) noch keine Rückmeldung gekommen ist: Hat das so ausgereicht um durch eigene Recherche weiter zu kommen oder brauchst Du dies ausführlicher? (Es ist kein Problem, da nachzufragen oder mehr einzufordern! Manchmal sind Antworten unverständlich oder so... Daher nicht zögern, wenn es nicht weiter hilft.)
zu B): hab einfach gemacht:
Java:
public class RankCommand extends ChatListener {

(ChatListener ist die Klasse, in der die ArrayLists erstellt werden.)

Vielen Dank nochmal für deine Hilfe! :)
 

jonny_2k12

Mitglied
EDIT: hab den Fehler gefunden :)




@kneitzel Weitere Frage :D

Nun hab ich die ID des Players zur ArrayList hinzugefügt, aber das erhoffte ergebnis funktioniert noch nicht... :D
Kannst du hier irgendwo einen Fehler erkennen? :)

Java:
public class ChatListener implements Listener {
   
public List<UUID> admin = new ArrayList<>();
public List<UUID> moderator = new ArrayList<>();
public List<UUID> supporter = new ArrayList<>();
public List<UUID> builder = new ArrayList<>();
public List<UUID> youtuber = new ArrayList<>();
public List<UUID> premium = new ArrayList<>();
public List<UUID> spieler = new ArrayList<>();

   

    @EventHandler
    public void onChatEvent(AsyncPlayerChatEvent e) {
        Player player = (Player)e.getPlayer();
        UUID id = (UUID)player.getUniqueId();
        String message = (String)e.getMessage();
        if(admin.contains(id)) {
            Bukkit.broadcastMessage("§c§l[Admin] §r" + player + message);
        }else if(moderator.contains(id)) {
            Bukkit.broadcastMessage("§1[Moderator] §r" + player + message);
        }else if(supporter.contains(id)) {
            Bukkit.broadcastMessage("§2[Supporter] §r" + player + message);  
        }else if(builder.contains(id)) {
                Bukkit.broadcastMessage("§3[Builder] §r" + player + message);
        }else if(youtuber.contains(id)) {
            Bukkit.broadcastMessage("§5[Youtuber] §r" + player + message);
        }else if(premium.contains(id)) {
            Bukkit.broadcastMessage("§6[Premium] §r" + player + message);
        }else {
            Bukkit.broadcastMessage("§r[Spieler] §r" + player + message);
        }
        e.setCancelled(true);
       
   
    }




}

 
Zuletzt bearbeitet:
K

kneitzel

Gast
Da möchte ich einmal kurz einhaken, dann das mag zwar technisch funktionieren in Deinem Fall, aber das ist so nicht wirklich sinnvoll.

Damit hast Du die Aussage: RankCommand ist ein ChatListener. Aber das ist ggf. nicht wirklich so richtig.

Ich kenne Deinen genauen Code nicht, daher ist es schwer, dir da eine konkrete Lösung zu geben. Aber auf den ersten Blick sieht es so aus, also ob Du da eine Art Userverwaltung hast. Daher wäre da eine eigene Klasse denkbar: UserManagement und diese Klasse hat dann die List<UUID> drin.
Auf diese Listen gibst Du aber keinen direkten Zugriff sondern statt dessen gehst Du hin und erstellst dann Methoden, die den Zugriff erledigen.
Also sowas wie

Java:
public void addAdmin(final Player player) {
    admin.add(player.getUniqueId());
}

public boolean isAdmin(final Player player) {
    admin.contains(player.getUniqueId());
}

Deine Klassen RankCommand und ChatListener kennen dann die Instanz vom UserManagement. Die hätten dann also sowas:
Java:
private UserManagement userManagement;

public void setUserManagement(final UserManagement userManagement) {
    this.userManagement = userManagement;
}

// Und dann in einer Methode der Klasse
userManagement.isAdmin(somePlayer);
// oder
userManagement.addAdmin(somePlayer);

Wichtig ist aber, dass Du bei der Erstellung der Instanzen jeweils das UserManagement setzt. Also Du erstellst eine Instanz von UserManagement und die gibst Du dann an die Instanzen der anderen Klassen...

Und das Problem, das Du Du ggf. in Deinem Post hattest:
Du hast zwei Instanzen gehabt: einmal vom ChatListener und einmal vom RankCommand. Damit hattest Du zwei Mal die ganzen Listen. Wenn Du also bei RankCommand einen Player in einer Liste hinzugefügt hast, dann ist der User bei dem ChatListener nicht enthalten.
 

jonny_2k12

Mitglied
Da möchte ich einmal kurz einhaken, dann das mag zwar technisch funktionieren in Deinem Fall, aber das ist so nicht wirklich sinnvoll.

Damit hast Du die Aussage: RankCommand ist ein ChatListener. Aber das ist ggf. nicht wirklich so richtig.

Ich kenne Deinen genauen Code nicht, daher ist es schwer, dir da eine konkrete Lösung zu geben. Aber auf den ersten Blick sieht es so aus, also ob Du da eine Art Userverwaltung hast. Daher wäre da eine eigene Klasse denkbar: UserManagement und diese Klasse hat dann die List<UUID> drin.
Auf diese Listen gibst Du aber keinen direkten Zugriff sondern statt dessen gehst Du hin und erstellst dann Methoden, die den Zugriff erledigen.
Also sowas wie

Java:
public void addAdmin(final Player player) {
    admin.add(player.getUniqueId());
}

public boolean isAdmin(final Player player) {
    admin.contains(player.getUniqueId());
}

Deine Klassen RankCommand und ChatListener kennen dann die Instanz vom UserManagement. Die hätten dann also sowas:
Java:
private UserManagement userManagement;

public void setUserManagement(final UserManagement userManagement) {
    this.userManagement = userManagement;
}

// Und dann in einer Methode der Klasse
userManagement.isAdmin(somePlayer);
// oder
userManagement.addAdmin(somePlayer);

Wichtig ist aber, dass Du bei der Erstellung der Instanzen jeweils das UserManagement setzt. Also Du erstellst eine Instanz von UserManagement und die gibst Du dann an die Instanzen der anderen Klassen...

Und das Problem, das Du Du ggf. in Deinem Post hattest:
Du hast zwei Instanzen gehabt: einmal vom ChatListener und einmal vom RankCommand. Damit hattest Du zwei Mal die ganzen Listen. Wenn Du also bei RankCommand einen Player in einer Liste hinzugefügt hast, dann ist der User bei dem ChatListener nicht enthalten.
Hi, ich verstehe technisch leider nur die Hälfte von dem was du geschrieben hast 😅

ich hänge einfach mal den kompletten Code beider Klassen an. wichtig ist nur dass man die UUIDs des Spieler speichert, nicht den Namen, weil wenn er sonst seinen Namen ändert ist im Chat sein Rang weg..

mit den 2 Listen könntest du recht haben...
mein erster Fehler war, dass der Listener nicht in der Main registriert war.

jetzt funktioniert zwar der Spieler prefix, aber wenn ich meine UUID in RankCommand in eine Liste gebe, so merkt der ChatListener das tatsächlich nicht...


hier die Codes:

[CODE lang="java" title="ChatListener"]package de.jonny_2k12.chatsystemjonny.listeners;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class ChatListener implements Listener {

public List<UUID> admin = new ArrayList<>();
public List<UUID> moderator = new ArrayList<>();
public List<UUID> supporter = new ArrayList<>();
public List<UUID> builder = new ArrayList<>();
public List<UUID> youtuber = new ArrayList<>();
public List<UUID> premium = new ArrayList<>();
public List<UUID> spieler = new ArrayList<>();



@EventHandler
public void onChatEvent(AsyncPlayerChatEvent e) {
String player = (String)e.getPlayer().getName();
Player player1 = (Player)e.getPlayer();
UUID id = (UUID)player1.getUniqueId();
String message = (String)e.getMessage();
if(admin.contains(id)) {
Bukkit.broadcastMessage("§c§l[Admin] §r" + player + message);
}else if(moderator.contains(id)) {
Bukkit.broadcastMessage("§1[Moderator] §r" + player + message);
}else if(supporter.contains(id)) {
Bukkit.broadcastMessage("§2[Supporter] §r" + player + message);
}else if(builder.contains(id)) {
Bukkit.broadcastMessage("§3[Builder] §r" + player + message);
}else if(youtuber.contains(id)) {
Bukkit.broadcastMessage("§5[Youtuber] §r" + player + message);
}else if(premium.contains(id)) {
Bukkit.broadcastMessage("§6[Premium] §r" + player + message);
}else {
Bukkit.broadcastMessage("§r[Spieler] §r" + player + message);
}
e.setCancelled(true);


}




}[/CODE]


[CODE lang="java" title="RankCommand"]package de.jonny_2k12.chatsystemjonny.commands;

import java.util.Arrays;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import de.jonny_2k12.chatsystemjonny.listeners.ChatListener;
import de.jonny_2k12.chatsystemjonny.main.Main;

public class RankCommand extends ChatListener implements CommandExecutor {

public RankCommand(Main plugin) {
plugin.getCommand("rank").setExecutor(this);
plugin.getCommand("rank").setDescription("/rank <Rang> <Player>");
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("chat.rank")) {
if(args.length == 0) {
player.sendMessage("§6[Essentials] §4Bitte benutze §6/rank <Rang> <Player>§4!");
} else if(args.length == 2) {
Player target = Bukkit.getPlayer(args[1]);
if(target != null) {
UUID id = target.getUniqueId();
String rang = args[0];
if(rang.equals("Admin")) {
admin.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(supporter.contains(id)) {
supporter.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);

}else if(rang.equals("Moderator")) {
moderator.add(id);
if(admin.contains(id)) {
admin.remove(id);
}else if(supporter.contains(id)) {
supporter.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);
}else if(rang.equals("Builder")) {
builder.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(supporter.contains(id)) {
supporter.remove(id);
}else if(admin.contains(id)) {
admin.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);
}else if(rang.equals("Premium")) {
premium.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(supporter.contains(id)) {
supporter.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(admin.contains(id)) {
admin.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);
}else if(rang.equals("Youtuber")) {
youtuber.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(supporter.contains(id)) {
supporter.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(admin.contains(id)) {
admin.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);
}else if(rang.equals("Supporter")) {
supporter.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(admin.contains(id)) {
admin.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(spieler.contains(id));
spieler.remove(id);
}else if(rang.equals("Spieler")) {
spieler.add(id);
if(moderator.contains(id)) {
moderator.remove(id);
}else if(admin.contains(id)) {
admin.remove(id);
}else if(builder.contains(id)) {
builder.remove(id);
}else if(youtuber.contains(id)) {
youtuber.remove(id);
}else if(premium.contains(id)) {
premium.remove(id);
}else if(supporter.contains(id));
supporter.remove(id);
}else {
player.sendMessage("§6[Essentials] §4Das ist kein gültiger Rang!");
}
} else
player.sendMessage("§6[Essentials] §4Der Spieler §6" + args[1] + "§4 ist nicht online!");
}else
player.sendMessage("§6[Essentials] §4Bitte benutze §6/rank <Rang> <Player>§4!");

} else
player.sendMessage("§6[Essentials] §4§lDazu hast du keine Rechte!");
} else {
sender.sendMessage("Diesen Command können nur Spieler nutzen!");
}
return false;
}

}
[/CODE]




[CODE lang="java" title="Main"]package de.jonny_2k12.chatsystemjonny.main;

import org.bukkit.Bukkit;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import de.jonny_2k12.chatsystemjonny.commands.RankCommand;
import de.jonny_2k12.chatsystemjonny.listeners.ChatListener;
import de.jonny_2k12.chatsystemjonny.listeners.JoinListener;
import de.jonny_2k12.chatsystemjonny.listeners.QuitListener;

public class Main extends JavaPlugin{

@Override
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(new JoinListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new QuitListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new ChatListener(), this);

new RankCommand(this);
}
}[/CODE]
 
K

kneitzel

Gast
Ich habe mal im Editor (also ohne jede Kontrolle durch einen Compiler - Tippfehler sind also möglich) paar Dinge geändert.
Aber das sind nur Auszüge!

Also als erstes habe ich ein UserManagement gebaut:
Java:
package de.jonny_2k12.chatsystemjonny.listeners;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.entity.Player;

public class UserManagement {
    private List<UUID> admin = new ArrayList<>();
    private List<UUID> moderator = new ArrayList<>();
    private List<UUID> supporter = new ArrayList<>();
    private List<UUID> builder = new ArrayList<>();
    private List<UUID> youtuber = new ArrayList<>();
    private List<UUID> premium = new ArrayList<>();
    private List<UUID> spieler = new ArrayList<>();

    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
    }
  
    public boolean isAdmin(final Player player) {
        return admin.contains(player.getUniqueId());
    }

    public void removeAdmin(final Player player) {
        if(admin.contains(player.getUniqueId()) {
            admin.remove(player.getUniqueId());
        }
    }

    // Die anderen Methoden so aufbauen wie die für Admin!
}

Wichtig ist: So wie ich die Methoden für Admin geschrieben habe, kannst Du 1:1 die Methoden für die anderen Listen schreiben.
Also einfach die Methoden kopieren und dann [aA]dmin durch z.B. [mM]oderator ersetzen.

Dann habe ich den anderen Klassen ein UserManagement gegeben und das wird im Konstruktor mit übergeben.
Und dann im Code wird dann auf userManagement zugegriffen. Da beim remove die Prüfung enthalten ist, muss die im RankController nicht mehr stattfinden. So Du das als feste Regel haben willst, kannst Du das Entfernen sogar in das UserManagement rein nehmen:
Java:
    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
        removeSupporter(player);
        remove.....(player);
        remove.....(player);
        ...
    }
Dann würden die remove Aufrufe nach dem addAdmin und so entfallen...

RankCommand würde dann (Ausschnitt):
[CODE lang="java" highlight="3,5,6,22-26"]
public class RankCommand extends ChatListener implements CommandExecutor {

private UserManagement userManagement;

public RankCommand(final Main plugin, final UserManagement userManagement) {
this.userManagement = userManagement;
plugin.getCommand("rank").setExecutor(this);
plugin.getCommand("rank").setDescription("/rank <Rang> <Player>");
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("chat.rank")) {
if(args.length == 0) {
player.sendMessage("§6[Essentials] §4Bitte benutze §6/rank <Rang> <Player>§4!");
} else if(args.length == 2) {
Player target = Bukkit.getPlayer(args[1]);
if(target != null) {
String rang = args[0];
if(rang.equals("Admin")) {
userManagement.addAdmin(target);
userManagement.removeModerator(target);
userManagement.removeSupporter(target);
// Ab hier müsstest du weiter anpassen ...
[/CODE]

Und der ChatListener:
[CODE lang="java" highlight="3, 5-7, 16-21"]
public class ChatListener implements Listener {

private UserManagement userManagement;

public ChatListener(final UserManagement userManagement) {
this.userManagement = userManagement;
}


@EventHandler
public void onChatEvent(AsyncPlayerChatEvent e) {
String player = (String)e.getPlayer().getName();
Player player1 = (Player)e.getPlayer();
UUID id = (UUID)player1.getUniqueId();
String message = (String)e.getMessage();
if(userManagement.isAdmin(player1)) {
Bukkit.broadcastMessage("§c§l[Admin] §r" + player + message);
}else if(userManagement.isModerator(player1)) {
Bukkit.broadcastMessage("§1[Moderator] §r" + player + message);

// Ab hier selbst ändern ...
[/CODE]

Und die Main muss natürlich auch angepasst werden, denn da erstellen wir das UserManagement einmalig und übergeben es bei den Konstuktoren der anderen beiden Klassen:
[CODE lang="java" highlight="5,8,10"]
public class Main extends JavaPlugin{

@Override
public void onEnable() {
UserManagement userManagement = new UserManagement();
Bukkit.getServer().getPluginManager().registerEvents(new JoinListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new QuitListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new ChatListener(userManagement), this);

new RankCommand(this, userManagement);
}
}[/CODE]

Das wäre dann mein Vorschlag etwas ausführlicher.

Edit: Die markierten Zeilen waren verschoben - er hatte eine Leerzeile am Anfang im Editor drin, die er wohl entfernt hat und dadurch gab es die Verschiebung ... wurde behoben...
 

jonny_2k12

Mitglied
Ich habe mal im Editor (also ohne jede Kontrolle durch einen Compiler - Tippfehler sind also möglich) paar Dinge geändert.
Aber das sind nur Auszüge!

Also als erstes habe ich ein UserManagement gebaut:
Java:
package de.jonny_2k12.chatsystemjonny.listeners;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.entity.Player;

public class UserManagement {
    private List<UUID> admin = new ArrayList<>();
    private List<UUID> moderator = new ArrayList<>();
    private List<UUID> supporter = new ArrayList<>();
    private List<UUID> builder = new ArrayList<>();
    private List<UUID> youtuber = new ArrayList<>();
    private List<UUID> premium = new ArrayList<>();
    private List<UUID> spieler = new ArrayList<>();

    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
    }

    public boolean isAdmin(final Player player) {
        return admin.contains(player.getUniqueId());
    }

    public void removeAdmin(final Player player) {
        if(admin.contains(player.getUniqueId()) {
            admin.remove(player.getUniqueId());
        }
    }

    // Die anderen Methoden so aufbauen wie die für Admin!
}

Wichtig ist: So wie ich die Methoden für Admin geschrieben habe, kannst Du 1:1 die Methoden für die anderen Listen schreiben.
Also einfach die Methoden kopieren und dann [aA]dmin durch z.B. [mM]oderator ersetzen.

Dann habe ich den anderen Klassen ein UserManagement gegeben und das wird im Konstruktor mit übergeben.
Und dann im Code wird dann auf userManagement zugegriffen. Da beim remove die Prüfung enthalten ist, muss die im RankController nicht mehr stattfinden. So Du das als feste Regel haben willst, kannst Du das Entfernen sogar in das UserManagement rein nehmen:
Java:
    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
        removeSupporter(player);
        remove.....(player);
        remove.....(player);
        ...
    }
Dann würden die remove Aufrufe nach dem addAdmin und so entfallen...

RankCommand würde dann (Ausschnitt):
[CODE lang="java" highlight="3,5,6,22-26"]
public class RankCommand extends ChatListener implements CommandExecutor {

private UserManagement userManagement;

public RankCommand(final Main plugin, final UserManagement userManagement) {
this.userManagement = userManagement;
plugin.getCommand("rank").setExecutor(this);
plugin.getCommand("rank").setDescription("/rank <Rang> <Player>");
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("chat.rank")) {
if(args.length == 0) {
player.sendMessage("§6[Essentials] §4Bitte benutze §6/rank <Rang> <Player>§4!");
} else if(args.length == 2) {
Player target = Bukkit.getPlayer(args[1]);
if(target != null) {
String rang = args[0];
if(rang.equals("Admin")) {
userManagement.addAdmin(target);
userManagement.removeModerator(target);
userManagement.removeSupporter(target);
// Ab hier müsstest du weiter anpassen ...
[/CODE]

Und der ChatListener:
[CODE lang="java" highlight="3, 5-7, 16-21"]
public class ChatListener implements Listener {

private UserManagement userManagement;

public ChatListener(final UserManagement userManagement) {
this.userManagement = userManagement;
}


@EventHandler
public void onChatEvent(AsyncPlayerChatEvent e) {
String player = (String)e.getPlayer().getName();
Player player1 = (Player)e.getPlayer();
UUID id = (UUID)player1.getUniqueId();
String message = (String)e.getMessage();
if(userManagement.isAdmin(player1)) {
Bukkit.broadcastMessage("§c§l[Admin] §r" + player + message);
}else if(userManagement.isModerator(player1)) {
Bukkit.broadcastMessage("§1[Moderator] §r" + player + message);

// Ab hier selbst ändern ...
[/CODE]

Und die Main muss natürlich auch angepasst werden, denn da erstellen wir das UserManagement einmalig und übergeben es bei den Konstuktoren der anderen beiden Klassen:
[CODE lang="java" highlight="5,8,10"]
public class Main extends JavaPlugin{

@Override
public void onEnable() {
UserManagement userManagement = new UserManagement();
Bukkit.getServer().getPluginManager().registerEvents(new JoinListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new QuitListener(), this);
Bukkit.getServer().getPluginManager().registerEvents(new ChatListener(userManagement), this);

new RankCommand(this, userManagement);
}
}[/CODE]

Das wäre dann mein Vorschlag etwas ausführlicher.

Edit: Die markierten Zeilen waren verschoben - er hatte eine Leerzeile am Anfang im Editor drin, die er wohl entfernt hat und dadurch gab es die Verschiebung ... wurde behoben...
ok, danke, problem wäre dann glaube ich im UserManager, dass er ja bei player.getUniqueID() nicht nimmt, da es ja noch keine Variable mit dem Spieler player gibt...
 
K

kneitzel

Gast
Der player wird ja als Parameter übergeben:

Java:
    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
    }

Diese Methode erwartet also, dass ihm eine Player Instanz übergeben wird.

Das ist also vergleichbar mit Jemand schickt Dich ein Auto Kaufen und gibt Dir das Geld mit.
Du musst also selbst gar kein geld haben. Das Geld wird dir ja mitgegeben.

So ist es auch hier: Der UserManager muss keine Player kennen. Er nimmt diese ja entgegen und arbeitet dann nur mit der Instanz, die er bekommen hat...
 

jonny_2k12

Mitglied
Der player wird ja als Parameter übergeben:

Java:
    public void addAdmin(final Player player) {
        admin.add(player.getUniqueId());
    }

Diese Methode erwartet also, dass ihm eine Player Instanz übergeben wird.

Das ist also vergleichbar mit Jemand schickt Dich ein Auto Kaufen und gibt Dir das Geld mit.
Du musst also selbst gar kein geld haben. Das Geld wird dir ja mitgegeben.

So ist es auch hier: Der UserManager muss keine Player kennen. Er nimmt diese ja entgegen und arbeitet dann nur mit der Instanz, die er bekommen hat...
Alles klar 😄 du merkst ich verstehe noch nicht so viel von java aber fürn 3. tag gehts ja😁
 
K

kneitzel

Gast
Ja klar - du schlägst Dich super. Ich wünsche Dir da viel Spaß und Erfolg. Und bei Fragen weisst Du ja, wo du Dich hinwenden kannst... :)
 
K

kneitzel

Gast
Nein, das ist falsch. Hast Du das u groß geschrieben? Dass muss klein geschrieben sein:
userManagement ist die Instanzvariable, die wir hinzugefügt haben.
UserManagement ist die Klasse, die wir erstellt haben.
 
K

kneitzel

Gast
Hast Du die Zeile
Java:
UserManagement userManagement = new UserManagement();
vergessen?

Diese Zeile deklariert eine neue Variable userManagement vom Typ UserManagement und erzeugt eine neue Instanz von UserManagement und weist diese dann der Variablen zu.

Und ich hatte vergessen: die Klasse RankCommand erbt natürlich nicht mehr von ChatListener. Diese Anpassung hatte ich in dem Code nicht drin...
Java:
public class RankCommand implements CommandExecutor {
Also ohne das "extends ChatListener".
 

jonny_2k12

Mitglied
Hast Du die Zeile
Java:
UserManagement userManagement = new UserManagement();
vergessen?

Diese Zeile deklariert eine neue Variable userManagement vom Typ UserManagement und erzeugt eine neue Instanz von UserManagement und weist diese dann der Variablen zu.

Und ich hatte vergessen: die Klasse RankCommand erbt natürlich nicht mehr von ChatListener. Diese Anpassung hatte ich in dem Code nicht drin...
Java:
public class RankCommand implements CommandExecutor {
Also ohne das "extends ChatListener".
jo, danke, jetzt sollte es klappen
 

jonny_2k12

Mitglied
Hast Du die Zeile
Java:
UserManagement userManagement = new UserManagement();
vergessen?

Diese Zeile deklariert eine neue Variable userManagement vom Typ UserManagement und erzeugt eine neue Instanz von UserManagement und weist diese dann der Variablen zu.

Und ich hatte vergessen: die Klasse RankCommand erbt natürlich nicht mehr von ChatListener. Diese Anpassung hatte ich in dem Code nicht drin...
Java:
public class RankCommand implements CommandExecutor {
Also ohne das "extends ChatListener".
kennst du dich auch mit der Spigot api gut aus?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
J Objekte einer ArrayList in eine Tabelle einfügen Java Basics - Anfänger-Themen 2
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
L Collections Ist eine Arraylist hier das richtige? Java Basics - Anfänger-Themen 12
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
K Variablen Ist es möglich eine ArrayList vom Typ Array zu erstellen? Java Basics - Anfänger-Themen 2
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
A Wie bekomme ich zwei Strings in eine ArrayList Java Basics - Anfänger-Themen 4
L Eine ArrayList auf gleiche Inhalte prüfen Java Basics - Anfänger-Themen 10
S ArrayList in eine Txt-Datei speichern Java Basics - Anfänger-Themen 3
N XML-Datei in eine ArrayList Java Basics - Anfänger-Themen 6
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
G Die Objekte eine ArrayList sortieren Java Basics - Anfänger-Themen 50
G Eine ArrayList effizient sortieren Java Basics - Anfänger-Themen 5
M Allgemein Array in eine ArrayList überführen? Java Basics - Anfänger-Themen 7
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Kann ich eine jar anschauen wie sie gecoded wurde? Java Basics - Anfänger-Themen 2
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben