diff --git a/src/main/java/de/bixilon/minosoft/data/Axes.kt b/src/main/java/de/bixilon/minosoft/data/Axes.kt
index 5bb6dc51f..57fef3230 100644
--- a/src/main/java/de/bixilon/minosoft/data/Axes.kt
+++ b/src/main/java/de/bixilon/minosoft/data/Axes.kt
@@ -12,6 +12,7 @@
*/
package de.bixilon.minosoft.data
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
import de.bixilon.minosoft.util.KUtil
import de.bixilon.minosoft.util.enum.ValuesEnum
diff --git a/src/main/java/de/bixilon/minosoft/data/direction/AbstractDirection.kt b/src/main/java/de/bixilon/minosoft/data/direction/AbstractDirection.kt
new file mode 100644
index 000000000..2ee6c8204
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/data/direction/AbstractDirection.kt
@@ -0,0 +1,24 @@
+/*
+ * 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.direction
+
+import glm_.vec3.Vec3
+import glm_.vec3.Vec3d
+import glm_.vec3.Vec3i
+
+interface AbstractDirection {
+ val vector: Vec3i
+ val vectorf: Vec3
+ val vectord: Vec3d
+}
diff --git a/src/main/java/de/bixilon/minosoft/data/Directions.kt b/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt
similarity index 94%
rename from src/main/java/de/bixilon/minosoft/data/Directions.kt
rename to src/main/java/de/bixilon/minosoft/data/direction/Directions.kt
index 32b0d3104..441f95b8c 100644
--- a/src/main/java/de/bixilon/minosoft/data/Directions.kt
+++ b/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020 Moritz Zwerger
+ * 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.
*
@@ -10,8 +10,9 @@
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
-package de.bixilon.minosoft.data
+package de.bixilon.minosoft.data.direction
+import de.bixilon.minosoft.data.Axes
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
import de.bixilon.minosoft.gui.rendering.chunk.models.FaceSize
import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelElement
@@ -24,7 +25,10 @@ import glm_.vec3.Vec3d
import glm_.vec3.Vec3i
import kotlin.math.abs
-enum class Directions(val horizontalId: Int, val vector: Vec3i) {
+enum class Directions(
+ val horizontalId: Int,
+ override val vector: Vec3i,
+) : AbstractDirection {
DOWN(-1, Vec3i(0, -1, 0)),
UP(-1, Vec3i(0, 1, 0)),
NORTH(2, Vec3i(0, 0, -1)),
@@ -32,8 +36,8 @@ enum class Directions(val horizontalId: Int, val vector: Vec3i) {
WEST(1, Vec3i(-1, 0, 0)),
EAST(3, Vec3i(1, 0, 0));
- val vectorf = Vec3(vector)
- val vectord = Vec3d(vector)
+ override val vectorf = Vec3(vector)
+ override val vectord = Vec3d(vector)
val axis: Axes get() = Axes.byDirection(this)
diff --git a/src/main/java/de/bixilon/minosoft/data/direction/FakeDirection.kt b/src/main/java/de/bixilon/minosoft/data/direction/FakeDirection.kt
new file mode 100644
index 000000000..e59534375
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/data/direction/FakeDirection.kt
@@ -0,0 +1,33 @@
+/*
+ * 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.direction
+
+import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
+import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
+import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
+import glm_.vec3.Vec3
+import glm_.vec3.Vec3d
+import glm_.vec3.Vec3i
+
+class FakeDirection(override val vector: Vec3i) : AbstractDirection {
+ override val vectorf: Vec3 = vector.toVec3
+ override val vectord: Vec3d = vector.toVec3d
+
+ companion object {
+ val NORTH_WEST = FakeDirection(Directions.NORTH + Directions.WEST)
+ val NORTH_EAST = FakeDirection(Directions.NORTH + Directions.EAST)
+ val SOUTH_WEST = FakeDirection(Directions.SOUTH + Directions.WEST)
+ val SOUTH_EAST = FakeDirection(Directions.SOUTH + Directions.WEST)
+ }
+}
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.kt b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.kt
index 1064d0aa0..c84c00ddf 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.kt
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.data.entities
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.entities.animal.Axolotl
import de.bixilon.minosoft.data.entities.entities.npc.villager.data.VillagerData
import de.bixilon.minosoft.data.entities.entities.npc.villager.data.VillagerLevels
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/BellBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/BellBlockEntity.kt
index 8a9cc2af0..683cfc6c3 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/block/BellBlockEntity.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/block/BellBlockEntity.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.entities.block
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt
index 6a073be07..b205d2f9c 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.entities.block
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/piston/PistonBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/piston/PistonBlockEntity.kt
index 510cd766a..dc5078752 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/block/piston/PistonBlockEntity.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/block/piston/PistonBlockEntity.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.entities.block.piston
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.block.BlockActionEntity
import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.entities.block.BlockEntityFactory
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 05790ec73..e2f2396ec 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
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.data.entities.entities.decoration
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.kt
index b3c1763c6..6027243cf 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.kt
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.data.entities.entities.decoration
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Shulker.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Shulker.kt
index 84ee62ee9..e058da8b2 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Shulker.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Shulker.kt
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.data.entities.entities.monster
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/EntityMetaData.kt b/src/main/java/de/bixilon/minosoft/data/entities/meta/EntityMetaData.kt
index 98467cf89..430f7aa5b 100644
--- a/src/main/java/de/bixilon/minosoft/data/entities/meta/EntityMetaData.kt
+++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/EntityMetaData.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.entities.meta
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.Poses
diff --git a/src/main/java/de/bixilon/minosoft/data/physics/CollisionDetector.kt b/src/main/java/de/bixilon/minosoft/data/physics/CollisionDetector.kt
index aceaaa0dc..7a1316475 100644
--- a/src/main/java/de/bixilon/minosoft/data/physics/CollisionDetector.kt
+++ b/src/main/java/de/bixilon/minosoft/data/physics/CollisionDetector.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.physics
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.player.LocalPlayerEntity
import de.bixilon.minosoft.gui.rendering.chunk.VoxelShape
import de.bixilon.minosoft.gui.rendering.chunk.models.AABB
diff --git a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt
index 06723d357..666b34634 100644
--- a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt
+++ b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt
@@ -14,10 +14,10 @@ package de.bixilon.minosoft.data.player
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.abilities.ItemCooldown
import de.bixilon.minosoft.data.accounts.Account
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
import de.bixilon.minosoft.data.entities.entities.player.RemotePlayerEntity
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt
index 659e6e6bc..51985d1b3 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.properties
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BooleanBlockPropertiesSerializer
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.IntBlockPropertiesSerializer
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/DoubleSizeBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/DoubleSizeBlock.kt
index 385eff419..8d4b553e1 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/DoubleSizeBlock.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/DoubleSizeBlock.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.types
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/portal/NetherPortalBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/portal/NetherPortalBlock.kt
index 013c44d0a..325fd481b 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/portal/NetherPortalBlock.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/portal/NetherPortalBlock.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.types.portal
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.Block
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/LeverBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/LeverBlock.kt
index bb26ab09d..73c2ed41d 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/LeverBlock.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/LeverBlock.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.types.wall
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.player.Hands
import de.bixilon.minosoft.data.registries.ResourceLocation
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/WallMountedBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/WallMountedBlock.kt
index 994ed44d4..e3bb303a4 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/WallMountedBlock.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/wall/WallMountedBlock.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.blocks.types.wall
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.Attachments
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt
index 770782d7b..84f81681b 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.registries.fluid
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt
index 257d38a83..5d005f4ef 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/lava/LavaFluid.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.registries.fluid.lava
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.fluid.FlowableFluid
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/tools/HoeItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/tools/HoeItem.kt
index 19d1ec414..b229ecbb5 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/items/tools/HoeItem.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/items/tools/HoeItem.kt
@@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.registries.items.tools
import com.google.gson.JsonObject
import de.bixilon.minosoft.Minosoft
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.player.Hands
import de.bixilon.minosoft.data.registries.ResourceLocation
diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/tools/ShovelItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/tools/ShovelItem.kt
index dbf29a1ca..deb0429eb 100644
--- a/src/main/java/de/bixilon/minosoft/data/registries/items/tools/ShovelItem.kt
+++ b/src/main/java/de/bixilon/minosoft/data/registries/items/tools/ShovelItem.kt
@@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.registries.items.tools
import com.google.gson.JsonObject
import de.bixilon.minosoft.Minosoft
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.player.Hands
import de.bixilon.minosoft.data.registries.ResourceLocation
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt
index 621985eb3..771ad944d 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt
@@ -4,7 +4,7 @@ import com.google.gson.JsonArray
import com.google.gson.JsonElement
import com.google.gson.JsonPrimitive
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.gui.rendering.chunk.models.AABB
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
index 536caa32e..f2507b222 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
@@ -15,7 +15,8 @@ package de.bixilon.minosoft.gui.rendering.chunk
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
+import de.bixilon.minosoft.data.direction.FakeDirection
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
@@ -243,8 +244,8 @@ class WorldRenderer(
}
// ensure all neighbor chunks are loaded
- for (direction in Directions.SIDES) {
- val neighborChunk = world.chunks[chunkPosition + direction]
+ for (neighbourPosition in chunkPosition.neighbourPositions) {
+ val neighborChunk = world.chunks[neighbourPosition]
if (neighborChunk == null || !neighborChunk.isFullyLoaded) {
// neighbors not loaded, doing later
queuedChunks.add(chunkPosition)
@@ -270,17 +271,10 @@ class WorldRenderer(
}
private fun checkNeighbours(chunkPosition: Vec2i) {
- val neighborsPositions: Array = arrayOf(
- chunkPosition + Directions.NORTH,
- chunkPosition + Directions.SOUTH,
- chunkPosition + Directions.WEST,
- chunkPosition + Directions.EAST,
- )
-
- checkQueuedChunks(neighborsPositions)
+ checkQueuedChunks(chunkPosition.neighbourPositions)
}
- private fun checkQueuedChunks(chunkPositions: Array) {
+ private fun checkQueuedChunks(chunkPositions: List) {
for (position in chunkPositions) {
if (queuedChunks.contains(position)) {
prepareChunk(position, checkQueued = false)
@@ -470,5 +464,19 @@ class WorldRenderer(
private operator fun Int.plus(upOrDown: Directions): Int {
return this + upOrDown.vector.y
}
+
+ val Vec2i.neighbourPositions: List
+ get() {
+ return listOf(
+ this + Directions.NORTH,
+ this + Directions.SOUTH,
+ this + Directions.WEST,
+ this + Directions.EAST,
+ this + FakeDirection.NORTH_WEST,
+ this + FakeDirection.NORTH_EAST,
+ this + FakeDirection.SOUTH_WEST,
+ this + FakeDirection.SOUTH_EAST,
+ )
+ }
}
}
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt
index d54647362..171d9eda9 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt
@@ -2,7 +2,7 @@ package de.bixilon.minosoft.gui.rendering.chunk.models
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE
import de.bixilon.minosoft.gui.rendering.util.VecUtil.get
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelElement.kt
index dfc5c3af7..3277ae30f 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelElement.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelElement.kt
@@ -15,7 +15,8 @@ package de.bixilon.minosoft.gui.rendering.chunk.models.loading
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
+import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.rotate
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
import glm_.func.rad
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelFace.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelFace.kt
index 0267ae4c5..ad92d7ccd 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelFace.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/loading/BlockModelFace.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.gui.rendering.chunk.models.loading
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.gui.rendering.chunk.models.AABB
import de.bixilon.minosoft.gui.rendering.util.VecUtil
import de.bixilon.minosoft.gui.rendering.util.VecUtil.readUV
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt
index 63f9b145b..afd7867f1 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt
@@ -15,7 +15,7 @@ package de.bixilon.minosoft.gui.rendering.chunk.models.renderable
import com.google.common.collect.HashBiMap
import com.google.gson.JsonObject
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.biomes.Biome
import de.bixilon.minosoft.data.text.RGBColor
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt
index e0314be10..f1ec60565 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt
@@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.chunk.models.renderable
import com.google.common.collect.HashBiMap
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.chunk.ChunkMeshCollection
import de.bixilon.minosoft.gui.rendering.chunk.SectionArrayMesh
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/FluidRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/FluidRenderer.kt
index 1ef2bbd9a..e7bb861e3 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/FluidRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/FluidRenderer.kt
@@ -1,6 +1,6 @@
package de.bixilon.minosoft.gui.rendering.chunk.models.renderable
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.biomes.Biome
import de.bixilon.minosoft.data.registries.blocks.BlockState
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt
index 1e84d185a..3b39b3631 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.gui.rendering.chunk.models.renderable
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.chunk.models.FaceSize
import de.bixilon.minosoft.gui.rendering.textures.Texture
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/debug/HUDWorldDebugNode.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/debug/HUDWorldDebugNode.kt
index 4c3635af0..25b2fdb41 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/debug/HUDWorldDebugNode.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/nodes/debug/HUDWorldDebugNode.kt
@@ -14,7 +14,7 @@
package de.bixilon.minosoft.gui.rendering.hud.nodes.debug
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.chunk.WorldRenderer
import de.bixilon.minosoft.gui.rendering.hud.HUDElementProperties
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt
index 9dce77555..20149c5fd 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt
@@ -14,8 +14,8 @@
package de.bixilon.minosoft.gui.rendering.input
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
-import de.bixilon.minosoft.data.Directions
import de.bixilon.minosoft.data.abilities.Gamemodes
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.player.Hands
import de.bixilon.minosoft.data.registries.blocks.BlockState
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/BlockRaycastHit.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/BlockRaycastHit.kt
index c92696385..579c5d7fc 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/BlockRaycastHit.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/BlockRaycastHit.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.gui.rendering.input.camera.hit
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.util.KUtil.format
import glm_.vec3.Vec3d
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/EntityRaycastHit.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/EntityRaycastHit.kt
index f56ba7352..73b29c38d 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/EntityRaycastHit.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/EntityRaycastHit.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.gui.rendering.input.camera.hit
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.entities.Entity
import glm_.vec3.Vec3d
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt
index 3d22389c1..76df701cd 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.gui.rendering.input.camera.hit
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.fluid.Fluid
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/RaycastHit.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/RaycastHit.kt
index 1b779fc99..79e9b40f9 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/RaycastHit.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/RaycastHit.kt
@@ -13,7 +13,7 @@
package de.bixilon.minosoft.gui.rendering.input.camera.hit
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import glm_.vec3.Vec3d
abstract class RaycastHit(
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt
index 7d87dd5a0..9490289ed 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt
@@ -19,7 +19,8 @@ import com.google.gson.JsonObject
import com.google.gson.JsonPrimitive
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.Axes
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.AbstractDirection
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.blocks.RandomOffsetTypes
import de.bixilon.minosoft.data.registries.blocks.types.Block
import de.bixilon.minosoft.gui.rendering.chunk.models.AABB
@@ -265,7 +266,7 @@ object VecUtil {
return Vec3i((x + vec2.x), y, (z + vec2.y))
}
- infix operator fun Vec3i.plus(direction: Directions?): Vec3i {
+ infix operator fun Vec3i.plus(direction: AbstractDirection?): Vec3i {
return this + direction?.vector
}
@@ -277,7 +278,7 @@ object VecUtil {
return Vec2i(x + vec3.x, y + vec3.z)
}
- infix operator fun Vec2i.plus(direction: Directions): Vec2i {
+ infix operator fun Vec2i.plus(direction: AbstractDirection): Vec2i {
return this + direction.vector
}
@@ -465,4 +466,8 @@ object VecUtil {
z = 0.0
}
}
+
+ operator fun AbstractDirection.plus(direction: AbstractDirection): Vec3i {
+ return this.vector + direction.vector
+ }
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockBreakC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockBreakC2SP.kt
index 47e439711..46a16dbcc 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockBreakC2SP.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockBreakC2SP.kt
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.protocol.packets.c2s.play
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket
import de.bixilon.minosoft.protocol.protocol.PlayOutByteBuffer
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockPlaceC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockPlaceC2SP.kt
index c26c80959..3e0490ac6 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockPlaceC2SP.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BlockPlaceC2SP.kt
@@ -12,7 +12,7 @@
*/
package de.bixilon.minosoft.protocol.packets.c2s.play
-import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.data.player.Hands
import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PaintingSpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PaintingSpawnS2CP.kt
index 1adcf4ba8..b26e07d3a 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PaintingSpawnS2CP.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PaintingSpawnS2CP.kt
@@ -12,8 +12,8 @@
*/
package de.bixilon.minosoft.protocol.packets.s2c.play
-import de.bixilon.minosoft.data.Directions
-import de.bixilon.minosoft.data.Directions.Companion.byId
+import de.bixilon.minosoft.data.direction.Directions
+import de.bixilon.minosoft.data.direction.Directions.Companion.byId
import de.bixilon.minosoft.data.entities.entities.decoration.Painting
import de.bixilon.minosoft.data.registries.Motive
import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.kt
index e0c2a87d0..37a107f57 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.kt
@@ -14,11 +14,11 @@ package de.bixilon.minosoft.protocol.protocol
import com.google.gson.JsonObject
import com.google.gson.JsonParser
-import de.bixilon.minosoft.data.Directions
import de.bixilon.minosoft.data.commands.CommandArgumentNode
import de.bixilon.minosoft.data.commands.CommandLiteralNode
import de.bixilon.minosoft.data.commands.CommandNode
import de.bixilon.minosoft.data.commands.CommandRootNode
+import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.Poses
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.tags.Tag