diff --git a/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt b/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt
index a650ab3e9..5d07fbd14 100644
--- a/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt
+++ b/src/main/java/de/bixilon/minosoft/data/DefaultEntityFactories.kt
@@ -23,10 +23,7 @@ import de.bixilon.minosoft.data.entities.entities.animal.water.*
import de.bixilon.minosoft.data.entities.entities.boss.enderdragon.EndCrystal
import de.bixilon.minosoft.data.entities.entities.boss.enderdragon.EnderDragon
import de.bixilon.minosoft.data.entities.entities.boss.wither.WitherBoss
-import de.bixilon.minosoft.data.entities.entities.decoration.ArmorStand
-import de.bixilon.minosoft.data.entities.entities.decoration.ItemFrame
-import de.bixilon.minosoft.data.entities.entities.decoration.LeashFenceKnotEntity
-import de.bixilon.minosoft.data.entities.entities.decoration.Painting
+import de.bixilon.minosoft.data.entities.entities.decoration.*
import de.bixilon.minosoft.data.entities.entities.item.FallingBlock
import de.bixilon.minosoft.data.entities.entities.item.ItemEntity
import de.bixilon.minosoft.data.entities.entities.item.PrimedTNT
@@ -91,6 +88,7 @@ object DefaultEntityFactories {
Illusioner,
IronGolem,
ItemEntity,
+ GlowItemFrame,
ItemFrame,
LargeFireball,
LeashFenceKnotEntity,
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/GlowItemFrame.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/GlowItemFrame.kt
new file mode 100644
index 000000000..0c2d4745d
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/GlowItemFrame.kt
@@ -0,0 +1,31 @@
+/*
+ * 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.entities.entities.decoration
+
+import de.bixilon.minosoft.data.entities.EntityRotation
+import de.bixilon.minosoft.data.mappings.ResourceLocation
+import de.bixilon.minosoft.data.mappings.entities.EntityFactory
+import de.bixilon.minosoft.data.mappings.entities.EntityType
+import de.bixilon.minosoft.protocol.network.connection.PlayConnection
+import glm_.vec3.Vec3
+
+class GlowItemFrame(connection: PlayConnection, entityType: EntityType, position: Vec3, rotation: EntityRotation) : ItemFrame(connection, entityType, position, rotation) {
+
+ companion object : EntityFactory {
+ override val RESOURCE_LOCATION: ResourceLocation = ResourceLocation("glow_item_frame")
+
+ override fun build(connection: PlayConnection, entityType: EntityType, position: Vec3, rotation: EntityRotation): GlowItemFrame {
+ return GlowItemFrame(connection, entityType, position, rotation)
+ }
+ }
+}
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt
index d3c3cca24..8d0827311 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.kt
@@ -22,7 +22,7 @@ import de.bixilon.minosoft.data.mappings.entities.EntityType
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import glm_.vec3.Vec3
-class ItemFrame(connection: PlayConnection, entityType: EntityType, position: Vec3, rotation: EntityRotation) : HangingEntity(connection, entityType, position, rotation) {
+open class ItemFrame(connection: PlayConnection, entityType: EntityType, position: Vec3, rotation: EntityRotation) : HangingEntity(connection, entityType, position, rotation) {
@get:EntityMetaDataFunction(name = "Item")
val item: ItemStack?
diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.kt b/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.kt
index d4c9b0180..ad1bde784 100644
--- a/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.kt
+++ b/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.kt
@@ -89,7 +89,7 @@ data class Dimension(
hasRaids = data.get("has_raids")?.asBoolean == true,
logicalHeight = data.get("logical_height")?.asInt ?: 256,
coordinateScale = data.get("coordinate_scale")?.asDouble ?: 0.0,
- minY = data.get("min_y")?.asInt ?: 0,
+ minY = data.get("minimum_y")?.asInt ?: 0,
hasCeiling = data.get("has_ceiling")?.asBoolean == true,
ultraWarm = data.get("ultrawarm")?.asBoolean == true,
height = data.get("height")?.asInt ?: 256,
diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/properties/BlockProperties.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/properties/BlockProperties.kt
index eb1b90187..f905a509c 100644
--- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/properties/BlockProperties.kt
+++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/properties/BlockProperties.kt
@@ -95,7 +95,7 @@ enum class BlockProperties {
LEGACY_SMOOTH("smooth", BooleanBlocKPropertiesSerializer),
SCULK_SENSOR_PHASE("sculk_sensor_phase", SensorPhases),
DRIPSTONE_TILT("tilt", Tilts),
- CAVE_VINES_BERRIES(BooleanBlocKPropertiesSerializer),
+ CAVE_VINES_BERRIES("berries", BooleanBlocKPropertiesSerializer),
;
val group: String
@@ -141,7 +141,7 @@ enum class BlockProperties {
throw IllegalArgumentException("Can not parse value $value for group $group")
}
return Pair(retProperty, retValue)
- } ?: throw IllegalArgumentException("Can not find group: $group")
+ } ?: throw IllegalArgumentException("Can not find group: $group, expected value $value")
}
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.kt
index f5d8b2025..e60db023b 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.kt
@@ -99,11 +99,10 @@ class PacketJoinGame(buffer: PlayInByteBuffer) : PlayClientboundPacket() {
} else {
buffer.readNBT() as CompoundTag // dimension tag
}
+ val currentDimension = buffer.readResourceLocation()
+ dimension = dimensions[currentDimension] ?: buffer.connection.mapping.dimensionRegistry.get(currentDimension)!!
}
- if (buffer.versionId >= ProtocolVersions.V_20W22A) {
- dimension = buffer.connection.mapping.dimensionRegistry.get(buffer.readResourceLocation())!!
- }
if (buffer.versionId >= ProtocolVersions.V_19W36A) {
hashedSeed = buffer.readLong()
}
diff --git a/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt b/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt
index 598fbb7b4..fa998eb3d 100644
--- a/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt
+++ b/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt
@@ -60,8 +60,8 @@ object ChunkUtil {
// parse data
var arrayPosition = 0
val sectionMap: MutableMap = Collections.synchronizedMap(ConcurrentHashMap())
- for (sectionHeight in dimension.lowestSection until dimension.highestSection) {
- if (!sectionBitMask.get(sectionHeight)) {
+ for ((sectionIndex, sectionHeight) in (dimension.lowestSection until dimension.highestSection).withIndex()) {
+ if (!sectionBitMask[sectionIndex]) {
continue
}
@@ -94,7 +94,7 @@ object ChunkUtil {
blocks[blockNumber] = buffer.connection.mapping.getBlockState(blockId) ?: continue
}
- sectionMap[dimension.lowestSection + sectionHeight] = ChunkSection(blocks)
+ sectionMap[sectionHeight] = ChunkSection(blocks)
}
chunkData.blocks = sectionMap
return chunkData
@@ -129,8 +129,8 @@ object ChunkUtil {
var arrayPos = 0
val sectionMap: MutableMap = Collections.synchronizedMap(ConcurrentHashMap())
- for (sectionHeight in dimension.lowestSection until dimension.highestSection) { // max sections per chunks in chunk column
- if (!sectionBitMask.get(sectionHeight)) {
+ for ((sectionIndex, sectionHeight) in (dimension.lowestSection until dimension.highestSection).withIndex()) { // max sections per chunks in chunk column
+ if (!sectionBitMask[sectionIndex]) {
continue
}
val blocks = arrayOfNulls(ProtocolDefinition.BLOCKS_PER_SECTION)
@@ -139,7 +139,7 @@ object ChunkUtil {
val block = buffer.connection.mapping.getBlockState(blockId) ?: continue
blocks[blockNumber] = block
}
- sectionMap[dimension.lowestSection + sectionHeight] = ChunkSection(blocks)
+ sectionMap[sectionHeight] = ChunkSection(blocks)
}
chunkData.blocks = sectionMap
return chunkData
@@ -149,8 +149,8 @@ object ChunkUtil {
val chunkData = ChunkData()
val sectionMap: MutableMap = Collections.synchronizedMap(ConcurrentHashMap())
- for (sectionHeight in dimension.lowestSection until sectionBitMask.length()) { // max sections per chunks in chunk column
- if (!sectionBitMask[sectionHeight]) {
+ for ((sectionIndex, sectionHeight) in (dimension.lowestSection until sectionBitMask.length()).withIndex()) { // max sections per chunks in chunk column
+ if (!sectionBitMask[sectionIndex]) {
continue
}
if (buffer.versionId >= V_18W43A) {
@@ -195,7 +195,7 @@ object ChunkUtil {
}
// ToDo
}
- sectionMap[dimension.lowestSection + sectionHeight] = ChunkSection(blocks)
+ sectionMap[sectionHeight] = ChunkSection(blocks)
}
chunkData.blocks = sectionMap