Skip to content
Snippets Groups Projects
Commit 02d2d728 authored by Melledy's avatar Melledy
Browse files

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

parent b8614d63
Branches
Tags
No related merge requests found
...@@ -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));
......
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