mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-27 23:24:39 +00:00
Fix concurrency related error while spawning monsters
This commit is contained in:
parent
2b75cda6df
commit
f0ae673091
@ -144,7 +144,7 @@ public class GenshinScene {
|
|||||||
return this.entities.containsKey(entity.getId());
|
return this.entities.containsKey(entity.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPlayer(GenshinPlayer player) {
|
public synchronized void addPlayer(GenshinPlayer player) {
|
||||||
// Check if player already in
|
// Check if player already in
|
||||||
if (getPlayers().contains(player)) {
|
if (getPlayers().contains(player)) {
|
||||||
return;
|
return;
|
||||||
@ -163,7 +163,7 @@ public class GenshinScene {
|
|||||||
this.setupPlayerAvatars(player);
|
this.setupPlayerAvatars(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePlayer(GenshinPlayer player) {
|
public synchronized void removePlayer(GenshinPlayer player) {
|
||||||
// Remove player from scene
|
// Remove player from scene
|
||||||
getPlayers().remove(player);
|
getPlayers().remove(player);
|
||||||
player.setScene(null);
|
player.setScene(null);
|
||||||
@ -367,7 +367,6 @@ public class GenshinScene {
|
|||||||
entity.setSpawnEntry(entry);
|
entity.setSpawnEntry(entry);
|
||||||
|
|
||||||
toAdd.add(entity);
|
toAdd.add(entity);
|
||||||
this.addEntityDirectly(entity);
|
|
||||||
|
|
||||||
// Add to spawned list
|
// Add to spawned list
|
||||||
this.getSpawnedEntities().add(entry);
|
this.getSpawnedEntities().add(entry);
|
||||||
@ -377,14 +376,15 @@ public class GenshinScene {
|
|||||||
for (GenshinEntity entity : this.getEntities().values()) {
|
for (GenshinEntity entity : this.getEntities().values()) {
|
||||||
if (entity.getSpawnEntry() != null && !visible.contains(entity.getSpawnEntry())) {
|
if (entity.getSpawnEntry() != null && !visible.contains(entity.getSpawnEntry())) {
|
||||||
toRemove.add(entity);
|
toRemove.add(entity);
|
||||||
this.removeEntityDirectly(entity);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toAdd.size() > 0) {
|
if (toAdd.size() > 0) {
|
||||||
|
toAdd.stream().forEach(this::addEntityDirectly);
|
||||||
this.broadcastPacket(new PacketSceneEntityAppearNotify(toAdd, VisionType.VisionBorn));
|
this.broadcastPacket(new PacketSceneEntityAppearNotify(toAdd, VisionType.VisionBorn));
|
||||||
}
|
}
|
||||||
if (toRemove.size() > 0) {
|
if (toRemove.size() > 0) {
|
||||||
|
toRemove.stream().forEach(this::removeEntityDirectly);
|
||||||
this.broadcastPacket(new PacketSceneEntityDisappearNotify(toRemove, VisionType.VisionRemove));
|
this.broadcastPacket(new PacketSceneEntityDisappearNotify(toRemove, VisionType.VisionRemove));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user