Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-09-08 20:43:04 +02:00
Fix exception when removing all entities
Dieser Commit ist enthalten in:
Ursprung
cc0b3293bf
Commit
8efeb3fe25
@ -25,10 +25,7 @@
|
||||
|
||||
package org.geysermc.connector.network.session.cache;
|
||||
|
||||
import it.unimi.dsi.fastutil.longs.Long2LongMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.longs.*;
|
||||
import lombok.Getter;
|
||||
import org.geysermc.connector.entity.Entity;
|
||||
import org.geysermc.connector.entity.PlayerEntity;
|
||||
@ -45,9 +42,9 @@ public class EntityCache {
|
||||
private GeyserSession session;
|
||||
|
||||
@Getter
|
||||
private Long2ObjectMap<Entity> entities = new Long2ObjectOpenHashMap<>();
|
||||
private Long2LongMap entityIdTranslations = new Long2LongOpenHashMap();
|
||||
private Map<UUID, PlayerEntity> playerEntities = new HashMap<>();
|
||||
private Long2ObjectMap<Entity> entities = Long2ObjectMaps.synchronize(new Long2ObjectOpenHashMap<>());
|
||||
private Long2LongMap entityIdTranslations = Long2LongMaps.synchronize(new Long2LongOpenHashMap());
|
||||
private Map<UUID, PlayerEntity> playerEntities = Collections.synchronizedMap(new HashMap<>());
|
||||
private Map<UUID, Long> bossbars = new HashMap<>();
|
||||
|
||||
@Getter
|
||||
|
@ -6,6 +6,9 @@ import org.geysermc.connector.entity.Entity;
|
||||
import org.geysermc.connector.network.session.GeyserSession;
|
||||
import org.geysermc.connector.network.translators.TranslatorsInit;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DimensionUtils {
|
||||
public static void switchDimension(GeyserSession session, int javaDimension, boolean fake) {
|
||||
int bedrockDimension = javaToBedrock(javaDimension);
|
||||
@ -15,13 +18,9 @@ public class DimensionUtils {
|
||||
|
||||
Vector3i pos = Vector3i.from(0, 32767, 0);
|
||||
|
||||
//FIXME: chance of exception while iterating
|
||||
try {
|
||||
for (Entity entity : session.getEntityCache().getEntities().values()) {
|
||||
session.getEntityCache().removeEntity(entity, false);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
List<Entity> entities = new ArrayList<>(session.getEntityCache().getEntities().values());
|
||||
for (Entity entity : entities) {
|
||||
session.getEntityCache().removeEntity(entity, false);
|
||||
}
|
||||
|
||||
ChangeDimensionPacket changeDimensionPacket = new ChangeDimensionPacket();
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren