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

RespawnListener bessere Lösung gesucht..

AconTM

Schafhirte
Registriert
15 Juni 2015
Beiträge
118
Alter
29
Diamanten
260
Minecraft
AconTM
Guten morgen,

ich arbeite aktuell daran für meinen Server einige Public Plugins zu ersetzen und selbst zu schreiben.
Aktuell sitze ich noch an ein paar simplen Funktionen wie z.b das Teleportieren zum Spawn nach dem Tot..
Die Methode die ich aktuell benutze funktioniert soweit auch, jedoch ist man für 1 Tick eben am Worldspawn..
Hat jemand eventuell eine Besser Lösung?


Code:
    @EventHandler(priority=EventPriority.LOWEST)
    public void onPlayerRespawn(PlayerRespawnEvent e) {
       
        Player p = e.getPlayer();
       
        FileConfiguration cfg = Main.getPlugin().getConfig();
        World world = Bukkit.getWorld(cfg.getString("Spawn.World"));
        double x = cfg.getDouble("Spawn.X");
        double y = cfg.getDouble("Spawn.Y");
        double z = cfg.getDouble("Spawn.Z");
        float yaw = (float) cfg.getDouble("Spawn.Yaw");
        float pitch = (float) cfg.getDouble("Spawn.Pitch");
       
        Location loc = new Location(world, x, y, z, yaw, pitch);
       
        if(p instanceof Player) {
            Bukkit.getScheduler().runTaskLater(Main.getPlugin(), () -> p.teleport(loc), 0L);
        }
    }


Lg. AconTM
 

AconTM

Schafhirte
Registriert
15 Juni 2015
Beiträge
118
Alter
29
Diamanten
260
Minecraft
AconTM
@BlackHole jeder andere der grad erst anfängt sich das beizubringen hätte jetzt die Rückfrage
gestellt "Und wie geht das?!?!??!11elf" ^^ Wenn du helfen willst wäre ein Beispiel für die Lösung
gut gewesen :p

Hier die Lösung die bei mir funzt für alle die das Problem auch haben sollten:

Code:
    @EventHandler
    public void onPlayerRespawn(PlayerRespawnEvent e) {
      
        FileConfiguration cfg = Main.getPlugin().getConfig();
        World world = Bukkit.getWorld(cfg.getString("Spawn.World"));
        double x = cfg.getDouble("Spawn.X");
        double y = cfg.getDouble("Spawn.Y");
        double z = cfg.getDouble("Spawn.Z");
        float yaw = (float) cfg.getDouble("Spawn.Yaw");
        float pitch = (float) cfg.getDouble("Spawn.Pitch");
      
        Location loc = new Location(world, x, y, z, yaw, pitch);
      
        e.setRespawnLocation(loc);
    }


PS: Für diese Lösung ist es nötig ein Main Singelton in der Main Klasse zu haben.
Hier sind noch die nötigen Codezeilen:

Code:
private static Main plugin;

public void onEnable() {
        plugin = this;
    }

    public static Main getPlugin() {
        return plugin;
    }


Alles weitere ist nur simples Config auslesen ^^
 
Zuletzt bearbeitet:

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
eder der diese Frage gestellt hätte sollte mit einem Klein Projekt und nicht so etwas wie einem plugin anfangen.
Plugins sind hervorragende kleine Projekte, je nachdem was man denn machen will.
Man sieht auch seine eigenen Erfolge im Spiel sehr schnell und das motiviert entsprechend.

Außerdem ist es ja nicht selbstverständlich, dass man die gesamte Bukkit API im Kopf hat.
Dafür ist allerdings die automatische Vervollständigung der IDE eine große Hilfe, wenn man grade nicht den exakten Namen kennt, da die meisten Methoden bestenfalls selbsterklärend sind vom Namen her.

@AconTM
Ich finde es prima, dass du deine Lösungen mit uns teilst und für die Nachwelt hinterlässt. ;)
Auf die Spur kommen leider nur Wenige, die hier nach Hilfe fragen...
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Das war eher auf die Frage hier gemeint: "Und wie geht das?!?!??!11elf"
Wer das Fragt, wird nie programmieren können. Zum programmieren gehört auch,
die Fähigkeit sich solche Kleinigkeiten selbst erarbeiten zu können.
(Die Frage from TE ist nicht gemeint, sondern die Tatsache zu fragen nachdem man den Lösungsweg bekommen hat)

Deswegen finde ich Bukkit auch eher schlecht als Recht zum lernen,
viel zu umfangreiche API, viel zu viel für einen Java/Programmier Neuling.
Man muss erstmal die ganzen Konzepte lernen. Und wenn man seinen Erfolg sehen will. Gibt es Java Applets. (Bis java 8)
Zu denen es so schön viele und auch noch qualitativ hochwertige Tutorials gibt, und man sieht Änderungen sofort.
Vor allem dadurch dass sie viel spielraum zum rumprobieren bieten, (ohne dass alles andere gleich kaput geht) kann ich das lernen mit Java Applets am meisten empfehlen.

Und wenn es etwas mit Minecraft sein soll, dann eher Mods, da lernt man die Konzepte von Klassen, vererbung und co. eher als bei Bukkit was ja beinahe vollständig Event Gesteuert ist. (Forge ja auch, aber man erstellt eher eigene Klassen und lässt diese von etwas erben.)
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Hmm... Forge scheint mir im Vergleich zu Bukkit eine ganz andere Liga zu sein.

Bukkit Plugins sind recht schnell zusammengeschaufelt, mal abgesehen davon ob sie funktionieren oder nicht, während Forge Mods doch eher anspruchsvoller sind und man weitaus mehr beachten muss. Mods sind nicht ganz so "plug & play" wie Plugins.

Allerdings ist es im Bezug auf Minecraft selbst weitaus lehrreicher als die Bukkit API, die sich ja weitestgehend vom Spielcode selbst distanziert hat über die Jahre.

Alles in allem macht aber beides tierischen Spaß, sobald man den Dreh raus hat! :)
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
@BlackHole
Code:
  @EventHandler
  public void onPlayerRespawn(PlayerRespawnEvent e) {
  FileConfiguration cfg = Main.getPlugin().getConfig();
  World world = Bukkit.getWorld(cfg.getString("Spawn.World"));
  double x = cfg.getDouble("Spawn.X");
  double y = cfg.getDouble("Spawn.Y");
  double z = cfg.getDouble("Spawn.Z");
  float yaw = (float) cfg.getDouble("Spawn.Yaw");
  float pitch = (float) cfg.getDouble("Spawn.Pitch");
  Location loc = new Location(world, x, y, z, yaw, pitch);
  e.setRespawnLocation(loc);
  }
Passt schon fast nicht mehr zum Thema, aber weil ich es selber gerne nutze und das Gefühl habe, dass viele einfach nicht davon wissen: Locations sind ConfigurationSerializable. Damit könnte man deinen Code nochmal deutlich vereinfachen:
Code:
  @EventHandler
  public void onPlayerRespawn(PlayerRespawnEvent e) {
  FileConfiguration cfg = Main.getPlugin().getConfig();
  Location loc = (Location) cfg.get("Spawn");
  e.setRespawnLocation(loc);
  }


Zum Speichern verwendent man einfach:
Code:
cfg.set("Spawn", loc);
// speichern natürlich nicht vergessen
 
Zuletzt bearbeitet:
Oben