Skip to content

Commit

Permalink
schedule respawn event
Browse files Browse the repository at this point in the history
  • Loading branch information
HSGamer committed Feb 2, 2025
1 parent d1c73e5 commit accbf2a
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions src/main/java/me/hsgamer/morefoworld/listener/RespawnListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import io.github.projectunified.minelib.plugin.listener.ListenerComponent;
import me.hsgamer.morefoworld.DebugComponent;
import me.hsgamer.morefoworld.config.RespawnConfig;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.entity.PlayerDeathEvent;

import java.util.Optional;

Expand All @@ -29,18 +32,36 @@ public void load() {
}

@EventHandler
public void onRespawn(PlayerRespawnEvent event) {
debug.debug("Respawn: " + event.getPlayer().getName() + " in " + event.getRespawnLocation());
debug.debug("Reason: " + event.getRespawnReason());

Optional.ofNullable(event.getPlayer().getLastDeathLocation())
.map(Location::getWorld)
.flatMap(plugin.get(RespawnConfig.class)::getRespawnWorld)
.ifPresent(world -> {
Location respawnLocation = event.getRespawnLocation();
respawnLocation.setWorld(world);
event.setRespawnLocation(respawnLocation);
debug.debug("Set Respawn to " + world);
});
public void onDeath(PlayerDeathEvent event) {
Player player = event.getEntity();
Location location = player.getLocation();
debug.debug("Death: " + player.getName() + " at " + location);

World world = location.getWorld();
Optional<World> optionalRespawnWorld = plugin.get(RespawnConfig.class).getRespawnWorld(world);
if (optionalRespawnWorld.isEmpty()) return;
World respawnWorld = optionalRespawnWorld.get();
Location respawnLocation = respawnWorld.getSpawnLocation();
debug.debug("Set Respawn to " + respawnWorld);

RespawnRunnable runnable = new RespawnRunnable(player, respawnLocation);
player.getScheduler().runAtFixedRate(plugin, t -> runnable.run(), null, 0, 1);
debug.debug("Scheduled Respawn");
}

private class RespawnRunnable implements Runnable {
private final Player player;
private final Location location;

private RespawnRunnable(Player player, Location location) {
this.player = player;
this.location = location;
}

@Override
public void run() {
if (player.isDead()) return;
Bukkit.getRegionScheduler().execute(plugin, location, () -> player.teleportAsync(location));
}
}
}

0 comments on commit accbf2a

Please sign in to comment.