diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index 7e808a63b..46eefed3b 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -12,10 +12,8 @@ */ package de.bixilon.minosoft.data.world -import com.google.common.collect.HashBiMap import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.entities.block.BlockEntity -import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.mappings.Dimension import de.bixilon.minosoft.data.mappings.biomes.Biome import de.bixilon.minosoft.data.mappings.blocks.BlockState @@ -34,8 +32,7 @@ import java.util.concurrent.ConcurrentHashMap */ class World : BiomeAccessor { val chunks: MutableMap = Collections.synchronizedMap(ConcurrentHashMap()) - val entityIdMap = HashBiMap.create() - val entityUUIDMap = HashBiMap.create() + val entities = WorldEntities() var isHardcore = false var isRaining = false var dimension: Dimension? = null @@ -80,33 +77,6 @@ class World : BiomeAccessor { } } - fun addEntity(entityId: Int?, entityUUID: UUID?, entity: Entity) { - entityId?.let { entityIdMap[it] = entity } - entityUUID?.let { entityUUIDMap[it] = entity } - - } - - fun getEntity(id: Int): Entity? { - return entityIdMap[id] - } - - fun getEntity(uuid: UUID): Entity? { - return entityUUIDMap[uuid] - } - - fun removeEntity(entity: Entity) { - entityIdMap.inverse().remove(entity) - entityUUIDMap.inverse().remove(entity) - } - - fun removeEntity(entityId: Int) { - entityIdMap[entityId]?.let { removeEntity(it) } - } - - fun removeEntity(entityUUID: UUID) { - entityUUIDMap[entityUUID]?.let { removeEntity(it) } - } - fun getBlockEntity(blockPosition: Vec3i): BlockEntity? { return getChunk(blockPosition.chunkPosition)?.getBlockEntity(blockPosition.inChunkPosition) } diff --git a/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt new file mode 100644 index 000000000..4a87f40d5 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt @@ -0,0 +1,77 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.world + +import de.bixilon.minosoft.data.entities.entities.Entity +import java.util.* +import java.util.concurrent.ConcurrentHashMap + +class WorldEntities : Iterable { + private val idEntityMap: MutableMap = ConcurrentHashMap() + private val entityIdMap: MutableMap = ConcurrentHashMap() + private val entityUUIDMap: MutableMap = ConcurrentHashMap() + private val uuidEntityMap: MutableMap = ConcurrentHashMap() + + + fun add(entityId: Int?, entityUUID: UUID?, entity: Entity) { + check(entityId != null || entityUUID != null) { "Entity id and UUID is null!" } + entityId?.let { + idEntityMap[it] = entity + entityIdMap[entity] = it + } + entityUUID?.let { + uuidEntityMap[it] = entity + entityUUIDMap[entity] = it + } + } + + operator fun get(id: Int): Entity? { + return idEntityMap[id] + } + + fun getId(entity: Entity): Int? { + return entityIdMap[entity]!! + } + + operator fun get(uuid: UUID): Entity? { + return uuidEntityMap[uuid] + } + + fun getUUID(entity: Entity): UUID? { + return entityUUIDMap[entity] + } + + fun remove(entity: Entity) { + entityIdMap[entity]?.let { + idEntityMap.remove(it) + } + entityIdMap.remove(entity) + entityUUIDMap[entity]?.let { + uuidEntityMap.remove(it) + } + entityUUIDMap.remove(entity) + } + + fun remove(entityId: Int) { + idEntityMap[entityId]?.let { remove(it) } + } + + fun remove(entityUUID: UUID) { + uuidEntityMap[entityUUID]?.let { remove(it) } + } + + override fun iterator(): Iterator { + return idEntityMap.values.iterator() + } +} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java index 4bca5e991..dd1d0fea1 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.java @@ -35,8 +35,8 @@ public class CollectItemAnimationEvent extends CancelableEvent { public CollectItemAnimationEvent(PlayConnection connection, PacketCollectItem pkg) { super(connection); - this.item = connection.getWorld().getEntity(pkg.getItemEntityId()); - this.collector = connection.getWorld().getEntity(pkg.getCollectorEntityId()); + this.item = connection.getWorld().getEntities().get(pkg.getItemEntityId()); + this.collector = connection.getWorld().getEntities().get(pkg.getCollectorEntityId()); this.count = pkg.getCount(); } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityDespawnEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityDespawnEvent.java index a4619d98c..3d848fb01 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityDespawnEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityDespawnEvent.java @@ -33,7 +33,7 @@ public class EntityDespawnEvent extends PlayConnectionEvent { public Entity[] getEntities() { Entity[] ret = new Entity[this.entityIds.length]; for (int i = 0; i < this.entityIds.length; i++) { - ret[i] = getConnection().getWorld().getEntity(this.entityIds[i]); + ret[i] = getConnection().getWorld().getEntities().get(this.entityIds[i]); } return ret; } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityEquipmentChangeEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityEquipmentChangeEvent.java index 015cc850d..73c74b486 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityEquipmentChangeEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityEquipmentChangeEvent.java @@ -38,7 +38,7 @@ public class EntityEquipmentChangeEvent extends PlayConnectionEvent { } public Entity getEntity() { - return getConnection().getWorld().getEntity(this.entityId); + return getConnection().getWorld().getEntities().get(this.entityId); } public int getEntityId() { diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityMetaDataChangeEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityMetaDataChangeEvent.kt index 45c6f87bb..6ccae2f74 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/EntityMetaDataChangeEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/EntityMetaDataChangeEvent.kt @@ -24,6 +24,6 @@ class EntityMetaDataChangeEvent : PlayConnectionEvent { } constructor(connection: PlayConnection, pkg: PacketEntityMetadata) : super(connection) { - entity = connection.world.getEntity(pkg.entityId)!! + entity = connection.world.entities[pkg.entityId]!! } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt index 1d35a88e8..260ce5290 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt @@ -118,7 +118,7 @@ class PlayConnection( velocityHandlerTask = TimeWorkerTask(ProtocolDefinition.TICK_TIME / 4) { val currentTime = System.currentTimeMillis() val deltaTime = currentTime - velocityHandlerLastExecutionTime - for (entity in world.entityIdMap.values) { + for (entity in world.entities) { entity.computeTimeStep(deltaTime) } renderer?.renderWindow?.inputHandler?.camera?.checkPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/EntityActionC2SPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/EntityActionC2SPacket.kt index b68ab4bc9..27749591f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/EntityActionC2SPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/EntityActionC2SPacket.kt @@ -26,7 +26,7 @@ class EntityActionC2SPacket( val action: EntityActions, val parameter: Int = 0, // currently used as jump boost for horse jumping ) : PlayC2SPacket { - constructor(entity: Entity, connection: PlayConnection, action: EntityActions, parameter: Int = 0) : this(connection.world.entityIdMap.inverse()[entity]!!, action, parameter) + constructor(entity: Entity, connection: PlayConnection, action: EntityActions, parameter: Int = 0) : this(connection.world.entities.getId(entity)!!, action, parameter) override fun write(buffer: PlayOutByteBuffer) { buffer.writeEntityId(entityId) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/AttackEntityC2SPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/AttackEntityC2SPacket.kt index 12db1285a..944d2c8c3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/AttackEntityC2SPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/AttackEntityC2SPacket.kt @@ -24,7 +24,7 @@ class AttackEntityC2SPacket( override val sneaking: Boolean, ) : BaseInteractEntityC2SPacket(entityId, EntityInteractionActions.ATTACK) { - constructor(connection: PlayConnection, entity: Entity, sneaking: Boolean) : this(connection.world.entityIdMap.inverse()[entity]!!, sneaking) + constructor(connection: PlayConnection, entity: Entity, sneaking: Boolean) : this(connection.world.entities.getId(entity)!!, sneaking) override fun write(buffer: PlayOutByteBuffer) { super.write(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractAtEntityC2SPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractAtEntityC2SPacket.kt index 3cfea3d59..84a1d7eb3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractAtEntityC2SPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractAtEntityC2SPacket.kt @@ -28,7 +28,7 @@ class InteractAtEntityC2SPacket( override val sneaking: Boolean, ) : BaseInteractEntityC2SPacket(entityId, EntityInteractionActions.INTERACT_AT) { - constructor(connection: PlayConnection, entity: Entity, position: Vec3, hand: Hands, sneaking: Boolean) : this(connection.world.entityIdMap.inverse()[entity]!!, position, hand, sneaking) + constructor(connection: PlayConnection, entity: Entity, position: Vec3, hand: Hands, sneaking: Boolean) : this(connection.world.entities.getId(entity)!!, position, hand, sneaking) override fun write(buffer: PlayOutByteBuffer) { super.write(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractEntityC2SPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractEntityC2SPacket.kt index 441a2a805..ee494abfb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractEntityC2SPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/interact/InteractEntityC2SPacket.kt @@ -28,7 +28,7 @@ class InteractEntityC2SPacket( override val sneaking: Boolean, ) : BaseInteractEntityC2SPacket(entityId, EntityInteractionActions.INTERACT) { - constructor(connection: PlayConnection, entity: Entity, position: Vec3, hand: Hands, sneaking: Boolean) : this(connection.world.entityIdMap.inverse()[entity]!!, position, hand, sneaking) + constructor(connection: PlayConnection, entity: Entity, position: Vec3, hand: Hands, sneaking: Boolean) : this(connection.world.entities.getId(entity)!!, position, hand, sneaking) override fun write(buffer: PlayOutByteBuffer) { super.write(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/PacketLoginSuccess.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/PacketLoginSuccess.java index e21b518a0..ec7649c8a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/PacketLoginSuccess.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/PacketLoginSuccess.java @@ -46,7 +46,7 @@ public class PacketLoginSuccess extends PlayS2CPacket { playerEntity.getTabListItem().setName(this.playerName); playerEntity.getTabListItem().setDisplayName(ChatComponent.Companion.valueOf(this.playerName)); - connection.getWorld().addEntity(null, this.uuid, playerEntity); + connection.getWorld().getEntities().add(null, this.uuid, playerEntity); } @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityVelocityS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityVelocityS2CP.kt index aea29af27..fab29a1b8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityVelocityS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/EntityVelocityS2CP.kt @@ -24,7 +24,7 @@ class EntityVelocityS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val velocity: Vec3 = Vec3(buffer.readShort(), buffer.readShort(), buffer.readShort()) * ProtocolDefinition.VELOCITY_CONSTANT override fun handle(connection: PlayConnection) { - val entity = connection.world.getEntity(entityId) ?: return + val entity = connection.world.entities[entityId] ?: return entity.velocity = velocity } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketAttachEntity.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketAttachEntity.java index 7a6944e48..e36b3ef18 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketAttachEntity.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketAttachEntity.java @@ -38,7 +38,7 @@ public class PacketAttachEntity extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketDestroyEntity.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketDestroyEntity.java index 233b4b4ad..076bfd091 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketDestroyEntity.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketDestroyEntity.java @@ -43,7 +43,7 @@ public class PacketDestroyEntity extends PlayS2CPacket { connection.fireEvent(new EntityDespawnEvent(connection, this)); for (int entityId : getEntityIds()) { - connection.getWorld().removeEntity(entityId); + connection.getWorld().getEntities().remove(entityId); } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEffect.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEffect.java index 4969f919d..eb18a7e4a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEffect.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEffect.java @@ -53,7 +53,7 @@ public class PacketEntityEffect extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEquipment.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEquipment.java index abe49d2ef..191bee94d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEquipment.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityEquipment.java @@ -57,7 +57,7 @@ public class PacketEntityEquipment extends PlayS2CPacket { public void handle(PlayConnection connection) { connection.fireEvent(new EntityEquipmentChangeEvent(connection, this)); - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityHeadRotation.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityHeadRotation.java index 1a15d4f90..6cabd5c36 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityHeadRotation.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityHeadRotation.java @@ -31,7 +31,7 @@ public class PacketEntityHeadRotation extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMetadata.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMetadata.kt index 26c52b1de..ab55b1372 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMetadata.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMetadata.kt @@ -32,7 +32,7 @@ class PacketEntityMetadata() : PlayS2CPacket() { } override fun handle(connection: PlayConnection) { - val entity = connection.world.getEntity(entityId) ?: return + val entity = connection.world.entities[entityId] ?: return entity.entityMetaData = entityData connection.fireEvent(EntityMetaDataChangeEvent(connection, entity)) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovement.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovement.java index aff07b7fb..0a7082bc0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovement.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovement.java @@ -42,7 +42,7 @@ public class PacketEntityMovement extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovementAndRotation.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovementAndRotation.java index 40461be9a..c502a0295 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovementAndRotation.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityMovementAndRotation.java @@ -47,7 +47,7 @@ public class PacketEntityMovementAndRotation extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityRotation.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityRotation.java index 05b6f1a18..056b04b8f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityRotation.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityRotation.java @@ -40,7 +40,7 @@ public class PacketEntityRotation extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityTeleport.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityTeleport.java index 62cff37b9..064942107 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityTeleport.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketEntityTeleport.java @@ -48,7 +48,7 @@ public class PacketEntityTeleport extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketJoinGame.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketJoinGame.kt index de3ae171a..f8ca011f1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketJoinGame.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketJoinGame.kt @@ -144,7 +144,7 @@ class PacketJoinGame(buffer: PlayInByteBuffer) : PlayS2CPacket() { connection.mapping.dimensionRegistry.setData(dimensions) connection.world.dimension = dimension - connection.world.addEntity(entityId, null, playerEntity) + connection.world.entities.add(entityId, null, playerEntity) connection.world.hashedSeed = hashedSeed connection.world.biomeAccessor = if (connection.version.versionId < ProtocolVersions.V_19W36A) { BlockBiomeAccessor(connection.world) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketRemoveEntityStatusEffect.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketRemoveEntityStatusEffect.java index 505d0e500..74d7d770c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketRemoveEntityStatusEffect.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketRemoveEntityStatusEffect.java @@ -32,7 +32,7 @@ public class PacketRemoveEntityStatusEffect extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { - Entity entity = connection.getWorld().getEntity(getEntityId()); + Entity entity = connection.getWorld().getEntities().get(getEntityId()); if (entity == null) { // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnExperienceOrb.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnExperienceOrb.java index 25b287fd0..9aee5797f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnExperienceOrb.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnExperienceOrb.java @@ -45,7 +45,7 @@ public class PacketSpawnExperienceOrb extends PlayS2CPacket { public void handle(PlayConnection connection) { connection.fireEvent(new EntitySpawnEvent(connection, this)); - connection.getWorld().addEntity(this.entityId, null, getEntity()); + connection.getWorld().getEntities().add(this.entityId, null, getEntity()); } @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnMob.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnMob.java index 18fc0c076..9b3f7d249 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnMob.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnMob.java @@ -82,7 +82,7 @@ public class PacketSpawnMob extends PlayS2CPacket { @Override public void handle(PlayConnection connection) { connection.fireEvent(new EntitySpawnEvent(connection, this)); - connection.getWorld().addEntity(this.entityId, this.entityUUID, getEntity()); + connection.getWorld().getEntities().add(this.entityId, this.entityUUID, getEntity()); this.entity.setVelocity(this.velocity); } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnObject.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnObject.java index 9ff339acb..d90401c58 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnObject.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnObject.java @@ -76,7 +76,7 @@ public class PacketSpawnObject extends PlayS2CPacket { public void handle(PlayConnection connection) { connection.fireEvent(new EntitySpawnEvent(connection, this)); - connection.getWorld().addEntity(this.entityId, this.entityUUID, getEntity()); + connection.getWorld().getEntities().add(this.entityId, this.entityUUID, getEntity()); this.entity.setVelocity(this.velocity); } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPainting.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPainting.java index e22a4ec95..f0793aa67 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPainting.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPainting.java @@ -62,7 +62,7 @@ public class PacketSpawnPainting extends PlayS2CPacket { public void handle(PlayConnection connection) { connection.fireEvent(new EntitySpawnEvent(connection, this)); - connection.getWorld().addEntity(this.entityId, this.entityUUID, getEntity()); + connection.getWorld().getEntities().add(this.entityId, this.entityUUID, getEntity()); } @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPlayer.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPlayer.kt index 137a13765..b0f2e0a5f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPlayer.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnPlayer.kt @@ -85,7 +85,7 @@ class PacketSpawnPlayer(buffer: PlayInByteBuffer) : PlayS2CPacket() { connection.tabList.tabListItems[entityUUID]?.let { entity.tabListItem = it } connection.fireEvent(EntitySpawnEvent(connection, this)) - connection.world.addEntity(entityId, entityUUID, entity) + connection.world.entities.add(entityId, entityUUID, entity) } override fun log() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnWeatherEntity.java b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnWeatherEntity.java index 4c04bd3cb..c385d8304 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnWeatherEntity.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketSpawnWeatherEntity.java @@ -46,7 +46,7 @@ public class PacketSpawnWeatherEntity extends PlayS2CPacket { public void handle(PlayConnection connection) { connection.fireEvent(new EntitySpawnEvent(connection, this)); connection.fireEvent(new LightningBoltSpawnEvent(connection, this)); - connection.getWorld().addEntity(this.entityId, null, this.entity); + connection.getWorld().getEntities().add(this.entityId, null, this.entity); } @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketTabListItem.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketTabListItem.kt index ac9c4321b..11c059756 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketTabListItem.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PacketTabListItem.kt @@ -144,7 +144,7 @@ class PacketTabListItem(buffer: PlayInByteBuffer) : PlayS2CPacket() { continue } - val entity = connection.world.getEntity(uuid) + val entity = connection.world.entities[uuid] val tabListItem = connection.tabList.tabListItems[uuid] ?: run { diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandEntities.java b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandEntities.java index 9f369058c..11c326536 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandEntities.java +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandEntities.java @@ -32,8 +32,8 @@ public class CommandEntities extends Command { new CommandLiteralNode("list", (connection, stack) -> { ArrayList tableData = new ArrayList<>(); - for (var entry : connection.getWorld().getEntityIdMap().entrySet()) { - tableData.add(new Object[]{entry.getKey(), connection.getWorld().getEntityIdMap().inverse().get(entry.getValue()), entry.getValue().getEntityType().toString(), entry.getValue().getEquipment(), entry.getValue().getPosition(), entry.getValue().getRotation()}); + for (var entry : connection.getWorld().getEntities()) { + tableData.add(new Object[]{connection.getWorld().getEntities().getId(entry), connection.getWorld().getEntities().getUUID(entry), entry.getEntityType().toString(), entry.getEquipment(), entry.getPosition(), entry.getRotation()}); } print(AsciiTable.getTable(new String[]{"ID", "UUID", "TYPE", "EQUIPMENT", "LOCATION", "ROTATION"}, tableData.toArray(new Object[0][0]))); @@ -41,15 +41,15 @@ public class CommandEntities extends Command { new CommandLiteralNode("info", new CommandArgumentNode("entityId", IntegerParser.INTEGER_PARSER, new IntegerParserProperties(0, Integer.MAX_VALUE), (connection, stack) -> { // ToDo: entity uuids - Entity entity = connection.getWorld().getEntity(stack.getInt(0)); + Entity entity = connection.getWorld().getEntities().get(stack.getInt(0)); if (entity == null) { printError("Entity %d not found!", stack.getInt(0)); return; } ArrayList tableData = new ArrayList<>(); - tableData.add(new Object[]{"Entity id", connection.getWorld().getEntityIdMap().inverse().get(entity)}); - tableData.add(new Object[]{"UUID", connection.getWorld().getEntityUUIDMap().inverse().get(entity)}); + tableData.add(new Object[]{"Entity id", connection.getWorld().getEntities().getId(entity)}); + tableData.add(new Object[]{"UUID", connection.getWorld().getEntities().getUUID(entity)}); tableData.add(new Object[]{"Type", entity.getEntityType()}); tableData.add(new Object[]{"Class", entity.getClass().getName()}); tableData.add(new Object[]{"Location", entity.getPosition()}); diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandTabList.java b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandTabList.java index ee01a54e6..787098edf 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandTabList.java +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/commands/CommandTabList.java @@ -69,8 +69,8 @@ public class CommandTabList extends Command { ArrayList tableData = new ArrayList<>(); for (var entry : connection.getTabList().getTabListItems().entrySet()) { - PlayerEntity playerEntity = (PlayerEntity) connection.getWorld().getEntity(entry.getKey()); - Integer entityId = playerEntity != null ? connection.getWorld().getEntityIdMap().inverse().get(playerEntity) : null; + PlayerEntity playerEntity = (PlayerEntity) connection.getWorld().getEntities().get(entry.getKey()); + Integer entityId = playerEntity != null ? connection.getWorld().getEntities().getId(playerEntity) : null; tableData.add(new Object[]{entry.getKey(), entityId, entry.getValue().getName(), entry.getValue().getDisplayName(), entry.getValue().getGamemode(), entry.getValue().getPing() + "ms"}); }