From ff4e5611a767a96acc646e4ea26e2d48f25799c6 Mon Sep 17 00:00:00 2001 From: kuroppoi <68156848+kuroppoi@users.noreply.github.com> Date: Wed, 2 Jun 2021 00:13:00 +0200 Subject: [PATCH] Implemented respawning --- .../gameserver/entity/player/Player.java | 13 +++++++++++++ .../gameserver/server/NetworkRegistry.java | 2 ++ .../server/requests/RespawnRequest.java | 16 ++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 gameserver/src/main/java/brainwine/gameserver/server/requests/RespawnRequest.java diff --git a/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java b/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java index 00ec473..cba1f54 100644 --- a/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java +++ b/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java @@ -56,6 +56,7 @@ import brainwine.gameserver.server.requests.BlocksIgnoreRequest; import brainwine.gameserver.server.requests.BlocksRequest; import brainwine.gameserver.util.MapHelper; import brainwine.gameserver.util.MathUtils; +import brainwine.gameserver.util.Vector2i; import brainwine.gameserver.zone.Chunk; import brainwine.gameserver.zone.MetaBlock; import brainwine.gameserver.zone.Zone; @@ -109,6 +110,7 @@ public class Player extends Entity implements CommandExecutor { private String clientVersion; private Placement lastPlacement; private Item heldItem = Item.AIR; + private Vector2i spawnPoint = new Vector2i(0, 0); private int teleportX; private int teleportY; private long lastHeartbeat; @@ -201,6 +203,8 @@ public class Player extends Entity implements CommandExecutor { y = spawn.getY(); } + spawnPoint.setX((int)x); + spawnPoint.setY((int)y); sendMessage(new ConfigurationMessage(id, getClientConfig(), GameConfiguration.getClientConfig(this), zone.getClientConfig(this))); sendMessage(new ZoneStatusMessage(zone.getStatusConfig())); sendMessage(new ZoneStatusMessage(zone.getStatusConfig())); @@ -365,6 +369,15 @@ public class Player extends Entity implements CommandExecutor { sendMessage(new PlayerPositionMessage((int)x, (int)y + 1)); } + public void respawn() { + int x = spawnPoint.getX(); + int y = spawnPoint.getY(); + sendMessage(new PlayerPositionMessage(x, y)); + sendMessage(new HealthMessage(health)); + sendMessageToPeers(new EntityStatusMessage(this, EntityStatus.REVIVED)); + zone.sendMessage(new EffectMessage(x, y, "spawn", 20)); + } + /** * Teleports the player to the specified position. * diff --git a/gameserver/src/main/java/brainwine/gameserver/server/NetworkRegistry.java b/gameserver/src/main/java/brainwine/gameserver/server/NetworkRegistry.java index 4834369..e6fb412 100644 --- a/gameserver/src/main/java/brainwine/gameserver/server/NetworkRegistry.java +++ b/gameserver/src/main/java/brainwine/gameserver/server/NetworkRegistry.java @@ -50,6 +50,7 @@ import brainwine.gameserver.server.requests.HeartbeatRequest; import brainwine.gameserver.server.requests.InventoryMoveRequest; import brainwine.gameserver.server.requests.InventoryUseRequest; import brainwine.gameserver.server.requests.MoveRequest; +import brainwine.gameserver.server.requests.RespawnRequest; import brainwine.gameserver.server.requests.StatusRequest; import brainwine.gameserver.server.requests.TransactionRequest; import brainwine.gameserver.server.requests.ZoneChangeRequest; @@ -90,6 +91,7 @@ public class NetworkRegistry { registerRequest(23, ZoneSearchRequest.class); registerRequest(24, ZoneChangeRequest.class); registerRequest(25, BlocksIgnoreRequest.class); + registerRequest(26, RespawnRequest.class); registerRequest(41, TransactionRequest.class); registerRequest(45, DialogRequest.class); registerRequest(47, ConsoleRequest.class); diff --git a/gameserver/src/main/java/brainwine/gameserver/server/requests/RespawnRequest.java b/gameserver/src/main/java/brainwine/gameserver/server/requests/RespawnRequest.java new file mode 100644 index 0000000..01faf75 --- /dev/null +++ b/gameserver/src/main/java/brainwine/gameserver/server/requests/RespawnRequest.java @@ -0,0 +1,16 @@ +package brainwine.gameserver.server.requests; + +import org.msgpack.type.Value; + +import brainwine.gameserver.entity.player.Player; +import brainwine.gameserver.server.PlayerRequest; + +public class RespawnRequest extends PlayerRequest { + + public Value status; + + @Override + public void process(Player player) { + player.respawn(); + } +}