Java / Minecraft-Plugin: Wie kann ich ein Entity public machen?
Hallo, ich programmiere seit einiger Zeit ein Minecraft-Plugin.
Ich bleibe aber gerade bei der Sache stecken, ein Entity zu spawnen. Das hört sich ja leicht an. Aber das Ding ist: Ich will von anderen Klassen darauf zugreifen können.
Ich habe im Internet schon ein bisschen geguckt und habe auch etwas gefunden.
Da gibt es dann aber nochmal ein Problem. Ich habe immer nur Codes gesehen wie:
public static Horse horse = loc.getWorld().spawn(loc, Horse.class);
Das Problem ist: Ich kann dies ja eintragen, aber dann wird nach Neuladen des Plugins das Entity direkt gespawnt. Ich will, dass das Entity erst nach einem Command gespawnt wird, ich es aber trotzdem noch in anderen Klassen / anderen Methoden nutzen kann.
Zusammengefasst: Wie bekomme ich es hin, ein Entity bei einem Command zu spawnen, dass einer Variablen zugeordnet ist (public static Horse horse = ...), die ich von allen Klassen / Methoden nutzen kann und welches nicht direkt nach Neuladen gespawnt wird.
Danke im Voraus!
3 Antworten
Dafür musst du einfach nur die Deklarierung und die Initialisierung aufteilen.
Schreib das in deine Klasse:
public static Horse horse;
Und das in die Command-Methode:
horse = loc.getWorld().spawn(loc, Horse.class);
Dann kannst du von anderen Klassen aus drauf zugreifen per
DeineKlasse.horse
Angenommen du hast die beiden Beispielklassen Spawning und Usage. In der Klasse Spawning befindet sich die Methode spawnHorse. Diese kannst du zu einem beliebigen Zeitpunkt in deinem Plugin aufrufen. Das Pferd wird dann in die statische Variable horse gespeichert, welche vorher deklariert wurde. Wenn du eine Variable erstellen musst, musst du dieser nämlich nicht direkt einen Wert zuweisen.
package com.lezurex.marcus496.plugin;
// import ...
public class Spawning {
public static Horse horse;
public static void spawnHorse() {
Location loc = new Location(...);
horse = loc.getWorld().spawn(loc, Horse.class);
}
}
In einer anderen Klasse, wo du dann auf dein Pferd zugreifen willst, kannst du dies wie folgt. Erst wird das Pferd gespawnt und nachher kann ich über die Klasse Spawning auf das Pferd zugreifen und darauf Methoden aufrufen.
package com.lezurex.marcus496.plugin;
// import ...
public class Usage {
public Usage() {
Spawning.spawnHorse();
Spawning.horse.wasAuchImmer();
}
}
Allerdings ist es immer kritisch, statische Klassenvariablen zu benutzen. Ein besserer Weg wäre zum Beispiel, das Pferd beim Aufruf der Methode zurückzugeben, dies schränkt dann aber auch die Möglichkeiten ein.
Deshalb kannst du auch eine Instanz von deiner Spawning Klasse (oder wie sie bei dir heisst) irgendwo in deinem Plugin in eine Variable speichern und dann mit einem Getter darauf zugreifen.
Du musst innerhalb einer If-Verzweigung deine public method instanzieren. Dann geht das.
Zb (pseudocode-mäßig):
If space = pressed
Spawn horse
Endif.
Jup des hat funktioniert, danke dir :)