mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 18:05:51 -04:00
replace Block::randomTick with RandomDisplayTickable::randomDisplayTick
This commit is contained in:
parent
8ca6bea0c6
commit
ff13ad53eb
@ -12,7 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.data.registries.blocks.types
|
package de.bixilon.minosoft.data.registries.blocks.types
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
|
||||||
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
|
||||||
@ -28,8 +27,6 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.physics.Pushi
|
|||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
||||||
import de.bixilon.minosoft.gui.rendering.tint.TintProvider
|
import de.bixilon.minosoft.gui.rendering.tint.TintProvider
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
|
||||||
import java.util.*
|
|
||||||
import kotlin.reflect.jvm.javaField
|
import kotlin.reflect.jvm.javaField
|
||||||
|
|
||||||
abstract class Block(
|
abstract class Block(
|
||||||
@ -49,9 +46,6 @@ abstract class Block(
|
|||||||
return identifier.toString()
|
return identifier.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("Interface")
|
|
||||||
open fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) = Unit
|
|
||||||
|
|
||||||
@Deprecated("Interface")
|
@Deprecated("Interface")
|
||||||
open fun canCull(blockState: BlockState, other: BlockState): Boolean = true
|
open fun canCull(blockState: BlockState, other: BlockState): Boolean = true
|
||||||
|
|
||||||
|
@ -14,22 +14,23 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.fluid
|
package de.bixilon.minosoft.data.registries.blocks.types.fluid
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
|
||||||
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.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
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.LightedBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.LightedBlock
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.outline.OutlinedBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.outline.OutlinedBlock
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
|
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
|
||||||
import de.bixilon.minosoft.data.registries.shapes.voxel.VoxelShape
|
import de.bixilon.minosoft.data.registries.shapes.voxel.VoxelShape
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
abstract class FluidBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), FluidHolder, OutlinedBlock, LightedBlock {
|
abstract class FluidBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), FluidHolder, OutlinedBlock, LightedBlock, RandomDisplayTickable {
|
||||||
override val hardness: Float get() = Broken("Fluid is kind of unbreakable?")
|
override val hardness: Float get() = Broken("Fluid is kind of unbreakable?")
|
||||||
|
|
||||||
override fun getOutlineShape(connection: PlayConnection, blockState: BlockState): VoxelShape {
|
override fun getOutlineShape(connection: PlayConnection, blockState: BlockState): VoxelShape {
|
||||||
@ -38,8 +39,8 @@ abstract class FluidBlock(identifier: ResourceLocation, settings: BlockSettings)
|
|||||||
|
|
||||||
override fun getLightProperties(blockState: BlockState) = LIGHT_PROPERTIES
|
override fun getLightProperties(blockState: BlockState) = LIGHT_PROPERTIES
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
fluid.randomTick(connection, blockState, blockPosition, random)
|
fluid.randomTick(connection, state, position, random)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -29,16 +29,18 @@ 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.properties.LightedBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.LightedBlock
|
||||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.physics.VelocityBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.physics.VelocityBlock
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.types.properties.rendering.RandomDisplayTickable
|
||||||
import de.bixilon.minosoft.data.registries.fluid.fluids.WaterFluid
|
import de.bixilon.minosoft.data.registries.fluid.fluids.WaterFluid
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
||||||
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
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
|
||||||
import de.bixilon.minosoft.physics.entities.EntityPhysics
|
import de.bixilon.minosoft.physics.entities.EntityPhysics
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class BubbleColumnBlock(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), VelocityBlock, EntityCollisionHandler, FluidFilled, LightedBlock {
|
class BubbleColumnBlock(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), VelocityBlock, EntityCollisionHandler, FluidFilled, LightedBlock, RandomDisplayTickable {
|
||||||
override val hardness: Float get() = Broken("Fluid!")
|
override val hardness: Float get() = Broken("Fluid!")
|
||||||
override val fluid: WaterFluid = unsafeNull()
|
override val fluid: WaterFluid = unsafeNull()
|
||||||
override val velocity: Float get() = 1.0f
|
override val velocity: Float get() = 1.0f
|
||||||
@ -73,8 +75,8 @@ class BubbleColumnBlock(identifier: ResourceLocation = Companion.identifier, set
|
|||||||
|
|
||||||
override fun getLightProperties(blockState: BlockState) = FluidBlock.LIGHT_PROPERTIES
|
override fun getLightProperties(blockState: BlockState) = FluidBlock.LIGHT_PROPERTIES
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
fluid.randomTick(connection, blockState, blockPosition, random)
|
fluid.randomTick(connection, state, position, random)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : BlockFactory<BubbleColumnBlock> {
|
companion object : BlockFactory<BubbleColumnBlock> {
|
||||||
|
@ -14,29 +14,30 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer
|
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
|
||||||
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.Companion.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.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.particle.data.DustParticleData
|
import de.bixilon.minosoft.data.registries.particle.data.DustParticleData
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
import de.bixilon.minosoft.data.text.formatting.color.Colors
|
import de.bixilon.minosoft.data.text.formatting.color.Colors
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.dust.DustParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.dust.DustParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.of
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.of
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class RedstoneTorchBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : TorchBlock(resourceLocation, registries, data) {
|
open class RedstoneTorchBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : TorchBlock(resourceLocation, registries, data), RandomDisplayTickable {
|
||||||
private val redstoneDustParticle = registries.particleType[DustParticle]
|
private val redstoneDustParticle = registries.particleType[DustParticle]
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
if (!blockState.isLit()) {
|
if (!state.isLit()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
(flameParticle ?: redstoneDustParticle)?.let { connection.world += it.factory?.build(connection, Vec3d(blockPosition) + Vec3d(0.5, 0.7, 0.5) + (Vec3d.of { random.nextDouble() - 0.5 } * 0.2), Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, 1.0f, it)) }
|
(flameParticle ?: redstoneDustParticle)?.let { connection.world += it.factory?.build(connection, Vec3d(position) + Vec3d(0.5, 0.7, 0.5) + (Vec3d.of { random.nextDouble() - 0.5 } * 0.2), Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, 1.0f, it)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : PixLyzerBlockFactory<RedstoneTorchBlock> {
|
companion object : PixLyzerBlockFactory<RedstoneTorchBlock> {
|
||||||
|
@ -17,14 +17,16 @@ import de.bixilon.kotlinglm.vec3.Vec3d
|
|||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
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.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.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
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class TorchBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data) {
|
open class TorchBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), RandomDisplayTickable {
|
||||||
protected val smokeParticle = registries.particleType[SmokeParticle]
|
protected val smokeParticle = registries.particleType[SmokeParticle]
|
||||||
protected val flameParticle = registries.particleType[data["flame_particle"]]
|
protected val flameParticle = registries.particleType[data["flame_particle"]]
|
||||||
|
|
||||||
@ -35,8 +37,8 @@ open class TorchBlock(resourceLocation: ResourceLocation, registries: Registries
|
|||||||
flameParticle?.let { connection.world += it.factory?.build(connection, Vec3d(particlePosition), Vec3d.EMPTY) }
|
flameParticle?.let { connection.world += it.factory?.build(connection, Vec3d(particlePosition), Vec3d.EMPTY) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
spawnSmokeParticles(connection, blockPosition)
|
spawnSmokeParticles(connection, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : PixLyzerBlockFactory<TorchBlock> {
|
companion object : PixLyzerBlockFactory<TorchBlock> {
|
||||||
|
@ -25,6 +25,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Com
|
|||||||
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
|
||||||
|
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
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
@ -37,7 +38,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
|||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : BlockWithEntity<CampfireBlockEntity>(resourceLocation, registries, data), LitBlock {
|
open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : BlockWithEntity<CampfireBlockEntity>(resourceLocation, registries, data), LitBlock, RandomDisplayTickable {
|
||||||
val lavaParticles = data["lava_particles"]?.toBoolean() ?: true
|
val lavaParticles = data["lava_particles"]?.toBoolean() ?: true
|
||||||
|
|
||||||
private val cosySmokeParticle = registries.particleType[CampfireSmokeParticle.CosyFactory]!!
|
private val cosySmokeParticle = registries.particleType[CampfireSmokeParticle.CosyFactory]!!
|
||||||
@ -76,16 +77,16 @@ open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
if (!blockState.isLit()) {
|
if (!state.isLit()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (random.chance(10)) {
|
if (random.chance(10)) {
|
||||||
connection.world.playSoundEvent(CAMPFIRE_CRACKLE_SOUND, blockPosition + Vec3(0.5f), 0.5f + random.nextFloat(), 0.6f + random.nextFloat() * 0.7f)
|
connection.world.playSoundEvent(CAMPFIRE_CRACKLE_SOUND, position + Vec3(0.5f), 0.5f + random.nextFloat(), 0.6f + random.nextFloat() * 0.7f)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lavaParticles && random.chance(20)) {
|
if (lavaParticles && random.chance(20)) {
|
||||||
val position = Vec3d(blockPosition) + 0.5
|
val position = Vec3d(position) + 0.5
|
||||||
for (i in 0 until random.nextInt(1) + 1) {
|
for (i in 0 until random.nextInt(1) + 1) {
|
||||||
connection.world += LavaParticle(connection, position, lavaParticle.default())
|
connection.world += LavaParticle(connection, position, lavaParticle.default())
|
||||||
}
|
}
|
||||||
|
@ -14,12 +14,13 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.container.processing
|
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.container.processing
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
|
||||||
import de.bixilon.minosoft.data.entities.block.container.processing.BrewingStandBlockEntity
|
import de.bixilon.minosoft.data.entities.block.container.processing.BrewingStandBlockEntity
|
||||||
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.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.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
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.horizontal
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.horizontal
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
||||||
@ -27,16 +28,14 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
|||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class BrewingStandBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : ProcessingBlock<BrewingStandBlockEntity>(resourceLocation, registries, data) {
|
open class BrewingStandBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : ProcessingBlock<BrewingStandBlockEntity>(resourceLocation, registries, data), RandomDisplayTickable {
|
||||||
private val smokeParticle = registries.particleType[SmokeParticle]
|
private val smokeParticle = registries.particleType[SmokeParticle]
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
super.randomTick(connection, blockState, blockPosition, random)
|
|
||||||
|
|
||||||
smokeParticle?.let {
|
smokeParticle?.let {
|
||||||
connection.world += SmokeParticle(
|
connection.world += SmokeParticle(
|
||||||
connection,
|
connection,
|
||||||
blockPosition.toVec3d + Vec3d(0.4, 0.7, 0.4) + Vec3d.horizontal({ random.nextDouble() * 0.2 }, random.nextDouble() * 0.3),
|
position.toVec3d + Vec3d(0.4, 0.7, 0.4) + Vec3d.horizontal({ random.nextDouble() * 0.2 }, random.nextDouble() * 0.3),
|
||||||
Vec3d.EMPTY,
|
Vec3d.EMPTY,
|
||||||
it.default(),
|
it.default(),
|
||||||
)
|
)
|
||||||
|
@ -14,27 +14,28 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.container.storage
|
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.container.storage
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
|
||||||
import de.bixilon.minosoft.data.entities.block.container.storage.EnderChestBlockEntity
|
import de.bixilon.minosoft.data.entities.block.container.storage.EnderChestBlockEntity
|
||||||
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.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.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
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.PortalParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.PortalParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class EnderChestBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : StorageBlock<EnderChestBlockEntity>(resourceLocation, registries, data) {
|
open class EnderChestBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : StorageBlock<EnderChestBlockEntity>(resourceLocation, registries, data), RandomDisplayTickable {
|
||||||
private val portalParticle = registries.particleType[PortalParticle]
|
private val portalParticle = registries.particleType[PortalParticle]
|
||||||
|
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
portalParticle ?: return
|
portalParticle ?: return
|
||||||
for (i in 0 until 3) {
|
for (i in 0 until 3) {
|
||||||
val xFactor = random.nextInt(2) * 2 - 1
|
val xFactor = random.nextInt(2) * 2 - 1
|
||||||
val zFactor = random.nextInt(2) * 2 - 1
|
val zFactor = random.nextInt(2) * 2 - 1
|
||||||
val position = blockPosition.toVec3d + Vec3d(
|
val position = position.toVec3d + Vec3d(
|
||||||
0.5 + 0.25 * xFactor,
|
0.5 + 0.25 * xFactor,
|
||||||
random.nextDouble(),
|
random.nextDouble(),
|
||||||
0.5 + 0.25 * zFactor,
|
0.5 + 0.25 * zFactor,
|
||||||
|
@ -14,42 +14,41 @@
|
|||||||
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.portal
|
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.portal
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
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.factory.PixLyzerBlockFactory
|
import de.bixilon.minosoft.data.registries.blocks.factory.PixLyzerBlockFactory
|
||||||
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.PixLyzerBlock
|
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.PixLyzerBlock
|
||||||
|
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
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.PortalParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.PortalParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.of
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.of
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class NetherPortalBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data) {
|
open class NetherPortalBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PixLyzerBlock(resourceLocation, registries, data), RandomDisplayTickable {
|
||||||
private val portalParticleType = registries.particleType[PortalParticle]
|
private val portalParticleType = registries.particleType[PortalParticle]
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
super.randomTick(connection, blockState, blockPosition, random)
|
|
||||||
|
|
||||||
portalParticleType?.let {
|
portalParticleType?.let {
|
||||||
for (i in 0 until 4) {
|
for (i in 0 until 4) {
|
||||||
val position = Vec3d(blockPosition) + { random.nextDouble() }
|
val particlePosition = Vec3d(position) + { random.nextDouble() }
|
||||||
val velocity = Vec3d.of { (random.nextDouble() - 0.5) * 0.5 }
|
val velocity = Vec3d.of { (random.nextDouble() - 0.5) * 0.5 }
|
||||||
|
|
||||||
val factor = (random.nextInt(2) * 2 + 1).toDouble()
|
val factor = (random.nextInt(2) * 2 + 1).toDouble()
|
||||||
|
|
||||||
if (connection.world[blockPosition + Directions.WEST]?.block != this && connection.world[blockPosition + Directions.EAST]?.block != this) {
|
if (connection.world[position + Directions.WEST]?.block != this && connection.world[position + Directions.EAST]?.block != this) {
|
||||||
position.x = blockPosition.x + 0.5 + 0.25 * factor
|
particlePosition.x = position.x + 0.5 + 0.25 * factor
|
||||||
velocity.x = random.nextDouble() * 2.0 * factor
|
velocity.x = random.nextDouble() * 2.0 * factor
|
||||||
} else {
|
} else {
|
||||||
position.z = blockPosition.z + 0.5 + 0.25 * factor
|
particlePosition.z = position.z + 0.5 + 0.25 * factor
|
||||||
velocity.z = random.nextDouble() * 2.0 * factor
|
velocity.z = random.nextDouble() * 2.0 * factor
|
||||||
}
|
}
|
||||||
connection.world += PortalParticle(
|
connection.world += PortalParticle(
|
||||||
connection,
|
connection,
|
||||||
position,
|
particlePosition,
|
||||||
velocity,
|
velocity,
|
||||||
it.default(),
|
it.default(),
|
||||||
)
|
)
|
||||||
|
@ -25,17 +25,19 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Com
|
|||||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.isPowered
|
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.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.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.particle.data.DustParticleData
|
import de.bixilon.minosoft.data.registries.particle.data.DustParticleData
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
import de.bixilon.minosoft.data.text.formatting.color.Colors
|
import de.bixilon.minosoft.data.text.formatting.color.Colors
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.dust.DustParticle
|
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.dust.DustParticle
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
import de.bixilon.minosoft.input.interaction.InteractionResults
|
import de.bixilon.minosoft.input.interaction.InteractionResults
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : WallMountedBlock(resourceLocation, registries, data), InteractBlockHandler {
|
open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : WallMountedBlock(resourceLocation, registries, data), InteractBlockHandler, RandomDisplayTickable {
|
||||||
private val dustParticleType = registries.particleType[DustParticle]
|
private val dustParticleType = registries.particleType[DustParticle]
|
||||||
|
|
||||||
private fun spawnParticles(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, scale: Float) {
|
private fun spawnParticles(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, scale: Float) {
|
||||||
@ -48,12 +50,12 @@ open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries
|
|||||||
connection.world += DustParticle(connection, position, Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, scale, dustParticleType))
|
connection.world += DustParticle(connection, position, Vec3d.EMPTY, DustParticleData(Colors.TRUE_RED, scale, dustParticleType))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
|
override fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random) {
|
||||||
if (!blockState.isPowered()) {
|
if (!state.isPowered()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (random.chance(25)) {
|
if (random.chance(25)) {
|
||||||
spawnParticles(connection, blockState, blockPosition, 0.5f)
|
spawnParticles(connection, state, position, 0.5f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* 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.types.properties.rendering
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
interface RandomDisplayTickable {
|
||||||
|
|
||||||
|
fun randomDisplayTick(connection: PlayConnection, state: BlockState, position: BlockPosition, random: Random)
|
||||||
|
}
|
@ -22,6 +22,7 @@ import de.bixilon.minosoft.data.entities.block.BlockEntity
|
|||||||
import de.bixilon.minosoft.data.entities.entities.Entity
|
import de.bixilon.minosoft.data.entities.entities.Entity
|
||||||
import de.bixilon.minosoft.data.registries.biomes.Biome
|
import de.bixilon.minosoft.data.registries.biomes.Biome
|
||||||
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.dimension.DimensionProperties
|
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
|
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
|
||||||
@ -165,7 +166,7 @@ class World(
|
|||||||
border.tick()
|
border.tick()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun randomTick() {
|
fun randomDisplayTick() {
|
||||||
val origin = connection.player.physics.positionInfo.blockPosition
|
val origin = connection.player.physics.positionInfo.blockPosition
|
||||||
val chunk = this.chunks[origin.chunkPosition] ?: return
|
val chunk = this.chunks[origin.chunkPosition] ?: return
|
||||||
|
|
||||||
@ -173,12 +174,12 @@ class World(
|
|||||||
val chunkDelta = Vec2i.EMPTY
|
val chunkDelta = Vec2i.EMPTY
|
||||||
|
|
||||||
for (i in 0 until 667) {
|
for (i in 0 until 667) {
|
||||||
randomTick(16, origin, position, chunkDelta, chunk)
|
randomDisplayTick(16, origin, position, chunkDelta, chunk)
|
||||||
randomTick(32, origin, position, chunkDelta, chunk)
|
randomDisplayTick(32, origin, position, chunkDelta, chunk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun randomTick(radius: Int, origin: BlockPosition, position: BlockPosition, chunkDelta: Vec2i, chunk: Chunk) {
|
private fun randomDisplayTick(radius: Int, origin: BlockPosition, position: BlockPosition, chunkDelta: Vec2i, chunk: Chunk) {
|
||||||
position.x = origin.x + random.nextInt(-radius, radius)
|
position.x = origin.x + random.nextInt(-radius, radius)
|
||||||
position.y = origin.x + random.nextInt(-radius, radius)
|
position.y = origin.x + random.nextInt(-radius, radius)
|
||||||
position.z = origin.x + random.nextInt(-radius, radius)
|
position.z = origin.x + random.nextInt(-radius, radius)
|
||||||
@ -187,8 +188,9 @@ class World(
|
|||||||
chunkDelta.y = (origin.z - position.z) shr 4
|
chunkDelta.y = (origin.z - position.z) shr 4
|
||||||
|
|
||||||
val state = chunk.traceBlock(position.x and 0x0F, position.y, position.z and 0x0F, chunkDelta) ?: return
|
val state = chunk.traceBlock(position.x and 0x0F, position.y, position.z and 0x0F, chunkDelta) ?: return
|
||||||
|
if (state.block !is RandomDisplayTickable) return
|
||||||
|
|
||||||
state.block.randomTick(connection, state, position, random)
|
state.block.randomDisplayTick(connection, state, position, random)
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(aabb: AABB): WorldIterator {
|
operator fun get(aabb: AABB): WorldIterator {
|
||||||
|
@ -60,7 +60,7 @@ class ConnectionTicker(private val connection: PlayConnection) {
|
|||||||
connection.world.tick()
|
connection.world.tick()
|
||||||
}
|
}
|
||||||
tasks += RepeatedTask(INTERVAL, maxDelay = MAX_DELAY) {
|
tasks += RepeatedTask(INTERVAL, maxDelay = MAX_DELAY) {
|
||||||
connection.world.randomTick()
|
connection.world.randomDisplayTick()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DebugOptions.LIGHT_DEBUG_MODE || DebugOptions.INFINITE_TORCHES) {
|
if (DebugOptions.LIGHT_DEBUG_MODE || DebugOptions.INFINITE_TORCHES) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user