Minecraft IntelliJ Plugin?

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.

Woher ich das weiß:eigene Erfahrung

Shadow352 
Beitragsersteller
 24.05.2025, 21:48

Danke für die Hilfe ich werde es gleich direkt probieren

Shadow352 
Beitragsersteller
 25.05.2025, 19:27

Hallo

Das macht für mich leider trotzdem keinen Sinn. Könntest du mir es evtl. etwas genauer erklären? Das wäre super!

Miba13  25.05.2025, 19:47
@Shadow352

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);

}

Shadow352 
Beitragsersteller
 25.05.2025, 19:49
@Miba13

Vielen Dank!

Das macht jetzt etwas mehr Sinn für mich es zu verstehen.

Shadow352 
Beitragsersteller
 25.05.2025, 20:01
@Miba13

Jetzt bekomme ich diesen Fehler hier: Cannot resolve method 'Premium1' in 'Premium1'

Shadow352 
Beitragsersteller
 25.05.2025, 20:13
@Shadow352

Wenn ich das in der On-Enable methode einfüge fünktioniert die on-disable nicht mehr?

Shadow352 
Beitragsersteller
 26.05.2025, 18:12
@Miba13

Hallo.

Ich habe alles genau so eingetragen, wie du es mir gesagt hast. Aber in der "On-Enable" Methode, wenn alles eingetragen ist, wird die gesamte "On-Disable" Methode als Fehler markiert. Bitte hilf mir

Miba13  26.05.2025, 18:27
@Shadow352

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.

Shadow352 
Beitragsersteller
 26.05.2025, 18:36
@Miba13
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!");
    }
}


Miba13  26.05.2025, 18:44
@Shadow352

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

Shadow352 
Beitragsersteller
 26.05.2025, 18:46
@Miba13

Danke bro. Einfach nur bester Ehrenmann den es auf der Welt gibt!

Shadow352 
Beitragsersteller
 26.05.2025, 19:26
@Miba13

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...?

Miba13  26.05.2025, 19:30
@Shadow352

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!

Shadow352 
Beitragsersteller
 26.05.2025, 19:32
@Miba13

Können wir evtl im Discord reden? Oder TS?

Shadow352 
Beitragsersteller
 26.05.2025, 19:34
@Miba13

Bzw. bitte erst morgen, da ich jetzt offline gehe

Shadow352 
Beitragsersteller
 26.05.2025, 19:37
@Miba13

Das Plugin funktioniert jetzt gar nicht mehr...?

Shadow352 
Beitragsersteller
 26.05.2025, 19:38
@Shadow352

Es wird weder geladen, noch sehe ich den Command Ingame

Shadow352 
Beitragsersteller
 26.05.2025, 19:39
@Miba13

Es wird weder geladen, noch sehe ich den Command Ingame