• 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!

Config in EventHandler

Goinq

Redstoneengineer
Registriert
18 April 2015
Beiträge
43
Diamanten
315
Hallo,
ich probier grad ein wenig zu programmieren und möchte nun die Config ausprobieren.
Dort habe ich aber noch Schwierigkeiten, die Config von der Main in die EventHandler Klasse zu "übertrage".


Meine Main
Code:
package com.manuel.TestPlugin;



import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public class TestPlugin extends JavaPlugin {
    FileConfiguration config = getConfig();
    @Override
    public void onEnable() {
        config.addDefault("Test", true);
        config.options().copyDefaults(true);
        saveConfig();
       
        this.getCommand("msg").setExecutor(new CommandMsg());
        this.getCommand("fly").setExecutor(new CommandFly());
        this.getCommand("creative").setExecutor(new CommandCreative());
        this.getCommand("survival").setExecutor(new CommandSurvival());
        getServer().getPluginManager().registerEvents(new myListener(), this);

       
    }
   
    public void onDisable() {
       
    }


   
}


Meine EventHandler
Code:
package com.manuel.TestPlugin;


import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;


public class myListener implements Listener {

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        String playerName = event.getPlayer().getDisplayName();
        if(getConfig().getBoolean("Test")) {
        Bukkit.broadcastMessage(ChatColor.GREEN + "+ " + playerName);
        } else {
        Bukkit.broadcastMessage(ChatColor.BLUE + "+ " + playerName);
        }
    }
   

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        String playerName = event.getPlayer().getDisplayName();
        Bukkit.broadcastMessage(ChatColor.RED + "- " + playerName);
    }
   
    @EventHandler
    public void onClick(PlayerEggThrowEvent e) {
        Player player = e.getPlayer();
        player.sendMessage("Hey!");
    }
   
    @EventHandler
    public void playerChatUse(AsyncPlayerChatEvent event) {
        String message = event.getMessage();
        event.setFormat(event.getPlayer().getDisplayName() + " -> " + message);
    }
   
}

Schon mal danke im voraus :D.
 
Registriert
10 Dezember 2017
Beiträge
161
Alter
26
Diamanten
322
Minecraft
DerFrZocker
Um die Config Datei zu "übertragen" gibt es viele Möglichkeiten, die meisten (oder alle?) haben aber eins gemeinsam, du sorgst dafür ,dass deine Listener Class, auf dein Plugin Objekt zugreifen kann und somit auf die getConfig() Methode.

Bevor du aber eines der Wege nimmst, würde ich dir empfehlen, dass du dir "Objekt orientierte Programmieren" kurz OOP anschaust, damit du überhaupt alles verstehst.


Das sind 2 von vielen Methoden wo es gibt.
Methode 1:

In deiner TestPlugin Classe, erstellst du dir eine static instance Field z.b.

Code:
 public static TestPlugin instance = null

und in der onEnable() bzw. schon in der onLoad() Methode schreibst du
Code:
 instance = this;

Somit kannst du in jeder beliebigen andere Classe einfach:
Code:
 TestPlugin.instance.getConfig()


Methode 2:

Du gibst der Listener Classe im Constructor dein TestPlugin Object mit

Code:
private final TestPlugin plugin;
public myListener(TestPlugin plugin){
   this.plugin = plugin;
}

und in deiner TestPlugin Classe dan:

Code:
  getServer().getPluginManager().registerEvents(new myListener(this), this);


Und nun noch ein par andere sachen:
Nach Java Conventions schreibt man package Namen klein und Classen Namen fangen groß an.

So wird aus:
com.manuel.TestPlugin
Code:
com.manuel.testplugin

und aus

public class myListener implements
Code:
public class MyListener implements [Code]
 

Goinq

Redstoneengineer
Registriert
18 April 2015
Beiträge
43
Diamanten
315
Hey,
vielen dank für die Hilfe. Hab die erste Methode probiert und klappt jetzt wunderbar ^^.

Danke auch für die andere Tipps.

Jetzt muss ich nur noch herausfinden wie ich die Farbe der JoinNaricht, bzw. die ganze JoinNaricht in der Config customizen kann. :D

Gruß Manuel.
 

Goinq

Redstoneengineer
Registriert
18 April 2015
Beiträge
43
Diamanten
315
Code:
package com.manuel.goinqsbasics;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin {
   
    public static main instance = null;
   
    FileConfiguration config = getConfig();
   
    public void onEnable(){
       
       
        //Config
        String stringValue = "Hello";
        this.getConfig().set("message", stringValue);
        config.options().copyDefaults(true);
        saveConfig();
       
        //Commands
        this.getCommand("fly").setExecutor(new commandfly());
       
        getServer().getPluginManager().registerEvents(new mylistener(), this);
       
    }

}

Code:
package com.manuel.goinqsbasics;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class mylistener implements Listener {
   
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Bukkit.broadcastMessage(main.instance.getConfig().getString("message"));
    }

}

Ich habe mal das hier probier, hier spuckt er mich dennoch nur Fehler aus.
 
Registriert
10 Dezember 2017
Beiträge
161
Alter
26
Diamanten
322
Minecraft
DerFrZocker
Du musst noch der instance ein Object zuweisen, das machst du entweder in der onEnable() bzw. in der onLoad() Methode.

Code:
    public void onEnable(){
         instance = this; // instance zuweisen

        //Config
        String stringValue = "Hello";
        this.getConfig().set("message", stringValue);
        ...

public class main extends JavaPlugin {
public class mylistener implements Listener {
Java Conventions ...

 
Oben