mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 01:48:04 -04:00
make block properties not an enum
Long needed refactor
This commit is contained in:
parent
8600d2d8f3
commit
bf84b99df3
@ -18,6 +18,7 @@ import de.bixilon.minosoft.assets.meta.MinosoftMeta
|
|||||||
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
|
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
|
||||||
import de.bixilon.minosoft.data.registries.fallback.FallbackRegistries
|
import de.bixilon.minosoft.data.registries.fallback.FallbackRegistries
|
||||||
import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags
|
import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags
|
||||||
|
import de.bixilon.minosoft.datafixer.DataFixer
|
||||||
import de.bixilon.minosoft.protocol.versions.VersionLoader
|
import de.bixilon.minosoft.protocol.versions.VersionLoader
|
||||||
import de.bixilon.minosoft.test.IT
|
import de.bixilon.minosoft.test.IT
|
||||||
import de.bixilon.minosoft.test.ITUtil
|
import de.bixilon.minosoft.test.ITUtil
|
||||||
@ -37,6 +38,7 @@ internal object MinosoftSIT {
|
|||||||
disableGC()
|
disableGC()
|
||||||
Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Setting up integration tests...." }
|
Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Setting up integration tests...." }
|
||||||
initAssetsManager()
|
initAssetsManager()
|
||||||
|
DataFixer.load()
|
||||||
loadVersionsJson()
|
loadVersionsJson()
|
||||||
loadAssetsProperties()
|
loadAssetsProperties()
|
||||||
loadDefaultRegistries()
|
loadDefaultRegistries()
|
||||||
|
@ -18,7 +18,6 @@ import de.bixilon.kotlinglm.vec3.Vec3i
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
||||||
import de.bixilon.minosoft.data.world.World
|
import de.bixilon.minosoft.data.world.World
|
||||||
@ -31,14 +30,14 @@ import kotlin.math.abs
|
|||||||
abstract class FlowingFluidIT {
|
abstract class FlowingFluidIT {
|
||||||
protected val levels by lazy {
|
protected val levels by lazy {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7),
|
block!!.states.withProperties(FluidBlock.LEVEL to 7),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 6),
|
block!!.states.withProperties(FluidBlock.LEVEL to 6),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 5),
|
block!!.states.withProperties(FluidBlock.LEVEL to 5),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 4),
|
block!!.states.withProperties(FluidBlock.LEVEL to 4),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 3),
|
block!!.states.withProperties(FluidBlock.LEVEL to 3),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 2),
|
block!!.states.withProperties(FluidBlock.LEVEL to 2),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 1),
|
block!!.states.withProperties(FluidBlock.LEVEL to 1),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0),
|
block!!.states.withProperties(FluidBlock.LEVEL to 0),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@ import de.bixilon.minosoft.data.physics.PhysicsTestUtil.assertPosition
|
|||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.assertVelocity
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.assertVelocity
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
||||||
import de.bixilon.minosoft.data.registries.fluid.fluids.LavaFluid
|
import de.bixilon.minosoft.data.registries.fluid.fluids.LavaFluid
|
||||||
@ -44,9 +43,9 @@ class MixedFluidIT {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun World.fill() {
|
private fun World.fill() {
|
||||||
this[Vec3i(10, 2, 3)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
this[Vec3i(10, 2, 3)] = lava!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
this[Vec3i(10, 1, 3)] = StoneTest0.state
|
this[Vec3i(10, 1, 3)] = StoneTest0.state
|
||||||
this[Vec3i(10, 2, 4)] = water!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
this[Vec3i(10, 2, 4)] = water!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
this[Vec3i(10, 1, 4)] = StoneTest0.state
|
this[Vec3i(10, 1, 4)] = StoneTest0.state
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +77,7 @@ class MixedFluidIT {
|
|||||||
fun stillLavaAndLava2() {
|
fun stillLavaAndLava2() {
|
||||||
val player = createPlayer(createConnection(3))
|
val player = createPlayer(createConnection(3))
|
||||||
player.connection.world.fill()
|
player.connection.world.fill()
|
||||||
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
||||||
player.input = PlayerMovementInput(forward = true)
|
player.input = PlayerMovementInput(forward = true)
|
||||||
|
|
||||||
@ -92,8 +91,8 @@ class MixedFluidIT {
|
|||||||
fun mixedHeight1() {
|
fun mixedHeight1() {
|
||||||
val player = createPlayer(createConnection(3))
|
val player = createPlayer(createConnection(3))
|
||||||
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
||||||
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.connection.world[Vec3i(10, 3, 4)] = water!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 3, 4)] = water!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
||||||
player.runTicks(2)
|
player.runTicks(2)
|
||||||
player.input = PlayerMovementInput(jump = true, forward = true)
|
player.input = PlayerMovementInput(jump = true, forward = true)
|
||||||
@ -106,8 +105,8 @@ class MixedFluidIT {
|
|||||||
fun mixedHeight2() {
|
fun mixedHeight2() {
|
||||||
val player = createPlayer(createConnection(3))
|
val player = createPlayer(createConnection(3))
|
||||||
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
||||||
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 2, 4)] = lava!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.connection.world[Vec3i(10, 3, 4)] = water!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 3, 4)] = water!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
||||||
player.runTicks(2)
|
player.runTicks(2)
|
||||||
player.input = PlayerMovementInput(jump = true, forward = true)
|
player.input = PlayerMovementInput(jump = true, forward = true)
|
||||||
@ -120,8 +119,8 @@ class MixedFluidIT {
|
|||||||
fun mixedHeight3() {
|
fun mixedHeight3() {
|
||||||
val player = createPlayer(createConnection(3))
|
val player = createPlayer(createConnection(3))
|
||||||
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
||||||
player.connection.world[Vec3i(10, 2, 4)] = water!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 2, 4)] = water!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.connection.world[Vec3i(10, 3, 4)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 3, 4)] = lava!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
||||||
player.runTicks(2)
|
player.runTicks(2)
|
||||||
player.input = PlayerMovementInput(jump = true, forward = true)
|
player.input = PlayerMovementInput(jump = true, forward = true)
|
||||||
@ -134,8 +133,8 @@ class MixedFluidIT {
|
|||||||
fun mixedHeight4() {
|
fun mixedHeight4() {
|
||||||
val player = createPlayer(createConnection(3))
|
val player = createPlayer(createConnection(3))
|
||||||
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
player.connection.world[Vec3i(10, 1, 4)] = StoneTest0.state
|
||||||
player.connection.world[Vec3i(10, 2, 4)] = water!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 2, 4)] = water!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.connection.world[Vec3i(10, 3, 4)] = lava!!.states.withProperties(BlockProperties.FLUID_LEVEL to 7)
|
player.connection.world[Vec3i(10, 3, 4)] = lava!!.states.withProperties(FluidBlock.LEVEL to 7)
|
||||||
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
player.forceTeleport(Vec3d(10.0, 2.0, 3.8))
|
||||||
player.runTicks(2)
|
player.runTicks(2)
|
||||||
player.input = PlayerMovementInput(jump = true, forward = true)
|
player.input = PlayerMovementInput(jump = true, forward = true)
|
||||||
|
@ -18,7 +18,6 @@ import de.bixilon.kotlinglm.vec3.Vec3i
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.createPlayer
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
import de.bixilon.minosoft.data.physics.PhysicsTestUtil.runTicks
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
import de.bixilon.minosoft.data.registries.blocks.types.stone.StoneTest0
|
||||||
import de.bixilon.minosoft.data.world.WorldTestUtil.fill
|
import de.bixilon.minosoft.data.world.WorldTestUtil.fill
|
||||||
@ -32,7 +31,7 @@ abstract class StillFluidIT {
|
|||||||
connection.world.fill(
|
connection.world.fill(
|
||||||
Vec3i(-10, 16, -10),
|
Vec3i(-10, 16, -10),
|
||||||
Vec3i(20, 16, 20),
|
Vec3i(20, 16, 20),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
block!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
)
|
)
|
||||||
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
||||||
|
|
||||||
@ -43,7 +42,7 @@ abstract class StillFluidIT {
|
|||||||
connection.world.fill(
|
connection.world.fill(
|
||||||
Vec3i(-10, 16, -10),
|
Vec3i(-10, 16, -10),
|
||||||
Vec3i(20, 20, 20),
|
Vec3i(20, 20, 20),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
block!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
)
|
)
|
||||||
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
||||||
|
|
||||||
@ -60,7 +59,7 @@ abstract class StillFluidIT {
|
|||||||
player.connection.world.fill(
|
player.connection.world.fill(
|
||||||
Vec3i(4, 5, 7),
|
Vec3i(4, 5, 7),
|
||||||
Vec3i(4, 16, 7),
|
Vec3i(4, 16, 7),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
block!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
)
|
)
|
||||||
player.forceTeleport(Vec3d(4.0, 18.0, 7.0))
|
player.forceTeleport(Vec3d(4.0, 18.0, 7.0))
|
||||||
player.runTicks(10)
|
player.runTicks(10)
|
||||||
@ -72,7 +71,7 @@ abstract class StillFluidIT {
|
|||||||
player.connection.world.fill(
|
player.connection.world.fill(
|
||||||
Vec3i(4, 5, 7),
|
Vec3i(4, 5, 7),
|
||||||
Vec3i(4, 16, 7),
|
Vec3i(4, 16, 7),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
block!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
)
|
)
|
||||||
player.forceTeleport(Vec3d(4.0, 30.0, 7.0))
|
player.forceTeleport(Vec3d(4.0, 30.0, 7.0))
|
||||||
player.runTicks(35)
|
player.runTicks(35)
|
||||||
@ -100,7 +99,7 @@ abstract class StillFluidIT {
|
|||||||
connection.world.fill(
|
connection.world.fill(
|
||||||
Vec3i(-10, 16, -10),
|
Vec3i(-10, 16, -10),
|
||||||
Vec3i(20, 17, 20),
|
Vec3i(20, 17, 20),
|
||||||
block!!.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
block!!.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
)
|
)
|
||||||
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
connection.world.fill(Vec3i(-10, 15, -10), Vec3i(20, 15, 20), StoneTest0.state)
|
||||||
|
|
||||||
|
@ -36,22 +36,22 @@ class WaterFluidTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun heightLevel0() {
|
fun heightLevel0() {
|
||||||
val state = block.states.withProperties(BlockProperties.FLUID_LEVEL to 0)
|
val state = block.states.withProperties(FluidBlock.LEVEL to 0)
|
||||||
assertEquals(this.water.getHeight(state), 0.8888889f)
|
assertEquals(this.water.getHeight(state), 0.8888889f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun heightLevel2() {
|
fun heightLevel2() {
|
||||||
val state = block.states.withProperties(BlockProperties.FLUID_LEVEL to 2)
|
val state = block.states.withProperties(FluidBlock.LEVEL to 2)
|
||||||
assertEquals(this.water.getHeight(state), 0.6666667f)
|
assertEquals(this.water.getHeight(state), 0.6666667f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun heightLevel8() {
|
fun heightLevel8() {
|
||||||
val state = block.states.withProperties(BlockProperties.FLUID_LEVEL to 8)
|
val state = block.states.withProperties(FluidBlock.LEVEL to 8)
|
||||||
assertEquals(this.water.getHeight(state), 0.8888889f)
|
assertEquals(this.water.getHeight(state), 0.8888889f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun heightLevel12() {
|
fun heightLevel12() {
|
||||||
val state = block.states.withProperties(BlockProperties.FLUID_LEVEL to 12)
|
val state = block.states.withProperties(FluidBlock.LEVEL to 12)
|
||||||
assertEquals(this.water.getHeight(state), 0.8888889f)
|
assertEquals(this.water.getHeight(state), 0.8888889f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ abstract class PixLyzerLoadingTest(version: String) : RegistryLoadingTest(versio
|
|||||||
|
|
||||||
@Test(priority = 100000)
|
@Test(priority = 100000)
|
||||||
open fun loadRegistries() {
|
open fun loadRegistries() {
|
||||||
throw SkipException("temp")
|
throw SkipException("temp") // TODO: remove
|
||||||
this._registries = ITUtil.loadPixlyzerData(version)
|
this._registries = ITUtil.loadPixlyzerData(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.models.block.state.variant
|
package de.bixilon.minosoft.gui.rendering.models.block.state.variant
|
||||||
|
|
||||||
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import de.bixilon.kutil.exception.Broken
|
import de.bixilon.kutil.exception.Broken
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
@ -46,7 +47,7 @@ class PropertyVariantBlockModelTest {
|
|||||||
mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to false) to B,
|
mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to false) to B,
|
||||||
mapOf(BlockProperties.FACING to Directions.SOUTH) to C,
|
mapOf(BlockProperties.FACING to Directions.SOUTH) to C,
|
||||||
mapOf(BlockProperties.LIT to false) to D,
|
mapOf(BlockProperties.LIT to false) to D,
|
||||||
))
|
).unsafeCast())
|
||||||
assertEquals(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.EAST, BlockProperties.LIT to true), 0)), A)
|
assertEquals(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.EAST, BlockProperties.LIT to true), 0)), A)
|
||||||
assertEquals(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to false), 0)), B)
|
assertEquals(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to false), 0)), B)
|
||||||
assertNull(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to true), 0)))
|
assertNull(model.choose(PropertyBlockState(DummyBlock, mapOf(BlockProperties.FACING to Directions.WEST, BlockProperties.LIT to true), 0)))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data
|
|||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Axes {
|
enum class Axes {
|
||||||
X {
|
X {
|
||||||
@ -35,7 +34,7 @@ enum class Axes {
|
|||||||
abstract fun next(): Axes
|
abstract fun next(): Axes
|
||||||
abstract fun previous(): Axes
|
abstract fun previous(): Axes
|
||||||
|
|
||||||
companion object : ValuesEnum<Axes>, BlockPropertiesSerializer {
|
companion object : ValuesEnum<Axes> {
|
||||||
override val VALUES: Array<Axes> = values()
|
override val VALUES: Array<Axes> = values()
|
||||||
override val NAME_MAP: Map<String, Axes> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Axes> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
@ -46,9 +45,5 @@ enum class Axes {
|
|||||||
Directions.NORTH, Directions.SOUTH -> Z
|
Directions.NORTH, Directions.SOUTH -> Z
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun deserialize(value: Any): Axes {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,17 +16,12 @@ import de.bixilon.kotlinglm.mat4x4.Mat4
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
import de.bixilon.kotlinglm.vec3.swizzle.xy
|
|
||||||
import de.bixilon.kotlinglm.vec3.swizzle.xz
|
|
||||||
import de.bixilon.kotlinglm.vec3.swizzle.yz
|
|
||||||
import de.bixilon.kotlinglm.vec3.swizzle.zy
|
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||||
import de.bixilon.minosoft.data.Axes
|
import de.bixilon.minosoft.data.Axes
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.world.chunk.ChunkSection
|
import de.bixilon.minosoft.data.world.chunk.ChunkSection
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get
|
||||||
@ -134,7 +129,7 @@ enum class Directions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Directions> {
|
companion object : ValuesEnum<Directions> {
|
||||||
const val O_DOWN = 0 // Directions.DOWN.ordinal
|
const val O_DOWN = 0 // Directions.DOWN.ordinal
|
||||||
const val O_UP = 1 // Directions.UP.ordinal
|
const val O_UP = 1 // Directions.UP.ordinal
|
||||||
const val O_NORTH = 2 // Directions.NORTH.ordinal
|
const val O_NORTH = 2 // Directions.NORTH.ordinal
|
||||||
@ -157,10 +152,6 @@ enum class Directions(
|
|||||||
|
|
||||||
val XYZ = arrayOf(WEST, EAST, DOWN, UP, NORTH, SOUTH)
|
val XYZ = arrayOf(WEST, EAST, DOWN, UP, NORTH, SOUTH)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Directions {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
|
|
||||||
private const val MIN_ERROR = 0.0001f
|
private const val MIN_ERROR = 0.0001f
|
||||||
|
|
||||||
@Deprecated("outsource")
|
@Deprecated("outsource")
|
||||||
|
@ -23,8 +23,8 @@ import de.bixilon.minosoft.data.container.ItemStackUtil
|
|||||||
import de.bixilon.minosoft.data.container.stack.ItemStack
|
import de.bixilon.minosoft.data.container.stack.ItemStack
|
||||||
import de.bixilon.minosoft.data.direction.DirectionUtil.rotateY
|
import de.bixilon.minosoft.data.direction.DirectionUtil.rotateY
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isLit
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.isLit
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.CampfireBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.CampfireBlock
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
||||||
|
@ -20,7 +20,7 @@ import de.bixilon.kutil.json.JsonObject
|
|||||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||||
import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactories
|
import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactories
|
||||||
import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.AdvancedBlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.AdvancedBlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
@ -58,7 +58,7 @@ class BlockRegistry(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val properties: MutableMap<BlockProperties, MutableSet<Any>> = mutableMapOf()
|
val properties: MutableMap<BlockProperty<*>, MutableSet<Any>> = mutableMapOf()
|
||||||
|
|
||||||
val states: MutableSet<BlockState> = ObjectOpenHashSet()
|
val states: MutableSet<BlockState> = ObjectOpenHashSet()
|
||||||
for (stateJson in statesData) {
|
for (stateJson in statesData) {
|
||||||
@ -83,7 +83,7 @@ class BlockRegistry(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun flattened(block: Block, data: JsonObject, registries: Registries) {
|
fun flattened(block: Block, data: JsonObject, registries: Registries) {
|
||||||
val properties: MutableMap<BlockProperties, MutableSet<Any>> = mutableMapOf()
|
val properties: MutableMap<BlockProperty<*>, MutableSet<Any>> = mutableMapOf()
|
||||||
|
|
||||||
val states: MutableSet<BlockState> = ObjectOpenHashSet()
|
val states: MutableSet<BlockState> = ObjectOpenHashSet()
|
||||||
for ((stateId, stateJson) in data["states"].asAnyMap()) {
|
for ((stateId, stateJson) in data["states"].asAnyMap()) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Attachments {
|
enum class Attachments {
|
||||||
FLOOR,
|
FLOOR,
|
||||||
@ -25,13 +24,8 @@ enum class Attachments {
|
|||||||
DOUBLE_WALL,
|
DOUBLE_WALL,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Attachments> {
|
companion object : ValuesEnum<Attachments> {
|
||||||
override val VALUES: Array<Attachments> = values()
|
override val VALUES: Array<Attachments> = values()
|
||||||
override val NAME_MAP: Map<String, Attachments> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Attachments> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Attachments {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class BambooLeaves {
|
enum class BambooLeaves {
|
||||||
NONE,
|
NONE,
|
||||||
@ -23,12 +22,8 @@ enum class BambooLeaves {
|
|||||||
LARGE,
|
LARGE,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<BambooLeaves> {
|
companion object : ValuesEnum<BambooLeaves> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, BambooLeaves> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, BambooLeaves> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): BambooLeaves {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,19 +15,14 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class BedParts {
|
enum class BedParts {
|
||||||
HEAD,
|
HEAD,
|
||||||
FOOT,
|
FOOT,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<BedParts> {
|
companion object : ValuesEnum<BedParts> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, BedParts> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, BedParts> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): BedParts {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,165 +15,158 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.minosoft.data.Axes
|
import de.bixilon.minosoft.data.Axes
|
||||||
import de.bixilon.minosoft.data.direction.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.primitives.BooleanProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BooleanBlockPropertiesSerializer
|
import de.bixilon.minosoft.data.registries.blocks.properties.primitives.IntProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.IntBlockPropertiesSerializer
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
@Deprecated("Will be split and refactored")
|
@Deprecated("Fallback data")
|
||||||
enum class BlockProperties {
|
object BlockProperties {
|
||||||
POWERED(BooleanBlockPropertiesSerializer),
|
private val list: MutableList<BlockProperty<*>> = mutableListOf()
|
||||||
TRIGGERED(BooleanBlockPropertiesSerializer),
|
|
||||||
INVERTED(BooleanBlockPropertiesSerializer),
|
|
||||||
LIT(BooleanBlockPropertiesSerializer),
|
|
||||||
WATERLOGGED(BooleanBlockPropertiesSerializer),
|
|
||||||
STAIR_DIRECTIONAL("shape", Shapes),
|
|
||||||
STAIR_HALF("half", Halves),
|
|
||||||
SLAB_TYPE("type", Halves),
|
|
||||||
MOISTURE_LEVEL("moisture", IntBlockPropertiesSerializer),
|
|
||||||
FLUID_LEVEL("level", IntBlockPropertiesSerializer),
|
|
||||||
HONEY_LEVEL("honey_level", IntBlockPropertiesSerializer),
|
|
||||||
PISTON_EXTENDED("extended", BooleanBlockPropertiesSerializer),
|
|
||||||
PISTON_TYPE("type", PistonTypes),
|
|
||||||
PISTON_SHORT("short", BooleanBlockPropertiesSerializer),
|
|
||||||
RAILS_SHAPE("shape", Shapes),
|
|
||||||
SNOWY(BooleanBlockPropertiesSerializer),
|
|
||||||
STAGE(IntBlockPropertiesSerializer),
|
|
||||||
DISTANCE(IntBlockPropertiesSerializer),
|
|
||||||
LEAVES_PERSISTENT("persistent", BooleanBlockPropertiesSerializer),
|
|
||||||
BED_PART("part", BedParts),
|
|
||||||
BED_OCCUPIED("occupied", BooleanBlockPropertiesSerializer),
|
|
||||||
TNT_UNSTABLE("unstable", BooleanBlockPropertiesSerializer),
|
|
||||||
DOOR_HINGE("hinge", Sides),
|
|
||||||
DOOR_OPEN("open", BooleanBlockPropertiesSerializer),
|
|
||||||
AGE(IntBlockPropertiesSerializer),
|
|
||||||
INSTRUMENT(Instruments),
|
|
||||||
NOTE(IntBlockPropertiesSerializer),
|
|
||||||
REDSTONE_POWER("power", IntBlockPropertiesSerializer),
|
|
||||||
|
|
||||||
MULTIPART_NORTH("north", MultipartDirectionParser),
|
|
||||||
MULTIPART_WEST("west", MultipartDirectionParser),
|
|
||||||
MULTIPART_SOUTH("south", MultipartDirectionParser),
|
|
||||||
MULTIPART_EAST("east", MultipartDirectionParser),
|
|
||||||
MULTIPART_UP("up", MultipartDirectionParser),
|
|
||||||
MULTIPART_DOWN("down", MultipartDirectionParser),
|
|
||||||
|
|
||||||
SNOW_LAYERS("layers", IntBlockPropertiesSerializer),
|
|
||||||
FENCE_IN_WALL("in_wall", BooleanBlockPropertiesSerializer),
|
|
||||||
SCAFFOLDING_BOTTOM("bottom", BooleanBlockPropertiesSerializer),
|
|
||||||
TRIPWIRE_DISARMED("disarmed", BooleanBlockPropertiesSerializer),
|
|
||||||
TRIPWIRE_IN_AIR("in_air", BooleanBlockPropertiesSerializer),
|
|
||||||
TRIPWIRE_ATTACHED("attached", BooleanBlockPropertiesSerializer),
|
|
||||||
STRUCTURE_BLOCK_MODE("mode", StructureBlockModes),
|
|
||||||
COMMAND_BLOCK_CONDITIONAL("conditional", BooleanBlockPropertiesSerializer),
|
|
||||||
BUBBLE_COLUMN_DRAG("drag", BooleanBlockPropertiesSerializer),
|
|
||||||
BELL_ATTACHMENT("attachment", Attachments),
|
|
||||||
LANTERN_HANGING("hanging", BooleanBlockPropertiesSerializer),
|
|
||||||
SEA_PICKLE_PICKLES("pickles", IntBlockPropertiesSerializer),
|
|
||||||
LECTERN_BOOK("has_book", BooleanBlockPropertiesSerializer),
|
|
||||||
|
|
||||||
BREWING_STAND_BOTTLE_0("has_bottle_0", BooleanBlockPropertiesSerializer),
|
|
||||||
BREWING_STAND_BOTTLE_1("has_bottle_1", BooleanBlockPropertiesSerializer),
|
|
||||||
BREWING_STAND_BOTTLE_2("has_bottle_2", BooleanBlockPropertiesSerializer),
|
|
||||||
|
|
||||||
CHEST_TYPE("type", ChestTypes),
|
|
||||||
|
|
||||||
CAKE_BITES("bites", IntBlockPropertiesSerializer),
|
|
||||||
BAMBOO_LEAVES("leaves", BambooLeaves),
|
|
||||||
REPEATER_LOCKED("locked", BooleanBlockPropertiesSerializer),
|
|
||||||
REPEATER_DELAY("delay", IntBlockPropertiesSerializer),
|
|
||||||
PORTAL_FRAME_EYE("eye", BooleanBlockPropertiesSerializer),
|
|
||||||
JUKEBOX_HAS_RECORD("has_record", BooleanBlockPropertiesSerializer),
|
|
||||||
CAMPFIRE_SIGNAL_FIRE("signal_fire", BooleanBlockPropertiesSerializer),
|
|
||||||
TURTLE_EGS_EGGS("eggs", IntBlockPropertiesSerializer),
|
|
||||||
TURTLE_EGGS_HATCH("hatch", IntBlockPropertiesSerializer),
|
|
||||||
RESPAWN_ANCHOR_CHARGES("charges", IntBlockPropertiesSerializer),
|
|
||||||
CANDLES(IntBlockPropertiesSerializer),
|
|
||||||
FACE("face", Attachments),
|
|
||||||
HOPPER_ENABLED("enabled", BooleanBlockPropertiesSerializer),
|
|
||||||
|
|
||||||
DRIPSTONE_THICKNESS("thickness", Thicknesses),
|
|
||||||
|
|
||||||
|
|
||||||
LEGACY_BLOCK_UPDATE("block_update", BooleanBlockPropertiesSerializer),
|
val POWERED = BooleanProperty("powered").register()
|
||||||
LEGACY_SMOOTH("smooth", BooleanBlockPropertiesSerializer),
|
val TRIGGERED = BooleanProperty("triggered").register()
|
||||||
SCULK_SENSOR_PHASE("sculk_sensor_phase", SensorPhases),
|
val INVERTED = BooleanProperty("inverted").register()
|
||||||
DRIPSTONE_TILT("tilt", Tilts),
|
val LIT = BooleanProperty("lit").register()
|
||||||
CAVE_VINES_BERRIES("berries", BooleanBlockPropertiesSerializer),
|
val WATERLOGGED = BooleanProperty("waterlogged").register()
|
||||||
|
val STAIR_DIRECTIONAL = EnumProperty("shape", Shapes).register()
|
||||||
|
val STAIR_HALF = EnumProperty("half", Halves).register()
|
||||||
|
val SLAB_TYPE = EnumProperty("type", Halves).register()
|
||||||
|
val FLUID_LEVEL = IntProperty("level", 0..15).register()
|
||||||
|
val MOISTURE_LEVEL = IntProperty("moisture").register()
|
||||||
|
val HONEY_LEVEL = IntProperty("honey_level").register()
|
||||||
|
val PISTON_EXTENDED = BooleanProperty("extended").register()
|
||||||
|
val PISTON_TYPE = EnumProperty("type", PistonTypes).register()
|
||||||
|
val PISTON_SHORT = BooleanProperty("short").register()
|
||||||
|
val RAILS_SHAPE = EnumProperty("shape", Shapes).register()
|
||||||
|
val SNOWY = BooleanProperty("snowy").register()
|
||||||
|
val STAGE = IntProperty("stage").register()
|
||||||
|
val DISTANCE = IntProperty("distance").register()
|
||||||
|
val LEAVES_PERSISTENT = BooleanProperty("persistent").register()
|
||||||
|
val BED_PART = EnumProperty("part", BedParts).register()
|
||||||
|
val BED_OCCUPIED = BooleanProperty("occupied").register()
|
||||||
|
val TNT_UNSTABLE = BooleanProperty("unstable").register()
|
||||||
|
val DOOR_HINGE = EnumProperty("hinge", Sides).register()
|
||||||
|
val DOOR_OPEN = BooleanProperty("open").register()
|
||||||
|
val AGE = IntProperty("age").register()
|
||||||
|
val INSTRUMENT = EnumProperty("instrument", Instruments).register()
|
||||||
|
val NOTE = IntProperty("note").register()
|
||||||
|
val REDSTONE_POWER = IntProperty("power").register()
|
||||||
|
|
||||||
|
val MULTIPART_NORTH = EnumProperty("north", MultipartDirections).register()
|
||||||
|
val MULTIPART_WEST = EnumProperty("west", MultipartDirections).register()
|
||||||
|
val MULTIPART_SOUTH = EnumProperty("south", MultipartDirections).register()
|
||||||
|
val MULTIPART_EAST = EnumProperty("east", MultipartDirections).register()
|
||||||
|
val MULTIPART_UP = EnumProperty("up", MultipartDirections).register()
|
||||||
|
val MULTIPART_DOWN = EnumProperty("down", MultipartDirections).register()
|
||||||
|
|
||||||
|
val SNOW_LAYERS = IntProperty("layers").register()
|
||||||
|
val FENCE_IN_WALL = BooleanProperty("in_wall").register()
|
||||||
|
val SCAFFOLDING_BOTTOM = BooleanProperty("bottom").register()
|
||||||
|
val TRIPWIRE_DISARMED = BooleanProperty("disarmed").register()
|
||||||
|
val TRIPWIRE_IN_AIR = BooleanProperty("in_air").register()
|
||||||
|
val TRIPWIRE_ATTACHED = BooleanProperty("attached").register()
|
||||||
|
val STRUCTURE_BLOCK_MODE = EnumProperty("mode", StructureBlockModes).register()
|
||||||
|
val COMMAND_BLOCK_CONDITIONAL = BooleanProperty("conditional").register()
|
||||||
|
val BUBBLE_COLUMN_DRAG = BooleanProperty("drag").register()
|
||||||
|
val BELL_ATTACHMENT = EnumProperty("attachment", Attachments).register()
|
||||||
|
val LANTERN_HANGING = BooleanProperty("hanging").register()
|
||||||
|
val SEA_PICKLE_PICKLES = IntProperty("pickles").register()
|
||||||
|
val LECTERN_BOOK = BooleanProperty("has_book").register()
|
||||||
|
|
||||||
|
val BREWING_STAND_BOTTLE_0 = BooleanProperty("has_bottle_0").register()
|
||||||
|
val BREWING_STAND_BOTTLE_1 = BooleanProperty("has_bottle_1").register()
|
||||||
|
val BREWING_STAND_BOTTLE_2 = BooleanProperty("has_bottle_2").register()
|
||||||
|
|
||||||
|
val CHEST_TYPE = EnumProperty("type", ChestTypes).register()
|
||||||
|
|
||||||
|
val CAKE_BITES = IntProperty("bites").register()
|
||||||
|
val BAMBOO_LEAVES = EnumProperty("leaves", BambooLeaves).register()
|
||||||
|
val REPEATER_LOCKED = BooleanProperty("locked").register()
|
||||||
|
val REPEATER_DELAY = IntProperty("delay").register()
|
||||||
|
val PORTAL_FRAME_EYE = BooleanProperty("eye").register()
|
||||||
|
val JUKEBOX_HAS_RECORD = BooleanProperty("has_record").register()
|
||||||
|
val CAMPFIRE_SIGNAL_FIRE = BooleanProperty("signal_fire").register()
|
||||||
|
val TURTLE_EGS_EGGS = IntProperty("eggs").register()
|
||||||
|
val TURTLE_EGGS_HATCH = IntProperty("hatch").register()
|
||||||
|
val RESPAWN_ANCHOR_CHARGES = IntProperty("charges").register()
|
||||||
|
val CANDLES = IntProperty("candles").register()
|
||||||
|
val FACE = EnumProperty("face", Attachments).register()
|
||||||
|
val HOPPER_ENABLED = BooleanProperty("enabled").register()
|
||||||
|
|
||||||
|
val DRIPSTONE_THICKNESS = EnumProperty("thickness", Thicknesses).register()
|
||||||
|
|
||||||
|
|
||||||
VERTICAL_DIRECTION("vertical_direction", VerticalDirections),
|
val LEGACY_BLOCK_UPDATE = BooleanProperty("block_update").register()
|
||||||
|
val LEGACY_SMOOTH = BooleanProperty("smooth").register()
|
||||||
|
val SCULK_SENSOR_PHASE = EnumProperty("sculk_sensor_phase", SensorPhases).register()
|
||||||
|
val DRIPSTONE_TILT = EnumProperty("tilt", Tilts).register()
|
||||||
|
val CAVE_VINES_BERRIES = BooleanProperty("berries").register()
|
||||||
|
|
||||||
|
|
||||||
LEGACY_CHECK_DECAY("check_decay", BooleanBlockPropertiesSerializer),
|
val VERTICAL_DIRECTION = EnumProperty("vertical_direction", VerticalDirections).register()
|
||||||
LEGACY_DECAYABLE("decayable", BooleanBlockPropertiesSerializer),
|
|
||||||
LEGACY_NODROP("nodrop", BooleanBlockPropertiesSerializer),
|
|
||||||
|
|
||||||
AXIS("axis", Axes),
|
|
||||||
FACING("facing", Directions),
|
|
||||||
ROTATION("rotation", IntBlockPropertiesSerializer),
|
|
||||||
ORIENTATION("orientation", Orientations),
|
|
||||||
|
|
||||||
BLOOM("bloom", BooleanBlockPropertiesSerializer),
|
val LEGACY_CHECK_DECAY = BooleanProperty("check_decay").register()
|
||||||
|
val LEGACY_DECAYABLE = BooleanProperty("decayable").register()
|
||||||
|
val LEGACY_NODROP = BooleanProperty("nodrop").register()
|
||||||
|
|
||||||
SHRIEKING("shrieking", BooleanBlockPropertiesSerializer),
|
val AXIS = EnumProperty("axis", Axes).register()
|
||||||
CAN_SUMMON("can_summon", BooleanBlockPropertiesSerializer),
|
val FACING = EnumProperty("facing", Directions).register()
|
||||||
|
val ROTATION = IntProperty("rotation").register()
|
||||||
|
val ORIENTATION = EnumProperty("orientation", Orientations).register()
|
||||||
|
|
||||||
|
val BLOOM = BooleanProperty("bloom").register()
|
||||||
|
|
||||||
|
val SHRIEKING = BooleanProperty("shrieking").register()
|
||||||
|
val CAN_SUMMON = BooleanProperty("can_summon").register()
|
||||||
|
|
||||||
// ToDo: used in models
|
// ToDo: used in models
|
||||||
MAP("map", BooleanBlockPropertiesSerializer),
|
val MAP = BooleanProperty("map").register()
|
||||||
|
|
||||||
BOOKS_STORED("books_stored", IntBlockPropertiesSerializer),
|
val BOOKS_STORED = IntProperty("books_stored").register()
|
||||||
LAST_INTERACTION_BOOK_SLOT("last_interaction_book_slot", IntBlockPropertiesSerializer),
|
val LAST_INTERACTION_BOOK_SLOT = IntProperty("last_interaction_book_slot").register()
|
||||||
|
|
||||||
BOOK_SLOT_OCCUPIED_0("slot_0_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_0 = BooleanProperty("slot_0_occupied").register()
|
||||||
BOOK_SLOT_OCCUPIED_1("slot_1_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_1 = BooleanProperty("slot_1_occupied").register()
|
||||||
BOOK_SLOT_OCCUPIED_2("slot_2_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_2 = BooleanProperty("slot_2_occupied").register()
|
||||||
BOOK_SLOT_OCCUPIED_3("slot_3_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_3 = BooleanProperty("slot_3_occupied").register()
|
||||||
BOOK_SLOT_OCCUPIED_4("slot_4_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_4 = BooleanProperty("slot_4_occupied").register()
|
||||||
BOOK_SLOT_OCCUPIED_5("slot_5_occupied", BooleanBlockPropertiesSerializer),
|
val BOOK_SLOT_OCCUPIED_5 = BooleanProperty("slot_5_occupied").register()
|
||||||
|
|
||||||
|
|
||||||
DUSTED("dusted", IntBlockPropertiesSerializer),
|
val DUSTED = IntProperty("dusted").register()
|
||||||
FLOWER_AMOUNT("flower_amount", IntBlockPropertiesSerializer),
|
val FLOWER_AMOUNT = IntProperty("flower_amount").register()
|
||||||
|
|
||||||
CRACKED("cracked", BooleanBlockPropertiesSerializer),
|
val CRACKED = BooleanProperty("cracked").register()
|
||||||
;
|
|
||||||
|
|
||||||
val group: String
|
|
||||||
val serializer: BlockPropertiesSerializer
|
|
||||||
|
|
||||||
constructor(group: String, serializer: BlockPropertiesSerializer) {
|
@Deprecated("should not exist")
|
||||||
this.group = group
|
fun <T : BlockProperty<*>> T.register(): T {
|
||||||
this.serializer = serializer
|
list += this
|
||||||
}
|
return this
|
||||||
|
|
||||||
constructor(serializer: BlockPropertiesSerializer) {
|
|
||||||
this.group = name.lowercase(Locale.getDefault())
|
|
||||||
this.serializer = serializer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
val PROPERTIES: Map<String, List<BlockProperty<*>>> = run {
|
||||||
val PROPERTIES: Map<String, List<BlockProperties>> = run {
|
val map: MutableMap<String, MutableList<BlockProperty<*>>> = mutableMapOf()
|
||||||
val map: MutableMap<String, MutableList<BlockProperties>> = mutableMapOf()
|
|
||||||
|
|
||||||
for (value in values()) {
|
for (value in list) {
|
||||||
map.getOrPut(value.group) { mutableListOf() } += value
|
map.getOrPut(value.name) { mutableListOf() } += value
|
||||||
}
|
}
|
||||||
|
|
||||||
return@run map
|
return@run map
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseProperty(group: String, value: Any): Pair<BlockProperties, Any> {
|
fun parseProperty(group: String, value: Any): Pair<BlockProperty<*>, Any> {
|
||||||
val properties = PROPERTIES[group] ?: throw IllegalArgumentException("Can not find group: $group, expected value $value")
|
val properties = PROPERTIES[group] ?: throw IllegalArgumentException("Can not find group: $group, expected value $value")
|
||||||
|
|
||||||
var property: BlockProperties? = null
|
var property: BlockProperty<*>? = null
|
||||||
var retValue: Any? = null
|
var retValue: Any? = null
|
||||||
|
|
||||||
for (blockProperty in properties) {
|
for (blockProperty in properties) {
|
||||||
retValue = try {
|
retValue = try {
|
||||||
blockProperty.serializer.deserialize(value)
|
blockProperty.parse(value)
|
||||||
} catch (exception: Throwable) {
|
} catch (exception: Throwable) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -197,5 +190,4 @@ enum class BlockProperties {
|
|||||||
fun BlockState.isLit(): Boolean {
|
fun BlockState.isLit(): Boolean {
|
||||||
return this[LIT]
|
return this[LIT]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -11,9 +11,12 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties.serializer
|
package de.bixilon.minosoft.data.registries.blocks.properties
|
||||||
|
|
||||||
interface BlockPropertiesSerializer {
|
|
||||||
|
|
||||||
fun deserialize(value: Any): Any
|
abstract class BlockProperty<T>(
|
||||||
|
val name: String,
|
||||||
|
) {
|
||||||
|
|
||||||
|
abstract fun parse(value: Any): T
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class ChestTypes {
|
enum class ChestTypes {
|
||||||
SINGLE,
|
SINGLE,
|
||||||
@ -23,12 +22,8 @@ enum class ChestTypes {
|
|||||||
RIGHT,
|
RIGHT,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<ChestTypes> {
|
companion object : ValuesEnum<ChestTypes> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, ChestTypes> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, ChestTypes> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): ChestTypes {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2020-2023 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.data.registries.blocks.properties
|
||||||
|
|
||||||
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
|
|
||||||
|
class EnumProperty<T : Enum<*>>(
|
||||||
|
name: String,
|
||||||
|
private val values: ValuesEnum<T>,
|
||||||
|
private val allowed: Set<T>? = null,
|
||||||
|
) : BlockProperty<T>(name) {
|
||||||
|
|
||||||
|
override fun parse(value: Any): T {
|
||||||
|
val value = values[value] ?: throw IllegalArgumentException("Invalid enum value: $value")
|
||||||
|
if (allowed != null && value !in allowed) {
|
||||||
|
throw IllegalArgumentException("Enum value not allowed: $value")
|
||||||
|
}
|
||||||
|
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -13,35 +13,23 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties
|
package de.bixilon.minosoft.data.registries.blocks.properties
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import java.util.*
|
import de.bixilon.kutil.enums.AliasableEnum
|
||||||
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
|
|
||||||
enum class Halves(
|
enum class Halves(
|
||||||
vararg val aliases: Any,
|
vararg names: String,
|
||||||
) {
|
) : AliasableEnum {
|
||||||
UPPER("top"),
|
UPPER("top"),
|
||||||
LOWER("bottom"),
|
LOWER("bottom"),
|
||||||
DOUBLE,
|
DOUBLE,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer {
|
override val names: Array<String> = names.unsafeCast()
|
||||||
private val NAME_MAP: Map<Any, Halves>
|
|
||||||
|
|
||||||
init {
|
companion object : ValuesEnum<Halves> {
|
||||||
val names: MutableMap<Any, Halves> = mutableMapOf()
|
override val VALUES = values()
|
||||||
|
override val NAME_MAP = EnumUtil.getEnumValues(VALUES)
|
||||||
for (value in values()) {
|
|
||||||
names[value.name.lowercase(Locale.getDefault())] = value
|
|
||||||
for (alias in value.aliases) {
|
|
||||||
names[alias] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NAME_MAP = names
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun deserialize(value: Any): Halves {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -13,12 +13,14 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties
|
package de.bixilon.minosoft.data.registries.blocks.properties
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import java.util.*
|
import de.bixilon.kutil.enums.AliasableEnum
|
||||||
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
|
|
||||||
enum class Instruments(
|
enum class Instruments(
|
||||||
vararg val aliases: String,
|
vararg names: String,
|
||||||
) {
|
) : AliasableEnum {
|
||||||
HARP,
|
HARP,
|
||||||
BASE_DRUM("basedrum"),
|
BASE_DRUM("basedrum"),
|
||||||
SNARE,
|
SNARE,
|
||||||
@ -45,24 +47,11 @@ enum class Instruments(
|
|||||||
CUSTOM_HEAD,
|
CUSTOM_HEAD,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer {
|
override val names: Array<String> = names.unsafeCast()
|
||||||
private val NAME_MAP: Map<Any, Instruments>
|
|
||||||
|
|
||||||
init {
|
|
||||||
val names: MutableMap<Any, Instruments> = mutableMapOf()
|
|
||||||
|
|
||||||
for (value in values()) {
|
companion object : ValuesEnum<Instruments> {
|
||||||
names[value.name.lowercase(Locale.getDefault())] = value
|
override val VALUES = values()
|
||||||
for (alias in value.aliases) {
|
override val NAME_MAP = EnumUtil.getEnumValues(VALUES)
|
||||||
names[alias] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NAME_MAP = names
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun deserialize(value: Any): Instruments {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Minosoft
|
|
||||||
* Copyright (C) 2020-2022 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 <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties
|
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
enum class MultipartDirectionParser(
|
|
||||||
vararg val aliases: Any,
|
|
||||||
) {
|
|
||||||
NONE(false, "false"),
|
|
||||||
LOW,
|
|
||||||
UP,
|
|
||||||
SIDE(true, "true"),
|
|
||||||
TALL,
|
|
||||||
;
|
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer {
|
|
||||||
private val NAME_MAP: Map<Any, MultipartDirectionParser>
|
|
||||||
|
|
||||||
init {
|
|
||||||
val names: MutableMap<Any, MultipartDirectionParser> = mutableMapOf()
|
|
||||||
|
|
||||||
for (value in values()) {
|
|
||||||
names[value.name.lowercase(Locale.getDefault())] = value
|
|
||||||
for (alias in value.aliases) {
|
|
||||||
names[alias] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NAME_MAP = names
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun deserialize(value: Any): MultipartDirectionParser {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2020-2023 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.data.registries.blocks.properties
|
||||||
|
|
||||||
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
|
import de.bixilon.kutil.enums.AliasableEnum
|
||||||
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
|
|
||||||
|
enum class MultipartDirections(
|
||||||
|
vararg names: String,
|
||||||
|
) : AliasableEnum {
|
||||||
|
NONE("false"),
|
||||||
|
LOW,
|
||||||
|
UP,
|
||||||
|
SIDE("true"),
|
||||||
|
TALL,
|
||||||
|
;
|
||||||
|
|
||||||
|
override val names: Array<String> = names.unsafeCast()
|
||||||
|
|
||||||
|
companion object : ValuesEnum<MultipartDirections> {
|
||||||
|
override val VALUES: Array<MultipartDirections> = values()
|
||||||
|
override val NAME_MAP = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
|
override fun get(any: Any): MultipartDirections? {
|
||||||
|
if (any is Boolean) {
|
||||||
|
return if (any) SIDE else NONE
|
||||||
|
}
|
||||||
|
return super.get(any)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Orientations {
|
enum class Orientations {
|
||||||
DOWN_EAST,
|
DOWN_EAST,
|
||||||
@ -32,12 +31,8 @@ enum class Orientations {
|
|||||||
SOUTH_UP,
|
SOUTH_UP,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : ValuesEnum<Orientations>, BlockPropertiesSerializer {
|
companion object : ValuesEnum<Orientations> {
|
||||||
override val VALUES: Array<Orientations> = values()
|
override val VALUES: Array<Orientations> = values()
|
||||||
override val NAME_MAP: Map<String, Orientations> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Orientations> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Orientations {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,19 +15,14 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class PistonTypes {
|
enum class PistonTypes {
|
||||||
NORMAL,
|
NORMAL,
|
||||||
STICKY,
|
STICKY,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<PistonTypes> {
|
companion object : ValuesEnum<PistonTypes> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, PistonTypes> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, PistonTypes> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): PistonTypes {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class SensorPhases {
|
enum class SensorPhases {
|
||||||
INACTIVE,
|
INACTIVE,
|
||||||
@ -23,12 +22,8 @@ enum class SensorPhases {
|
|||||||
COOLDOWN,
|
COOLDOWN,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<SensorPhases> {
|
companion object : ValuesEnum<SensorPhases> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, SensorPhases> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, SensorPhases> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): SensorPhases {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Shapes {
|
enum class Shapes {
|
||||||
STRAIGHT,
|
STRAIGHT,
|
||||||
@ -35,12 +34,8 @@ enum class Shapes {
|
|||||||
ASCENDING_SOUTH,
|
ASCENDING_SOUTH,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Shapes> {
|
companion object : ValuesEnum<Shapes> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, Shapes> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Shapes> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Shapes {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,19 +15,14 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Sides {
|
enum class Sides {
|
||||||
LEFT,
|
LEFT,
|
||||||
RIGHT,
|
RIGHT,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Sides> {
|
companion object : ValuesEnum<Sides> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, Sides> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Sides> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Sides {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class StructureBlockModes {
|
enum class StructureBlockModes {
|
||||||
SAVE,
|
SAVE,
|
||||||
@ -26,12 +25,8 @@ enum class StructureBlockModes {
|
|||||||
SUBTRACT,
|
SUBTRACT,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<StructureBlockModes> {
|
companion object : ValuesEnum<StructureBlockModes> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, StructureBlockModes> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, StructureBlockModes> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): StructureBlockModes {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Thicknesses {
|
enum class Thicknesses {
|
||||||
TIP_MERGE,
|
TIP_MERGE,
|
||||||
@ -27,12 +26,8 @@ enum class Thicknesses {
|
|||||||
DOWN,
|
DOWN,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Thicknesses> {
|
companion object : ValuesEnum<Thicknesses> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, Thicknesses> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Thicknesses> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Thicknesses {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class Tilts {
|
enum class Tilts {
|
||||||
NONE,
|
NONE,
|
||||||
@ -24,12 +23,8 @@ enum class Tilts {
|
|||||||
FULL,
|
FULL,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<Tilts> {
|
companion object : ValuesEnum<Tilts> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, Tilts> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, Tilts> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): Tilts {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -15,19 +15,14 @@ package de.bixilon.minosoft.data.registries.blocks.properties
|
|||||||
|
|
||||||
import de.bixilon.kutil.enums.EnumUtil
|
import de.bixilon.kutil.enums.EnumUtil
|
||||||
import de.bixilon.kutil.enums.ValuesEnum
|
import de.bixilon.kutil.enums.ValuesEnum
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
|
|
||||||
|
|
||||||
enum class VerticalDirections {
|
enum class VerticalDirections {
|
||||||
UP,
|
UP,
|
||||||
DOWN,
|
DOWN,
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object : BlockPropertiesSerializer, ValuesEnum<VerticalDirections> {
|
companion object : ValuesEnum<VerticalDirections> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, VerticalDirections> = EnumUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, VerticalDirections> = EnumUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
override fun deserialize(value: Any): VerticalDirections {
|
|
||||||
return NAME_MAP[value] ?: throw IllegalArgumentException("No such property: $value")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -11,13 +11,14 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties.serializer
|
package de.bixilon.minosoft.data.registries.blocks.properties.primitives
|
||||||
|
|
||||||
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
|
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
object BooleanBlockPropertiesSerializer : BlockPropertiesSerializer {
|
class BooleanProperty(name: String) : BlockProperty<Boolean>(name) {
|
||||||
|
|
||||||
override fun deserialize(value: Any): Boolean {
|
override fun parse(value: Any): Boolean {
|
||||||
return value.toBoolean()
|
return value.toBoolean()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2021 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -11,13 +11,21 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.properties.serializer
|
package de.bixilon.minosoft.data.registries.blocks.properties.primitives
|
||||||
|
|
||||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
object IntBlockPropertiesSerializer : BlockPropertiesSerializer {
|
class IntProperty(
|
||||||
|
name: String,
|
||||||
|
val range: IntRange? = null,
|
||||||
|
) : BlockProperty<Int>(name) {
|
||||||
|
|
||||||
override fun deserialize(value: Any): Int {
|
override fun parse(value: Any): Int {
|
||||||
return value.toInt()
|
val value = value.toInt()
|
||||||
|
|
||||||
|
if (range != null && value !in range) throw IllegalArgumentException("Value out of range: $value (expected=$range)")
|
||||||
|
|
||||||
|
return value
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,14 +14,14 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.state
|
package de.bixilon.minosoft.data.registries.blocks.state
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.light.LightProperties
|
import de.bixilon.minosoft.data.registries.blocks.light.LightProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||||
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape
|
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape
|
||||||
|
|
||||||
open class AdvancedBlockState(
|
open class AdvancedBlockState(
|
||||||
block: Block,
|
block: Block,
|
||||||
properties: Map<BlockProperties, Any>,
|
properties: Map<BlockProperty<*>, Any>,
|
||||||
luminance: Int,
|
luminance: Int,
|
||||||
val collisionShape: AbstractVoxelShape?,
|
val collisionShape: AbstractVoxelShape?,
|
||||||
val outlineShape: AbstractVoxelShape?,
|
val outlineShape: AbstractVoxelShape?,
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.data.registries.blocks.state
|
package de.bixilon.minosoft.data.registries.blocks.state
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.error.StatelessBlockError
|
import de.bixilon.minosoft.data.registries.blocks.state.error.StatelessBlockError
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||||
@ -42,17 +42,18 @@ open class BlockState(
|
|||||||
return block.toString()
|
return block.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun withProperties(vararg properties: Pair<BlockProperties, Any>): BlockState {
|
open fun withProperties(vararg properties: Pair<BlockProperty<*>, Any>): BlockState {
|
||||||
if (properties.isEmpty()) return this
|
if (properties.isEmpty()) return this
|
||||||
throw StatelessBlockError(this)
|
throw StatelessBlockError(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
open fun withProperties(properties: Map<BlockProperty<*>, Any>): BlockState {
|
||||||
if (properties.isEmpty()) return this
|
if (properties.isEmpty()) return this
|
||||||
throw StatelessBlockError(this)
|
throw StatelessBlockError(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun cycle(property: BlockProperties): BlockState = throw StatelessBlockError(this)
|
open fun cycle(property: BlockProperty<*>): BlockState = throw StatelessBlockError(this)
|
||||||
|
|
||||||
open operator fun <T> get(property: BlockProperties): T = throw StatelessBlockError(this)
|
open operator fun <T> get(property: BlockProperty<T>): T = throw StatelessBlockError(this)
|
||||||
|
open fun <T> getOrNull(property: BlockProperty<T>): T? = throw StatelessBlockError(this)
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.data.registries.blocks.state
|
|||||||
import com.google.common.base.Objects
|
import com.google.common.base.Objects
|
||||||
import de.bixilon.kutil.array.ArrayUtil.next
|
import de.bixilon.kutil.array.ArrayUtil.next
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.manager.PropertyStateManager
|
import de.bixilon.minosoft.data.registries.blocks.state.manager.PropertyStateManager
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||||
@ -25,7 +25,7 @@ import de.bixilon.minosoft.data.text.BaseComponent
|
|||||||
|
|
||||||
open class PropertyBlockState(
|
open class PropertyBlockState(
|
||||||
block: Block,
|
block: Block,
|
||||||
val properties: Map<BlockProperties, Any>,
|
val properties: Map<BlockProperty<*>, Any>,
|
||||||
luminance: Int,
|
luminance: Int,
|
||||||
) : BlockState(block, luminance) {
|
) : BlockState(block, luminance) {
|
||||||
private val hash = Objects.hashCode(block, properties)
|
private val hash = Objects.hashCode(block, properties)
|
||||||
@ -45,7 +45,7 @@ open class PropertyBlockState(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun withProperties(vararg properties: Pair<BlockProperties, Any>): BlockState {
|
override fun withProperties(vararg properties: Pair<BlockProperty<*>, Any>): BlockState {
|
||||||
val nextProperties = this.properties.toMutableMap()
|
val nextProperties = this.properties.toMutableMap()
|
||||||
|
|
||||||
for ((key, value) in properties) {
|
for ((key, value) in properties) {
|
||||||
@ -55,7 +55,7 @@ open class PropertyBlockState(
|
|||||||
return getStateWith(nextProperties)
|
return getStateWith(nextProperties)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
override fun withProperties(properties: Map<BlockProperty<*>, Any>): BlockState {
|
||||||
val nextProperties = this.properties.toMutableMap()
|
val nextProperties = this.properties.toMutableMap()
|
||||||
|
|
||||||
for ((key, value) in properties) {
|
for ((key, value) in properties) {
|
||||||
@ -65,7 +65,7 @@ open class PropertyBlockState(
|
|||||||
return getStateWith(nextProperties)
|
return getStateWith(nextProperties)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStateWith(properties: Map<BlockProperties, Any>): BlockState {
|
private fun getStateWith(properties: Map<BlockProperty<*>, Any>): BlockState {
|
||||||
for (state in this.block.states) {
|
for (state in this.block.states) {
|
||||||
if (state !is PropertyBlockState) continue
|
if (state !is PropertyBlockState) continue
|
||||||
|
|
||||||
@ -79,16 +79,20 @@ open class PropertyBlockState(
|
|||||||
throw IllegalArgumentException("Can not find ${this.block} with properties: $properties")
|
throw IllegalArgumentException("Can not find ${this.block} with properties: $properties")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun cycle(property: BlockProperties): BlockState {
|
override fun cycle(property: BlockProperty<*>): BlockState {
|
||||||
val value: Any = this[property]
|
val value: Any = this[property]!!
|
||||||
return withProperties(property to block.states.unsafeCast<PropertyStateManager>().properties[property]!!.next(value))
|
return withProperties(property to block.states.unsafeCast<PropertyStateManager>().properties[property]!!.next(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <T> get(property: BlockProperties): T {
|
override fun <T> get(property: BlockProperty<T>): T {
|
||||||
val value = this.properties[property] ?: throw IllegalArgumentException("$this has not property $property")
|
val value = this.properties[property] ?: throw IllegalArgumentException("$this has not property $property")
|
||||||
return value.unsafeCast()
|
return value.unsafeCast()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <T> getOrNull(property: BlockProperty<T>): T? {
|
||||||
|
return this.properties[property]?.unsafeCast()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun withProperties(): BaseComponent {
|
fun withProperties(): BaseComponent {
|
||||||
val component = BaseComponent()
|
val component = BaseComponent()
|
||||||
|
@ -19,14 +19,14 @@ import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
|
|||||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||||
import de.bixilon.minosoft.data.registries.blocks.light.*
|
import de.bixilon.minosoft.data.registries.blocks.light.*
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
import de.bixilon.minosoft.data.registries.shapes.ShapeRegistry
|
import de.bixilon.minosoft.data.registries.shapes.ShapeRegistry
|
||||||
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape
|
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape
|
||||||
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape.Companion.deserialize
|
import de.bixilon.minosoft.data.registries.shapes.voxel.AbstractVoxelShape.Companion.deserialize
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class BlockStateSettings(
|
class BlockStateSettings(
|
||||||
val properties: Map<BlockProperties, Any>?,
|
val properties: Map<BlockProperty<*>, Any>?,
|
||||||
val luminance: Int,
|
val luminance: Int,
|
||||||
val collisionShape: AbstractVoxelShape?,
|
val collisionShape: AbstractVoxelShape?,
|
||||||
val outlineShape: AbstractVoxelShape?,
|
val outlineShape: AbstractVoxelShape?,
|
||||||
@ -57,11 +57,11 @@ class BlockStateSettings(
|
|||||||
return AbstractVoxelShape.EMPTY
|
return AbstractVoxelShape.EMPTY
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JsonObject.getProperties(): Map<BlockProperties, Any>? {
|
private fun JsonObject.getProperties(): Map<BlockProperty<*>, Any>? {
|
||||||
val data = this["properties"]?.toJsonObject() ?: return null
|
val data = this["properties"]?.toJsonObject() ?: return null
|
||||||
if (data.isEmpty()) return null
|
if (data.isEmpty()) return null
|
||||||
|
|
||||||
val properties: MutableMap<BlockProperties, Any> = EnumMap(BlockProperties::class.java)
|
val properties: MutableMap<BlockProperty<*>, Any> = HashMap()
|
||||||
|
|
||||||
for ((group, json) in data) {
|
for ((group, json) in data) {
|
||||||
try {
|
try {
|
||||||
|
@ -13,18 +13,18 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.state.manager
|
package de.bixilon.minosoft.data.registries.blocks.state.manager
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
|
|
||||||
interface BlockStateManager : Iterable<BlockState> {
|
interface BlockStateManager : Iterable<BlockState> {
|
||||||
val default: BlockState
|
val default: BlockState
|
||||||
|
|
||||||
|
|
||||||
fun withProperties(vararg properties: Pair<BlockProperties, Any>): BlockState {
|
fun withProperties(vararg properties: Pair<BlockProperty<*>, Any>): BlockState {
|
||||||
return this.default.withProperties(*properties)
|
return this.default.withProperties(*properties)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
fun withProperties(properties: Map<BlockProperty<*>, Any>): BlockState {
|
||||||
return this.default.withProperties(properties)
|
return this.default.withProperties(properties)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.state.manager
|
package de.bixilon.minosoft.data.registries.blocks.state.manager
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
|
|
||||||
class PropertyStateManager(
|
class PropertyStateManager(
|
||||||
val properties: Map<BlockProperties, Array<Any>>,
|
val properties: Map<BlockProperty<*>, Array<Any>>,
|
||||||
val states: Set<BlockState>,
|
val states: Set<BlockState>,
|
||||||
override val default: BlockState,
|
override val default: BlockState,
|
||||||
) : BlockStateManager {
|
) : BlockStateManager {
|
||||||
|
@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.registries.blocks.types
|
|||||||
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
||||||
import de.bixilon.minosoft.data.language.LanguageUtil.translation
|
import de.bixilon.minosoft.data.language.LanguageUtil.translation
|
||||||
import de.bixilon.minosoft.data.language.translate.Translatable
|
import de.bixilon.minosoft.data.language.translate.Translatable
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.manager.BlockStateManager
|
import de.bixilon.minosoft.data.registries.blocks.state.manager.BlockStateManager
|
||||||
@ -50,7 +50,7 @@ abstract class Block(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun updateStates(states: Set<BlockState>, default: BlockState, properties: Map<BlockProperties, Array<Any>>) {
|
fun updateStates(states: Set<BlockState>, default: BlockState, properties: Map<BlockProperty<*>, Array<Any>>) {
|
||||||
val manager = when {
|
val manager = when {
|
||||||
states.size == 1 -> SimpleStateManager(default)
|
states.size == 1 -> SimpleStateManager(default)
|
||||||
else -> PropertyStateManager(properties, states, default)
|
else -> PropertyStateManager(properties, states, default)
|
||||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.data.registries.blocks.types.fluid
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.kutil.exception.Broken
|
import de.bixilon.kutil.exception.Broken
|
||||||
import de.bixilon.minosoft.data.registries.blocks.light.CustomLightProperties
|
import de.bixilon.minosoft.data.registries.blocks.light.CustomLightProperties
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||||
@ -47,5 +48,6 @@ abstract class FluidBlock(identifier: ResourceLocation, settings: BlockSettings)
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val LIGHT_PROPERTIES = CustomLightProperties(true, false, true)
|
val LIGHT_PROPERTIES = CustomLightProperties(true, false, true)
|
||||||
|
val LEVEL = BlockProperties.FLUID_LEVEL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer
|
|||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isLit
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.isLit
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
|
@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.entities.entities.Entity
|
|||||||
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.handler.entity.Climbable
|
import de.bixilon.minosoft.data.registries.blocks.handler.entity.Climbable
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
|
@ -17,7 +17,7 @@ import de.bixilon.minosoft.camera.target.targets.BlockTarget
|
|||||||
import de.bixilon.minosoft.data.container.stack.ItemStack
|
import de.bixilon.minosoft.data.container.stack.ItemStack
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.Hands
|
import de.bixilon.minosoft.data.entities.entities.player.Hands
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isPowered
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.isPowered
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.PixLyzerBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.PixLyzerBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.InteractBlockHandler
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.InteractBlockHandler
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
|
@ -21,7 +21,7 @@ import de.bixilon.kutil.random.RandomUtil.chance
|
|||||||
import de.bixilon.minosoft.data.entities.block.CampfireBlockEntity
|
import de.bixilon.minosoft.data.entities.block.CampfireBlockEntity
|
||||||
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isLit
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.isLit
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.LitBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.LitBlock
|
||||||
|
@ -21,8 +21,8 @@ import de.bixilon.minosoft.data.container.stack.ItemStack
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.Hands
|
import de.bixilon.minosoft.data.entities.entities.player.Hands
|
||||||
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isPowered
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.isPowered
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.InteractBlockHandler
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.InteractBlockHandler
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
||||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.wall
|
|||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.Attachments
|
import de.bixilon.minosoft.data.registries.blocks.properties.Attachments
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.error.StatelessBlockError
|
import de.bixilon.minosoft.data.registries.blocks.state.error.StatelessBlockError
|
||||||
|
@ -15,8 +15,8 @@ package de.bixilon.minosoft.data.registries.fluid
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidFilled
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidFilled
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidHolder
|
import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidHolder
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
@ -130,7 +130,7 @@ abstract class Fluid(override val identifier: ResourceLocation) : RegistryItem()
|
|||||||
if (state.block is FluidFilled && state.block.fluid == this) {
|
if (state.block is FluidFilled && state.block.fluid == this) {
|
||||||
return MAX_LEVEL
|
return MAX_LEVEL
|
||||||
}
|
}
|
||||||
val level = state.get<Int?>(BlockProperties.FLUID_LEVEL) ?: return 0.0f
|
val level = state[FluidBlock.LEVEL]
|
||||||
if (level <= 0 || level >= 8) {
|
if (level <= 0 || level >= 8) {
|
||||||
return MAX_LEVEL
|
return MAX_LEVEL
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import de.bixilon.minosoft.data.container.stack.ItemStack
|
|||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
|
import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.PropertyBlockState
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign.StandingSignBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign.StandingSignBlock
|
||||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.storage
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
import de.bixilon.kutil.time.DateUtil
|
import de.bixilon.kutil.time.DateUtil
|
||||||
import de.bixilon.minosoft.data.entities.block.container.storage.StorageBlockEntity
|
import de.bixilon.minosoft.data.entities.block.container.storage.StorageBlockEntity
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.storage
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
import de.bixilon.kutil.time.DateUtil
|
import de.bixilon.kutil.time.DateUtil
|
||||||
import de.bixilon.minosoft.data.entities.block.container.storage.StorageBlockEntity
|
import de.bixilon.minosoft.data.entities.block.container.storage.StorageBlockEntity
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
|
@ -15,13 +15,13 @@ package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
|||||||
|
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import de.bixilon.kutil.json.JsonObject
|
import de.bixilon.kutil.json.JsonObject
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
class AndCondition(
|
class AndCondition(
|
||||||
val conditions: Set<BuilderCondition>,
|
val conditions: Set<BuilderCondition>,
|
||||||
) : BuilderCondition {
|
) : BuilderCondition {
|
||||||
|
|
||||||
override fun matches(properties: Map<BlockProperties, Any>): Boolean {
|
override fun matches(properties: Map<BlockProperty<*>, Any>): Boolean {
|
||||||
for (condition in conditions) {
|
for (condition in conditions) {
|
||||||
if (!condition.matches(properties)) return false
|
if (!condition.matches(properties)) return false
|
||||||
}
|
}
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
interface BuilderCondition {
|
interface BuilderCondition {
|
||||||
|
|
||||||
fun matches(properties: Map<BlockProperties, Any>): Boolean
|
fun matches(properties: Map<BlockProperty<*>, Any>): Boolean
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
||||||
|
|
||||||
import de.bixilon.kutil.json.JsonObject
|
import de.bixilon.kutil.json.JsonObject
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
class OrCondition(
|
class OrCondition(
|
||||||
val conditions: Set<BuilderCondition>,
|
val conditions: Set<BuilderCondition>,
|
||||||
) : BuilderCondition {
|
) : BuilderCondition {
|
||||||
|
|
||||||
override fun matches(properties: Map<BlockProperties, Any>): Boolean {
|
override fun matches(properties: Map<BlockProperty<*>, Any>): Boolean {
|
||||||
for (condition in conditions) {
|
for (condition in conditions) {
|
||||||
if (condition.matches(properties)) return true
|
if (condition.matches(properties)) return true
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
class PrimitiveCondition private constructor(val matches: Boolean) : BuilderCondition {
|
class PrimitiveCondition private constructor(val matches: Boolean) : BuilderCondition {
|
||||||
|
|
||||||
override fun matches(properties: Map<BlockProperties, Any>) = matches
|
override fun matches(properties: Map<BlockProperty<*>, Any>) = matches
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -16,12 +16,13 @@ package de.bixilon.minosoft.gui.rendering.models.block.state.builder.condition
|
|||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
import de.bixilon.kutil.json.JsonObject
|
import de.bixilon.kutil.json.JsonObject
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
class PropertyCondition(
|
class PropertyCondition(
|
||||||
val conditions: Map<BlockProperties, Any>,
|
val conditions: Map<BlockProperty<*>, Any>,
|
||||||
) : BuilderCondition {
|
) : BuilderCondition {
|
||||||
|
|
||||||
override fun matches(properties: Map<BlockProperties, Any>): Boolean {
|
override fun matches(properties: Map<BlockProperty<*>, Any>): Boolean {
|
||||||
for ((property, value) in this.conditions) {
|
for ((property, value) in this.conditions) {
|
||||||
val target = properties[property] ?: return false
|
val target = properties[property] ?: return false
|
||||||
if (value is Set<*>) {
|
if (value is Set<*>) {
|
||||||
@ -36,13 +37,13 @@ class PropertyCondition(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
private fun deserializeOr(property: String, list: List<String>): Pair<BlockProperties, Any> {
|
private fun deserializeOr(property: String, list: List<String>): Pair<BlockProperty<*>, Any> {
|
||||||
if (list.size == 1) {
|
if (list.size == 1) {
|
||||||
return BlockProperties.parseProperty(property, list.first())
|
return BlockProperties.parseProperty(property, list.first())
|
||||||
}
|
}
|
||||||
|
|
||||||
val values: MutableSet<Any> = mutableSetOf()
|
val values: MutableSet<Any> = mutableSetOf()
|
||||||
var blockProperty: BlockProperties? = null
|
var blockProperty: BlockProperty<*>? = null
|
||||||
|
|
||||||
for (entry in list) {
|
for (entry in list) {
|
||||||
val (entryProperty, entryValue) = BlockProperties.parseProperty(property, entry)
|
val (entryProperty, entryValue) = BlockProperties.parseProperty(property, entry)
|
||||||
@ -59,7 +60,7 @@ class PropertyCondition(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun deserialize(data: JsonObject): PropertyCondition? {
|
fun deserialize(data: JsonObject): PropertyCondition? {
|
||||||
val properties: MutableMap<BlockProperties, Any> = mutableMapOf()
|
val properties: MutableMap<BlockProperty<*>, Any> = mutableMapOf()
|
||||||
|
|
||||||
for ((key, value) in data) {
|
for ((key, value) in data) {
|
||||||
if (key == OrCondition.KEY) continue
|
if (key == OrCondition.KEY) continue
|
||||||
|
@ -13,6 +13,6 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.models.block.state.variant
|
package de.bixilon.minosoft.gui.rendering.models.block.state.variant
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
|
|
||||||
typealias BlockVariant = Map<BlockProperties, Any>
|
typealias BlockVariant = Map<BlockProperty<*>, Any>
|
||||||
|
@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.models.block.state.variant
|
|||||||
|
|
||||||
import de.bixilon.kutil.json.JsonObject
|
import de.bixilon.kutil.json.JsonObject
|
||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperty
|
||||||
import de.bixilon.minosoft.gui.rendering.models.block.state.DirectBlockModel
|
import de.bixilon.minosoft.gui.rendering.models.block.state.DirectBlockModel
|
||||||
import de.bixilon.minosoft.gui.rendering.models.block.state.apply.BlockStateApply
|
import de.bixilon.minosoft.gui.rendering.models.block.state.apply.BlockStateApply
|
||||||
import de.bixilon.minosoft.gui.rendering.models.loader.BlockLoader
|
import de.bixilon.minosoft.gui.rendering.models.loader.BlockLoader
|
||||||
@ -27,7 +28,7 @@ interface VariantBlockModel : DirectBlockModel {
|
|||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
private fun parseVariant(variant: String): BlockVariant {
|
private fun parseVariant(variant: String): BlockVariant {
|
||||||
val properties: MutableMap<BlockProperties, Any> = mutableMapOf()
|
val properties: MutableMap<BlockProperty<*>, Any> = mutableMapOf()
|
||||||
for (pair in variant.split(',')) {
|
for (pair in variant.split(',')) {
|
||||||
val (key, rawValue) = pair.split('=', limit = 2)
|
val (key, rawValue) = pair.split('=', limit = 2)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user