Commit f28f21b0 authored by Melledy's avatar Melledy
Browse files

Dont deregister scenes if the player is going to tp back into them

parent 711e6eab
...@@ -47,6 +47,7 @@ public class GenshinScene { ...@@ -47,6 +47,7 @@ public class GenshinScene {
private final Set<SpawnDataEntry> spawnedEntities; private final Set<SpawnDataEntry> spawnedEntities;
private final Set<SpawnDataEntry> deadSpawnedEntities; private final Set<SpawnDataEntry> deadSpawnedEntities;
private boolean dontDestroyWhenEmpty;
private int time; private int time;
private ClimateType climate; private ClimateType climate;
...@@ -121,6 +122,14 @@ public class GenshinScene { ...@@ -121,6 +122,14 @@ public class GenshinScene {
this.weather = weather; this.weather = weather;
} }
public boolean dontDestroyWhenEmpty() {
return dontDestroyWhenEmpty;
}
public void setDontDestroyWhenEmpty(boolean dontDestroyWhenEmpty) {
this.dontDestroyWhenEmpty = dontDestroyWhenEmpty;
}
public Set<SpawnDataEntry> getSpawnedEntities() { public Set<SpawnDataEntry> getSpawnedEntities() {
return spawnedEntities; return spawnedEntities;
} }
...@@ -166,7 +175,7 @@ public class GenshinScene { ...@@ -166,7 +175,7 @@ public class GenshinScene {
} }
// Deregister scene if not in use // Deregister scene if not in use
if (this.getEntities().size() <= 0) { if (this.getEntities().size() <= 0 && !this.dontDestroyWhenEmpty()) {
this.getWorld().deregisterScene(this); this.getWorld().deregisterScene(this);
} }
} }
......
...@@ -212,19 +212,29 @@ public class World implements Iterable<GenshinPlayer> { ...@@ -212,19 +212,29 @@ public class World implements Iterable<GenshinPlayer> {
return false; return false;
} }
Integer oldSceneId = null; GenshinScene oldScene = null;
if (player.getScene() != null) { if (player.getScene() != null) {
oldSceneId = player.getScene().getId(); oldScene = player.getScene();
player.getScene().removePlayer(player);
// Dont deregister scenes if the player is going to tp back into them
if (oldScene.getId() == sceneId) {
oldScene.setDontDestroyWhenEmpty(true);
} }
GenshinScene scene = this.getSceneById(sceneId); oldScene.removePlayer(player);
scene.addPlayer(player); }
GenshinScene newScene = this.getSceneById(sceneId);
newScene.addPlayer(player);
player.getPos().set(pos); player.getPos().set(pos);
if (oldScene != null) {
oldScene.setDontDestroyWhenEmpty(false);
}
// Teleport packet // Teleport packet
if (oldSceneId.equals(sceneId)) { if (oldScene == newScene) {
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterGoto, EnterReason.TransPoint, sceneId, pos)); player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterGoto, EnterReason.TransPoint, sceneId, pos));
} else { } else {
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterJump, EnterReason.TransPoint, sceneId, pos)); player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterJump, EnterReason.TransPoint, sceneId, pos));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment