3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-26 00:00:41 +01:00

Fix exception when removing all entities

Dieser Commit ist enthalten in:
AJ Ferguson 2019-12-27 03:03:12 -09:00
Ursprung cc0b3293bf
Commit 8efeb3fe25
2 geänderte Dateien mit 10 neuen und 14 gelöschten Zeilen

Datei anzeigen

@ -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

Datei anzeigen

@ -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();