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

Spigot Kreatur stirbt, Spieler bekommt Naricht & Config.yml im Listener

D

deleted193557

Guest
Hallo Freunde,

wie kann ich es programmieren, dass wenn eine Kreatur von einem Spieler getötet wird, dass der Spieler eine Naricht bekommt?

Lg AdriBloober
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Du schnappst dir das EntityDeathEvent. Damit kannst du die Methode getEntity() aufrufen, welche dir die getötete Kreatur (ein LivingEntity) zurückgibt. Die Methode LivingEntity#getKiller() gibt dir den Spieler zurück, der die Kreatur getötet hat. Hierbei solltest du aber vorsichtig sein, da auch null zurückgegeben werden kann.

Achtung: Wenn die Nachricht nicht erscheinen soll, wenn ein anderer Spieler getötet wird, musst du eben testen, ob dein LivingEntity ein Spieler ist.
 

JavaPSE

Minecrafter
Registriert
8 September 2018
Beiträge
3
Diamanten
300
Du schnappst dir das EntityDeathEvent. Damit kannst du die Methode getEntity() aufrufen, welche dir die getötete Kreatur (ein LivingEntity) zurückgibt. Die Methode LivingEntity#getKiller() gibt dir den Spieler zurück, der die Kreatur getötet hat. Hierbei solltest du aber vorsichtig sein, da auch null zurückgegeben werden kann.

Achtung: Wenn die Nachricht nicht erscheinen soll, wenn ein anderer Spieler getötet wird, musst du eben testen, ob dein LivingEntity ein Spieler ist.

Dasselbe wollte ich eben schreiben aber du warst schneller :D
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Da gibt's zwei grundlegende Herangehensweise.
1. Über ein statisches Feld

java:
private static MyMainClass instance; // Dein statisches Feld

public static MyMainClass getInstance() { // Die Methode, die du nun von "überall" aufrufen kannst
    return instance;
}

@Override
public void onEnable() {
    instance = this; // hier weist du deinem statischen Feld die aktuelle Instanz zu
}

// Im Listener
...
public void method() {
    MyMainClass.getInstance().getConfig()
}
...

2. Mithilfe eines Konstruktors

java:
// In deinem Listener
private MyMainClass main;

public MyListener(MyMainClass main) {
    this.main = main; // dem Feld "main" deine übergebene Instanz zuweisen
}

public void method() {
    main.getConfig() ...
}

// In deiner Main-Klasse

@Override
public void onEnable() {                                     //v hier übergibst du deine aktuelle Instanz
    Bukkit.getPluginManager().registerListeners(new MyListener(this), this);
}


Natürlich kannst du anstatt deiner Main-Klasse auch immer nur dein FileConfiguration-Objekt verfügbar machen.
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Code:
File file = new File("plugins/NameDesOrdners/config.yml");
FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);

//Tu was immer du auch tun magst
cfg.get...
cfg.set...
cfg.save...
Das würde ich nicht empfehlen.
  1. Im Normalfall würde das zwar funktionieren, man kann aber den Pfad zu den Plugins in Spigot anpassen. Somit würde diese Variante keine Datei mehr finden.
  2. Die Datei nochmal in den Arbeitsspeicher zu laden (und das je nach Implementierung vielleicht sogar bei jedem Aufruf einer Methode oder so, ist einfach nicht notwendig, da man eine gecachete Config ja bereits hat.
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
java:
ItemStack stack = new ItemStack(Material.valueOf(string));

Falls du auch eine Anzahl an Items brauchst, würde ich dir aber empfehlen, ein bisschen was über ConfigurationSerializable herauszufinden, das implementiert ItemStack nämlich. Heißt kurzgefasst: Du kannst mit FileConfiguration#set("path.to.stack", stack) und FileConfiguration#getItemStack("path.to.stack") ganz einfach jede Menge Arbeit sparen.
 
Oben