forked from GeyserMC/Geyser
		
	Fix exception when removing all entities
This commit is contained in:
		
							parent
							
								
									cc0b3293bf
								
							
						
					
					
						commit
						8efeb3fe25
					
				
					 2 changed files with 10 additions and 14 deletions
				
			
		|  | @ -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,14 +18,10 @@ public class DimensionUtils { | |||
| 
 | ||||
|         Vector3i pos = Vector3i.from(0, 32767, 0); | ||||
| 
 | ||||
|         //FIXME: chance of exception while iterating | ||||
|         try { | ||||
|             for (Entity entity : session.getEntityCache().getEntities().values()) { | ||||
|         List<Entity> entities = new ArrayList<>(session.getEntityCache().getEntities().values()); | ||||
|         for (Entity entity : entities) { | ||||
|             session.getEntityCache().removeEntity(entity, false); | ||||
|         } | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
| 
 | ||||
|         ChangeDimensionPacket changeDimensionPacket = new ChangeDimensionPacket(); | ||||
|         changeDimensionPacket.setDimension(bedrockDimension); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue