Minecraft IntelliJ Plugin?
Ich programmiere momentan ein Plugin. Es soll ein Premium Plugin werden, dass man /Premium (user) machen kann und der Spieler dann den Premium Rang bekommt. Aber ich weiß nicht wie ich den Spieler da miteinbringen kann. Ich habe die Luckperms API bereits installiert.
1 Antwort
Hallo
Um einem Spieler mit LuckPerms per Befehl einen Premium-Rang zu geben, musst du in deinem Plugin den Spieler-Parameter aus dem Command abfangen und dann über die LuckPerms API dem Spieler den Rang hinzufügen. Beispiel: Im Command-Executor holst du den Spieler-Objekt via Bukkit.getPlayer(args[0]) (wenn der Spielername als Argument kommt). Dann nutzt du LuckPerms, um den Benutzer zu laden und ihm den Rang zu geben.
Kurz gesagt:
1. Spieler holen: Player target = Bukkit.getPlayer(args[0]);
2. LuckPerms User holen: User user = luckPerms.getUserManager().loadUser(target.getUniqueId()).join();
3. Gruppe hinzufügen: user.data().add(Node.builder("group.premium").build());
4. User speichern: luckPerms.getUserManager().saveUser(user);
Damit kannst du dann im Command /premium (spielername) den Rang setzen. Wichtig ist, dass du immer prüfst, ob der Spieler online ist und ob der Command richtig übergeben wurde.
Danke für die Hilfe ich werde es gleich direkt probieren
Hallo!
Kein Problem, ich erkläre dir das nochmal Schritt für Schritt – auch mit einem Beispielcode:
Ziel: Wenn jemand /premium Spielername eingibt, soll dieser Spieler den „premium“-Rang bekommen. Du nutzt dazu LuckPerms.
1. Command registrieren
Zuerst brauchst du in deiner plugin.yml:
commands:
premium:
description: Gibt einem Spieler den Premium-Rang
usage: /premium <spielername>
2. CommandExecutor-Klasse
Jetzt kommt der Code für deinen Command:
public class PremiumCommand implements CommandExecutor {
private final LuckPerms luckPerms;
public PremiumCommand(LuckPerms luckPerms) {
this.luckPerms = luckPerms;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 1) {
sender.sendMessage("Bitte nutze: /premium <spielername>");
return true;
}
Player target = Bukkit.getPlayer(args[0]); // Versuche, den Spieler zu bekommen
if (target == null) {
sender.sendMessage("Der Spieler ist nicht online.");
return true;
}
// LuckPerms-User laden
UUID uuid = target.getUniqueId();
luckPerms.getUserManager().loadUser(uuid).thenAcceptAsync(user -> {
// Rang hinzufügen
user.data().add(Node.builder("group.premium").build());
// User speichern
luckPerms.getUserManager().saveUser(user);
sender.sendMessage(target.getName() + " hat jetzt den Premium-Rang!");
});
return true;
}
}
3. Registrieren des Commands in deinem Plugin:
In deiner onEnable()-Methode:
getCommand("premium").setExecutor(new PremiumCommand(getLuckPerms()));
Und getLuckPerms() könnte z. B. so aussehen:
private LuckPerms getLuckPerms() {
ServicesManager servicesManager = getServer().getServicesManager();
return servicesManager.load(LuckPerms.class);
}
Wenn ich das in der On-Enable methode einfüge fünktioniert die on-disable nicht mehr?
Kannst du mir bitte den Code von deiner onEnable()- und onDisable()-Methode schicken (inklusive dem Teil, wo du setExecutor() machst)? Dann finde ich den Fehler ganz schnell.
package de.Jayluk.premium;
import de.Jayluk.premium.commands.Premium1;
import net.luckperms.api.LuckPerms;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
public final class Premium extends JavaPlugin {
public static FileConfiguration config;
@Override
public void onEnable() {
saveDefaultConfig();
config = getConfig();
reloadConfig();
getCommand("premium").setExecutor(new Premium1(getLuckPerms()));
// Plugin startup logic
getLogger().info(ChatColor.RED+"Premium wurde aktiviert!");
}
private LuckPerms getLuckPerms() {
}
@Override
public void onDisable() {
// Plugin shutdown logic
getLogger().info(ChatColor.RED+"Premium wurde deaktiviert!");
}
}
Perfekt – danke für den Code. Ich sehe direkt, wo das Problem liegt:
Fehler:
Deine Methode getLuckPerms() hat keinen Rückgabewert, sie ist leer:
Deine Methode getLuckPerms() hat keinen Rückgabewert, sie ist leer:
private LuckPerms getLuckPerms() {
}
Da Java erwartet, dass du hier ein LuckPerms-Objekt zurückgibst, bekommst du einen Fehler – und dadurch denkt IntelliJ, dein Code sei kaputt, was auch die onDisable()-Methode betrifft.
So löst du das Problem:
Ersetze deine getLuckPerms()-Methode durch diese funktionierende Version:
private LuckPerms getLuckPerms() {
return getServer().getServicesManager().load(LuckPerms.class);
}
Damit gibst du korrekt das LuckPerms-Objekt zurück – und der Fehler verschwindet.
Gruß miba
org.bukkit.command.CommandException: Cannot execute command 'premium' in plugin Premium v1.0-Beta - plugin is disabled.
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:37) ~[paper-api-1.21.4-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.command.brigadier.bukkit.BukkitCommandNode$BukkitBrigCommand.run(BukkitCommandNode.java:82) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
at com.mojang.brigadier.context.ContextChain.runExecutable(ContextChain.java:73) ~[brigadier-1.3.10.jar:?]
at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:30) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:13) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
at net.minecraft.commands.execution.UnboundEntryAction.lambda$bind$0(UnboundEntryAction.java:8) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
at net.minecraft.commands.execution.CommandQueueEntry.execute(CommandQueueEntry.java:5) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
at net.minecraft.commands.execution.ExecutionContext.runCommandQueue(ExecutionContext.java:105) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
Ich bins nochmal. Soll das so sein...?
Hey!
Der Fehler bedeutet, dass dein Plugin beim Start nicht korrekt geladen wurde und deshalb deaktiviert ist – deswegen kannst du den /premium-Befehl nicht nutzen.
Typischer Grund: Deine getLuckPerms()-Methode gibt null zurück, weil LuckPerms noch nicht geladen war, als dein Plugin gestartet ist.
So kannst du das beheben:
1. Füge das in deine plugin.yml ein:
depend: [LuckPerms]
Damit wird sichergestellt, dass dein Plugin erst nach LuckPerms geladen wird.
2. Überprüfe deine Konsole beim Server-Start.
Dort steht der eigentliche Fehler (z. B. „NullPointerException in Zeile XY“). Wenn du willst, kannst du mir den Abschnitt schicken, dann sag ich dir genau, wo das Problem ist.
3. Optional: Prüfe in getLuckPerms() ob null zurückkommt – und deaktiviere dein Plugin sauber, z. B.:
LuckPerms lp = getLuckPerms();
if (lp == null) {
getLogger().severe("LuckPerms wurde nicht gefunden. Plugin wird deaktiviert.");
getServer().getPluginManager().disablePlugin(this);
return;
}
Meld dich einfach, wenn du nicht weiterkommst – helf dir gern weiter!
Es wird weder geladen, noch sehe ich den Command Ingame
Hallo
Das macht für mich leider trotzdem keinen Sinn. Könntest du mir es evtl. etwas genauer erklären? Das wäre super!