Fix exception when removing all entities

This commit is contained in:
AJ Ferguson 2019-12-27 03:03:12 -09:00
parent cc0b3293bf
commit 8efeb3fe25
2 changed files with 10 additions and 14 deletions

View File

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

View File

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