• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Plugin funktioniert nicht..kein Fehler in der Console

Zentix_HD

Kuhfänger
Registriert
28 Dezember 2016
Beiträge
62
Alter
28
Diamanten
302
Hey,

ich code erst seit Kurzem und habe mich an ein Teil meines Team-System-Plugins gesetzt, der einen Login implementiert für ein paar Befehle, die man erst eben dann nutzen können soll.

Ich habe das wie folgt überlegt/umgesetzt:

Wenn man joint, landet man in einer ArrayList. Alle die in der Liste sind, können gewisse Befehle nicht ausführen (PlayerCommandPreprocessEvent). Wenn man nun /team login <passwort> eingibt, loggt man sich ein. Nun kann man diese Befehle nutzen, da man aus der ArrayListe fällt. (Habe natürlich des so gemacht das nur Leute mit einer gewissen Perm in der Array landen)

Hier meine Klassen:

Main:
Code:
package de.jan.main;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;


public class Main extends JavaPlugin {

    public Inventory settings = null;
    public Inventory items = null;
    public static Main main;
   
    public ArrayList<String> waiting = new ArrayList<>();  
    public FileManager fm;

    @Override
    public void onEnable() {

    main = Main.this;
    this.getServer().getPluginManager().registerEvents((Listener) new JoinMessage(), this);
    this.getServer().getPluginManager().registerEvents((Listener) new CMDEvent(), this);
    this.getServer().getPluginManager().registerEvents((Listener) new QuitMessage(), this);
    this.getServer().getPluginManager().registerEvents((Listener) new SettingsListener(), this);
    this.getCommand("settings").setExecutor(new CommandSettings(this));
    this.getCommand("items").setExecutor(new CommandItems(this));
    this.getServer().getPluginManager().registerEvents((Listener) new ItemsListener(), this);
    this.getCommand("team").setExecutor(new CommandTeam(this));

    }

    public void onDiseable() {

    for(String all : waiting) {
        Bukkit.getPlayer(all).kickPlayer("");
    }
    }

}

FileManager(um die Passwörter zu speichern):
Code:
package de.jan.main;

import java.io.File;
import java.io.IOException;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

public class FileManager {

    public File f = new File(Main.main.getDataFolder(), "Passwort.yml");
    public FileConfiguration cfg = YamlConfiguration.loadConfiguration(f);
   
    public boolean isregistered(String uuid) {
    if(cfg.contains(uuid)) {
       return true;
    }
   
    return false;
    }
   
    public void saveCfg() {
    try {
        cfg.save(f);
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

CommandTeam(der login, register,changepw Befehl, als sub von /team... also /team login etc.):
Code:
package de.jan.main;

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

public class CommandTeam implements CommandExecutor {

    private Main plugin;

    public CommandTeam(Main m) {
    plugin = m;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (sender instanceof Player) {
        Player p = (Player) sender;
        if (args[0].equalsIgnoreCase("login")) {
        if (!plugin.waiting.contains(p.getName())) {
            p.sendMessage("§eDu bist bereits eingeloggt!");
            return true;
        }
        if (plugin.fm.isregistered(p.getUniqueId().toString())) {
            String pw = args[1];
            if (plugin.fm.cfg.get(p.getUniqueId().toString()).equals(pw)) {
            plugin.waiting.remove(p.getName());
            p.sendMessage("§3Du bist nun eingeloggt!");
            }
        } else {
            p.sendMessage("§eDu musst dich erst registrieren!");
            p.sendMessage(
                "§eSolltest du nicht wissen, wie das geht: Frage die Teamleitung oder schaue im Forum!");
        }
        }
        if (args[0].equalsIgnoreCase("register")) {
        if (args.length == 3) {
            if (args[1] == args[2]) {
            plugin.fm.cfg.set(p.getUniqueId().toString(), args[2]);
            plugin.fm.saveCfg();
            p.sendMessage("§3Du bist nun im Team-System registriert...willkommen!");
            }

        } else {
            p.sendMessage("§eProbiers mal mit /team register <passwort> <passwort>!");
        }
        } else if (args[0].equalsIgnoreCase("changepw")) {
        if (!plugin.waiting.contains(p.getName())) {
            if (args.length == 3) {
            if (args[1] == args[2]) {
                plugin.fm.cfg.set(p.getUniqueId().toString(), args[2]);
                plugin.fm.saveCfg();
                p.sendMessage("§3Du hast nun dein Passwort geändert!!");
            }

            } else {
            p.sendMessage("§eProbiers mal mit /team changepw <passwort> <passwort>!");
            }
        }
        }
    }
    return false;
    }

}

JoinEvent:
Code:
package de.jan.main;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class JoinMessage implements Listener {

    @EventHandler
    public void onJoinEvent(PlayerJoinEvent e) {
    Player p = e.getPlayer();
    if (!Main.main.waiting.contains(p.getName())) {
        Main.main.waiting.add(e.getPlayer().getName());
    }
    p.sendMessage(ChatColor.BLACK + "[" + ChatColor.RED + "Varos" + ChatColor.BLACK + "]" + ChatColor.GREEN
        + "Moin, " + ChatColor.YELLOW + p.getPlayer().getDisplayName() + ChatColor.GREEN + "!");
    if (Main.main.fm.isregistered(e.getPlayer().getUniqueId().toString())) {
        p.sendMessage("§eDu bist nich in das Teamsystem eingeloggt!");
    } else {
        p.sendMessage("§eBecor du das Team-System nutzen kannst, musst du dich registrieren!");
    }
    }
}

CommandBlockEvent:
Code:
package de.jan.main;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;

public class CMDEvent implements Listener {
    @EventHandler
    public void onCMD(PlayerCommandPreprocessEvent e) {
    Player p = e.getPlayer();
    String[] cmd = e.getMessage().substring(1).split(" ");
    if (p.hasPermission("Varos.Team")) {
        if (Main.main.waiting.contains(e.getPlayer().getName())) {
        if (cmd[0].startsWith("settings") || cmd[0].startsWith("items")) {
            e.setCancelled(true);
            p.sendMessage("§eDu musst dich erst im Team-System einloggen!");
        }
        }
    }
    }
}

plugin.yml:
Code:
name: VarosTeam
version: 0.1
author: Jan
main: de.jan.main.Main
commands:
  settings:
    description: Settings Command
    usage: /<command>
    permission: Varos.Team
  items:
    description: Items Command
    usage: /<command>
    permission: Varos.Team
  team:
    description: Team Befehl
    usage: /<command>
    permission: Varos.Team

Ich bekomme beim reload keinen Fehler. Auch Eclipse haut mir nix raus. Aber sowohl bei /team <subcmd> , also dem Command , als auch beim JoinEvent hauts mir ne ordentliche NullPointerExeption raus! Ich weis aber leider nicht wo bei mir der Denkfehler oder Codefehler liegt... und es erstellt keine passwort.yml!


Ich würde mich freuen, wenn mir jemand hilft... Ja ich bin Anfänger, aber ich möchte es lernen und würde mich über Hilfe sehr freuen. Wir haben alle ja mal klein angefangen. Eine kleine Erklärung wäre dazu auch net, damit ich es in Zukunft verstanden habe und es auf anderes umsetzten kann....


LG
-Zentix_HD
 

petomka

Redstoneengineer
Registriert
8 Oktober 2012
Beiträge
41
Alter
26
Diamanten
322
Wäre hilfreich, wenn du deine "ordentlichen NullPointerExceptions" hier mal reinpastest, entweder direkt hier oder haste- bzw. pastebin, da nicht glaube jemand möchte sich deine Klassen ansehen, reindenken und vermuten, was denn null sein könnte.
 

Zentix_HD

Kuhfänger
Registriert
28 Dezember 2016
Beiträge
62
Alter
28
Diamanten
302
Hey @petomka ,

das ist die NullPointer von Joinen: https://pastebin.com/wjqdaNAf

und das von /team login: https://pastebin.com/LvRcbGjL

und bei /team register: Fällt mir gerade auf fehlt nur wo ein Return xD das finde ich aber selber denke ich...

und bei /team changepw: Fällt mir gerade auf fehlt nur wo ein Return xD das finde ich aber selber denke ich...


LG
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Eine kleine Bitte meinerseits: Speicher die Passwörter nicht im Klartext...
Ein Hash des Passworts wäre angebrachter.

Zur Frage:
In der Klasse "JoinMessage" in Zeile 19 tritt deine Nullpointer Ex. auf.
Auf den ersten Blick (bin müde, Vorsicht!) würde ich sagen, dass dein FileManager (fm Field) null ist.
Wo erstellst du denn eine Instanz davon?
 

petomka

Redstoneengineer
Registriert
8 Oktober 2012
Beiträge
41
Alter
26
Diamanten
322
Die erste NPE die beim Join auftritt, verrät dir, dass etwas mit Zeile 19 in der JoinMessage Klasse nicht in Ordnung ist:
Java:
if (Main.main.fm.isregistered(e.getPlayer().getUniqueId().toString())) {
Ich tippe einfach mal, das der FileManager fm (Tipp: besserer Variablenname der weniger kryptisch ist: "fileManager") null ist, da dieser in der Hauptklasse nicht instanziert wird. Daraus resultiert wahrscheinlich auch dein Problem, dass deine Dateien nicht erstellt werden.

Die zweite NPE verrät, dass in der CommandTeam-Klasse Zeile 25 nicht in Ordnung ist:
Java:
if (plugin.fm.isregistered(p.getUniqueId().toString())) {
Hier wird ebenfalls der "fm" gebraucht, der aber noch null ist. Folglich kriegst du eine Exception.

Damit du das in Zukunft selbst lösen kannst, habe ich dir hier mal beispielhaft das Relevante der NPE markiert:
http://prntscr.com/izh4oh
 
Oben