remove move model stuff

This commit is contained in:
Bixilon 2021-11-02 11:25:13 +01:00
parent a228c4f412
commit d9e1c3b97f
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
13 changed files with 20 additions and 197 deletions

View File

@ -38,3 +38,5 @@
- Don't render bedrock on y == dimension::minHeight - Don't render bedrock on y == dimension::minHeight
- Meshing - Meshing
- Greedy meshing - Greedy meshing
- Model deciding (for pre flattening versions)
- Assets manager: Create file from jar with all models inside and load models from there (make them moddable)

View File

@ -12,7 +12,6 @@
*/ */
package de.bixilon.minosoft.data.registries.blocks package de.bixilon.minosoft.data.registries.blocks
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.VoxelShape import de.bixilon.minosoft.data.registries.VoxelShape
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
@ -22,24 +21,15 @@ import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.sounds.SoundEvent import de.bixilon.minosoft.data.registries.sounds.SoundEvent
import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.TintColorCalculator import de.bixilon.minosoft.gui.rendering.TintColorCalculator
import de.bixilon.minosoft.gui.rendering.block.models.BlockModel
import de.bixilon.minosoft.gui.rendering.block.renderable.WorldEntryRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.block.BlockRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.block.MultipartRenderer
import de.bixilon.minosoft.util.KUtil.toBoolean import de.bixilon.minosoft.util.KUtil.toBoolean
import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.toInt
import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.KUtil.unsafeCast
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import glm_.vec3.Vec3i
import java.util.* import java.util.*
import kotlin.math.abs
import kotlin.random.Random
data class BlockState( data class BlockState(
val block: Block, val block: Block,
val properties: Map<BlockProperties, Any> = mapOf(), val properties: Map<BlockProperties, Any> = mapOf(),
val renderers: MutableList<WorldEntryRenderer> = mutableListOf(),
val tintColor: RGBColor? = null, val tintColor: RGBColor? = null,
val material: Material, val material: Material,
val collisionShape: VoxelShape, val collisionShape: VoxelShape,
@ -112,50 +102,13 @@ data class BlockState(
return String.format("%s%s", block.resourceLocation, out) return String.format("%s%s", block.resourceLocation, out)
} }
fun getBlockRenderer(blockPosition: Vec3i): WorldEntryRenderer {
if (renderers.isEmpty()) {
throw IllegalArgumentException("$this has not renderer!")
}
if (renderers.size == 1 || !Minosoft.config.config.game.other.antiMoirePattern) {
return renderers[0]
}
val random = Random(getPositionSeed(blockPosition.x, blockPosition.y, blockPosition.z))
return renderers[abs(random.nextLong().toInt() % renderers.size)]
}
companion object { companion object {
fun deserialize(block: Block, registries: Registries, data: Map<String, Any>, models: Map<ResourceLocation, BlockModel>): BlockState { fun deserialize(block: Block, registries: Registries, data: Map<String, Any>): BlockState {
val properties = data["properties"]?.compoundCast()?.let { val properties = data["properties"]?.compoundCast()?.let {
getProperties(it) getProperties(it)
} ?: mutableMapOf() } ?: mutableMapOf()
val renderers: MutableList<WorldEntryRenderer> = mutableListOf()
data["render"]?.let {
when (it) {
is Collection<*> -> {
for (model in it) {
when (model) {
is Map<*, *> -> {
addBlockModel(model.asCompound(), renderers, models)
}
is Collection<*> -> {
val modelList: MutableList<WorldEntryRenderer> = mutableListOf()
for (singleModel in model) {
addBlockModel(singleModel!!.asCompound(), modelList, models)
}
renderers.add(MultipartRenderer(modelList.toList()))
}
}
}
}
is Map<*, *> -> {
addBlockModel(it.asCompound(), renderers, models)
}
else -> error("Not a render json!")
}
}
val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) } ?: block.tintColor val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) } ?: block.tintColor
@ -181,15 +134,10 @@ data class BlockState(
val occlusionShape = data["occlusion_shapes"]?.asShape() ?: VoxelShape.EMPTY val occlusionShape = data["occlusion_shapes"]?.asShape() ?: VoxelShape.EMPTY
val outlineShape = data["outline_shape"]?.asShape() ?: VoxelShape.EMPTY val outlineShape = data["outline_shape"]?.asShape() ?: VoxelShape.EMPTY
block.renderOverride?.let {
renderers.clear()
renderers.addAll(it)
}
return BlockState( return BlockState(
block = block, block = block,
properties = properties.toMap(), properties = properties.toMap(),
renderers = renderers,
tintColor = tintColor, tintColor = tintColor,
material = material, material = material,
collisionShape = collisionShape, collisionShape = collisionShape,
@ -229,11 +177,6 @@ data class BlockState(
} }
return properties return properties
} }
private fun addBlockModel(data: Map<String, Any>, renderer: MutableList<WorldEntryRenderer>, models: Map<ResourceLocation, BlockModel>) {
val model = models[ResourceLocation(data["model"].unsafeCast())] ?: error("Can not find block model ${data["model"]}")
renderer.add(BlockRenderer(data, model))
}
} }

View File

@ -30,7 +30,6 @@ import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.data.registries.registries.registry.ResourceLocationDeserializer import de.bixilon.minosoft.data.registries.registries.registry.ResourceLocationDeserializer
import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.TintColorCalculator import de.bixilon.minosoft.gui.rendering.TintColorCalculator
import de.bixilon.minosoft.gui.rendering.block.renderable.WorldEntryRenderer
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
@ -52,7 +51,6 @@ open class Block(
open val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) } open val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) }
open val randomOffsetType: RandomOffsetTypes? = data["offset_type"].nullCast<String>()?.let { RandomOffsetTypes[it] } open val randomOffsetType: RandomOffsetTypes? = data["offset_type"].nullCast<String>()?.let { RandomOffsetTypes[it] }
open val tint: ResourceLocation? = data["tint"].nullCast<String>()?.let { ResourceLocation(it) } open val tint: ResourceLocation? = data["tint"].nullCast<String>()?.let { ResourceLocation(it) }
open val renderOverride: List<WorldEntryRenderer>? = null
open var blockEntityType: BlockEntityType? = null open var blockEntityType: BlockEntityType? = null
protected set protected set
@ -130,7 +128,7 @@ open class Block(
val states: MutableSet<BlockState> = mutableSetOf() val states: MutableSet<BlockState> = mutableSetOf()
for ((stateId, stateJson) in data["states"]?.mapCast()!!) { for ((stateId, stateJson) in data["states"]?.mapCast()!!) {
check(stateJson is Map<*, *>) { "Not a state element!" } check(stateJson is Map<*, *>) { "Not a state element!" }
val state = BlockState.deserialize(block, registries, stateJson.asCompound(), registries.models) val state = BlockState.deserialize(block, registries, stateJson.asCompound())
registries.blockStateRegistry[stateId.toInt()] = state registries.blockStateRegistry[stateId.toInt()] = state
states.add(state) states.add(state)
for ((property, value) in state.properties) { for ((property, value) in state.properties) {

View File

@ -20,8 +20,6 @@ import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.fluid.Fluid import de.bixilon.minosoft.data.registries.fluid.Fluid
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.block.renderable.WorldEntryRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.fluid.FluidRenderer
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import glm_.vec3.Vec3 import glm_.vec3.Vec3
@ -31,24 +29,13 @@ import kotlin.random.Random
open class FluidBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data) { open class FluidBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data) {
open val fluid: Fluid = registries.fluidRegistry[data["still_fluid"]]!! open val fluid: Fluid = registries.fluidRegistry[data["still_fluid"]]!!
val fluidRenderer: FluidRenderer
override val renderOverride: List<WorldEntryRenderer>
init {
let {
fluidRenderer = FluidRenderer(it, fluid)
renderOverride = listOf(fluidRenderer)
}
}
override fun getOutlineShape(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i): VoxelShape { override fun getOutlineShape(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i): VoxelShape {
return VoxelShape(mutableListOf(AABB(Vec3.EMPTY, Vec3(1.0f, fluid.getHeight(blockState), 1.0f)))) return VoxelShape(mutableListOf(AABB(Vec3.EMPTY, Vec3(1.0f, fluid.getHeight(blockState), 1.0f))))
} }
override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) { override fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {
super.randomTick(connection, blockState, blockPosition, random) super.randomTick(connection, blockState, blockPosition, random)
// ToDO // ToDo
fluid.randomTick(connection, blockState, blockPosition, random) fluid.randomTick(connection, blockState, blockPosition, random)
} }

View File

@ -16,7 +16,10 @@ import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.block.BlockEntityMetaType import de.bixilon.minosoft.data.entities.block.BlockEntityMetaType
import de.bixilon.minosoft.data.entities.meta.EntityMetaData import de.bixilon.minosoft.data.entities.meta.EntityMetaData
import de.bixilon.minosoft.data.inventory.InventorySlots import de.bixilon.minosoft.data.inventory.InventorySlots
import de.bixilon.minosoft.data.registries.* import de.bixilon.minosoft.data.registries.AABB
import de.bixilon.minosoft.data.registries.DefaultRegistries
import de.bixilon.minosoft.data.registries.Motive
import de.bixilon.minosoft.data.registries.VoxelShape
import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.biomes.Biome
import de.bixilon.minosoft.data.registries.biomes.BiomeCategory import de.bixilon.minosoft.data.registries.biomes.BiomeCategory
import de.bixilon.minosoft.data.registries.biomes.BiomePrecipitation import de.bixilon.minosoft.data.registries.biomes.BiomePrecipitation
@ -40,7 +43,6 @@ import de.bixilon.minosoft.data.registries.registries.registry.*
import de.bixilon.minosoft.data.registries.sounds.SoundEvent import de.bixilon.minosoft.data.registries.sounds.SoundEvent
import de.bixilon.minosoft.data.registries.statistics.Statistic import de.bixilon.minosoft.data.registries.statistics.Statistic
import de.bixilon.minosoft.data.registries.versions.Version import de.bixilon.minosoft.data.registries.versions.Version
import de.bixilon.minosoft.gui.rendering.block.models.BlockModel
import de.bixilon.minosoft.protocol.packets.c2s.play.EntityActionC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.EntityActionC2SP
import de.bixilon.minosoft.protocol.packets.s2c.play.EntityAnimationS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityAnimationS2CP
import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF
@ -49,8 +51,6 @@ import de.bixilon.minosoft.util.KUtil.mapCast
import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.nullCast
import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.KUtil.unsafeCast
import de.bixilon.minosoft.util.collections.Clearable import de.bixilon.minosoft.util.collections.Clearable
import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.ParameterizedType import java.lang.reflect.ParameterizedType
@ -101,9 +101,6 @@ class Registries {
val containerTypeRegistry: Registry<ContainerType> = Registry() val containerTypeRegistry: Registry<ContainerType> = Registry()
val gameEventRegistry: Registry<GameEvent> = Registry() val gameEventRegistry: Registry<GameEvent> = Registry()
internal val models: MutableMap<ResourceLocation, BlockModel> = mutableMapOf()
var isFullyLoaded = false var isFullyLoaded = false
private set private set
@ -137,8 +134,6 @@ class Registries {
// pre init stuff // pre init stuff
loadShapes(pixlyzerData["shapes"]?.compoundCast()) loadShapes(pixlyzerData["shapes"]?.compoundCast())
loadBlockModels(pixlyzerData["models"]?.mapCast()?.toResourceLocationMap() ?: mutableMapOf())
// enums // enums
loadEnumRegistry(version, pixlyzerData["equipment_slots"], equipmentSlotRegistry, DefaultRegistries.EQUIPMENT_SLOTS_REGISTRY) loadEnumRegistry(version, pixlyzerData["equipment_slots"], equipmentSlotRegistry, DefaultRegistries.EQUIPMENT_SLOTS_REGISTRY)
loadEnumRegistry(version, pixlyzerData["hand_equipment_slots"], handEquipmentSlotRegistry, DefaultRegistries.HAND_EQUIPMENT_SLOTS_REGISTRY) loadEnumRegistry(version, pixlyzerData["hand_equipment_slots"], handEquipmentSlotRegistry, DefaultRegistries.HAND_EQUIPMENT_SLOTS_REGISTRY)
@ -210,36 +205,6 @@ class Registries {
return aabbs return aabbs
} }
private fun loadBlockModels(data: Map<ResourceLocation, Any>) {
for ((resourceLocation, model) in data) {
if (models.containsKey(resourceLocation)) {
continue
}
loadBlockModel(resourceLocation, model.asCompound(), data)
}
}
private fun loadBlockModel(resourceLocation: ResourceLocation, modelData: Map<String, Any>, fullModelData: Map<ResourceLocation, Any>): BlockModel {
var model = models[resourceLocation]
model?.let {
return it
}
var parent: BlockModel? = null
modelData["parent"].nullCast<String>()?.let {
val parentResourceLocation = ResourceLocation(it)
if (parentResourceLocation.path.startsWith("builtin/")) {
// ToDo
return@let
}
parent = loadBlockModel(parentResourceLocation, fullModelData[parentResourceLocation]!!.asCompound(), fullModelData)
}
model = BlockModel(parent, modelData)
models[resourceLocation] = model
return model
}
fun clear() { fun clear() {
for (field in this::class.java.fields) { for (field in this::class.java.fields) {
if (!field.type.isAssignableFrom(Clearable::class.java)) { if (!field.type.isAssignableFrom(Clearable::class.java)) {

View File

@ -20,8 +20,6 @@ import de.bixilon.minosoft.data.entities.entities.vehicle.*
import de.bixilon.minosoft.data.entities.meta.EntityMetaData import de.bixilon.minosoft.data.entities.meta.EntityMetaData
import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.world.ChunkSection import de.bixilon.minosoft.data.world.ChunkSection
import de.bixilon.minosoft.data.world.ChunkSection.Companion.indexPosition
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
@ -88,38 +86,6 @@ object VersionTweaker {
return fakeClass return fakeClass
} }
@JvmStatic
fun transformSections(sections: Map<Int, ChunkSection>, versionId: Int) {
// some blocks need to be tweaked. eg. Grass with a snow block on top becomes snowy grass block
if (versionId >= ProtocolDefinition.FLATTING_VERSION_ID) {
return
}
for ((sectionHeight, section) in sections) {
for ((index, blockState) in section.blocks.withIndex()) {
if (blockState == null) {
continue
}
val location = index.indexPosition
val newBlock = transformBlock(blockState, sections, location, sectionHeight)
if (newBlock === blockState) {
continue
}
if (newBlock == null) {
section.setBlockState(location, null)
continue
}
section.setBlockState(location, newBlock)
}
}
}
@JvmStatic
fun transformBlock(originalBlock: BlockState?, sections: Map<Int, ChunkSection>, inChunkSectionPositions: Vec3i, sectionHeight: Int): BlockState? {
// ToDo: Broken
return originalBlock
}
private fun getBlockAbove(sections: Map<Int, ChunkSection>, inChunkSectionPositions: Vec3i, sectionHeight: Int): BlockState? { private fun getBlockAbove(sections: Map<Int, ChunkSection>, inChunkSectionPositions: Vec3i, sectionHeight: Int): BlockState? {
return sections[sectionHeight]?.getBlockState(inChunkSectionPositions) return sections[sectionHeight]?.getBlockState(inChunkSectionPositions)
} }

View File

@ -21,7 +21,6 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
import de.bixilon.minosoft.data.registries.sounds.SoundEvent import de.bixilon.minosoft.data.registries.sounds.SoundEvent
import de.bixilon.minosoft.data.registries.tweaker.VersionTweaker
import de.bixilon.minosoft.data.world.biome.accessor.BiomeAccessor import de.bixilon.minosoft.data.world.biome.accessor.BiomeAccessor
import de.bixilon.minosoft.data.world.biome.accessor.NullBiomeAccessor import de.bixilon.minosoft.data.world.biome.accessor.NullBiomeAccessor
import de.bixilon.minosoft.data.world.light.WorldLightAccessor import de.bixilon.minosoft.data.world.light.WorldLightAccessor
@ -31,10 +30,8 @@ import de.bixilon.minosoft.gui.rendering.sound.AudioPlayer
import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.inChunkPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.inChunkPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.inChunkSectionPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.minus import de.bixilon.minosoft.gui.rendering.util.VecUtil.minus
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.gui.rendering.util.VecUtil.sectionHeight
import de.bixilon.minosoft.modding.event.EventInitiators import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.modding.event.events.BlockSetEvent import de.bixilon.minosoft.modding.event.events.BlockSetEvent
import de.bixilon.minosoft.modding.event.events.ChunkUnloadEvent import de.bixilon.minosoft.modding.event.events.ChunkUnloadEvent
@ -98,25 +95,18 @@ class World(
operator fun set(blockPosition: Vec3i, blockState: BlockState?) { operator fun set(blockPosition: Vec3i, blockState: BlockState?) {
val chunkPosition = blockPosition.chunkPosition val chunkPosition = blockPosition.chunkPosition
chunks[chunkPosition]?.let { chunks[chunkPosition]?.let {
val sections = it.sections ?: return
val transformedBlockState = if (connection.version.isFlattened()) {
blockState
} else {
VersionTweaker.transformBlock(blockState, sections, blockPosition.inChunkSectionPosition, blockPosition.sectionHeight)
}
val inChunkPosition = blockPosition.inChunkPosition val inChunkPosition = blockPosition.inChunkPosition
val previousBlock = it[inChunkPosition] val previousBlock = it[inChunkPosition]
if (previousBlock == transformedBlockState) { if (previousBlock == blockState) {
return return
} }
previousBlock?.block?.onBreak(connection, blockPosition, previousBlock, it.getBlockEntity(inChunkPosition)) previousBlock?.block?.onBreak(connection, blockPosition, previousBlock, it.getBlockEntity(inChunkPosition))
blockState?.block?.onPlace(connection, blockPosition, blockState) blockState?.block?.onPlace(connection, blockPosition, blockState)
it[inChunkPosition] = transformedBlockState it[inChunkPosition] = blockState
connection.fireEvent(BlockSetEvent( connection.fireEvent(BlockSetEvent(
connection = connection, connection = connection,
blockPosition = blockPosition, blockPosition = blockPosition,
blockState = transformedBlockState, blockState = blockState,
)) ))
} }
} }

View File

@ -20,14 +20,16 @@ import de.bixilon.minosoft.data.world.World
import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.Renderer import de.bixilon.minosoft.gui.rendering.Renderer
import de.bixilon.minosoft.gui.rendering.RendererBuilder import de.bixilon.minosoft.gui.rendering.RendererBuilder
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
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 glm_.vec2.Vec2i import glm_.vec2.Vec2i
class WorldRenderer( class WorldRenderer(
private val connection: PlayConnection, private val connection: PlayConnection,
val renderWindow: RenderWindow, override val renderWindow: RenderWindow,
) : Renderer { ) : Renderer {
override val renderSystem: RenderSystem = renderWindow.renderSystem
private val world: World = connection.world private val world: World = connection.world

View File

@ -87,7 +87,7 @@ class DebugHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<GridLayout>
layout += TextElement(hudRenderer, TextComponent(RunConfiguration.VERSION_STRING, ChatColors.RED)) layout += TextElement(hudRenderer, TextComponent(RunConfiguration.VERSION_STRING, ChatColors.RED))
layout += AutoTextElement(hudRenderer, 1) { "FPS ${renderWindow.renderStats.smoothAvgFPS.round10}" } layout += AutoTextElement(hudRenderer, 1) { "FPS ${renderWindow.renderStats.smoothAvgFPS.round10}" }
renderWindow[WorldRenderer]?.apply { renderWindow[WorldRenderer]?.apply {
layout += AutoTextElement(hudRenderer, 1) { "C v=${visibleChunks.size}, p=${allChunkSections.size}, q=${queuedChunks.size}, t=${connection.world.chunks.size}" } // ToDo: layout += AutoTextElement(hudRenderer, 1) { "C v=${visibleChunks.size}, p=${allChunkSections.size}, q=${queuedChunks.size}, t=${connection.world.chunks.size}" }
} }
layout += AutoTextElement(hudRenderer, 1) { "E t=${connection.world.entities.size}" } layout += AutoTextElement(hudRenderer, 1) { "E t=${connection.world.entities.size}" }

View File

@ -19,10 +19,6 @@ import de.bixilon.minosoft.data.registries.particle.data.BlockParticleData
import de.bixilon.minosoft.data.registries.particle.data.ParticleData import de.bixilon.minosoft.data.registries.particle.data.ParticleData
import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.data.text.RGBColor.Companion.asGray import de.bixilon.minosoft.data.text.RGBColor.Companion.asGray
import de.bixilon.minosoft.gui.rendering.block.renderable.WorldEntryRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.block.BlockRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.block.MultipartRenderer
import de.bixilon.minosoft.gui.rendering.block.renderable.fluid.FluidRenderer
import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.advanced.AdvancedTextureParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.advanced.AdvancedTextureParticle
import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition
@ -35,17 +31,8 @@ class BlockDustParticle(connection: PlayConnection, position: Vec3d, velocity: V
init { init {
val blockPosition = position.blockPosition val blockPosition = position.blockPosition
var renderer: WorldEntryRenderer? = data.blockState!!.getBlockRenderer(blockPosition) check(data.blockState != null)
// ToDo: Texture
if (renderer is MultipartRenderer) {
renderer = renderer.models.getOrNull(0)
}
texture = when (renderer) {
is BlockRenderer -> renderer.textureMapping.iterator().next().value // ToDo: If this is empty the rendering crashes
is FluidRenderer -> renderer.stillTexture // ToDo
else -> TODO()
}
gravityStrength = 1.0f gravityStrength = 1.0f
color = 0.6f.asGray() color = 0.6f.asGray()

View File

@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.tweaker.VersionTweaker
import de.bixilon.minosoft.data.world.ChunkData import de.bixilon.minosoft.data.world.ChunkData
import de.bixilon.minosoft.data.world.biome.source.SpatialBiomeArray import de.bixilon.minosoft.data.world.biome.source.SpatialBiomeArray
import de.bixilon.minosoft.datafixer.BlockEntityFixer.fix import de.bixilon.minosoft.datafixer.BlockEntityFixer.fix
@ -124,9 +123,6 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
} }
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
chunkData?.blocks?.let {
VersionTweaker.transformSections(it, connection.version.versionId)
}
chunkData?.let { chunkData?.let {
val chunk = connection.world.getOrCreateChunk(chunkPosition) val chunk = connection.world.getOrCreateChunk(chunkPosition)
chunk.setData(chunkData!!) chunk.setData(chunkData!!)

View File

@ -14,9 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.tweaker.VersionTweaker
import de.bixilon.minosoft.gui.rendering.util.VecUtil.inChunkSectionPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.sectionHeight
import de.bixilon.minosoft.modding.event.events.MassBlockSetEvent import de.bixilon.minosoft.modding.event.events.MassBlockSetEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
@ -88,12 +85,8 @@ class MassBlockSetS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
// tweak // tweak
if (!connection.version.isFlattened()) { if (!connection.version.isFlattened()) {
for ((key, value) in blocks) { for ((position, blockState) in blocks) {
val block = VersionTweaker.transformBlock(value, chunk.sections!!, key.inChunkSectionPosition, key.sectionHeight) chunk[position] = blockState
if (block === value) {
continue
}
chunk[key] = block
} }
} }
connection.fireEvent(MassBlockSetEvent(connection, this)) connection.fireEvent(MassBlockSetEvent(connection, this))

View File

@ -13,10 +13,8 @@
package de.bixilon.minosoft.protocol.packets.s2c.play package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.data.registries.tweaker.VersionTweaker
import de.bixilon.minosoft.data.world.ChunkData import de.bixilon.minosoft.data.world.ChunkData
import de.bixilon.minosoft.modding.event.EventInitiators import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.modding.event.events.ChunkDataChangeEvent import de.bixilon.minosoft.modding.event.events.ChunkDataChangeEvent
import de.bixilon.minosoft.modding.event.events.ChunkUnloadEvent import de.bixilon.minosoft.modding.event.events.ChunkUnloadEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
@ -73,10 +71,6 @@ class MassChunkDataS2CP() : PlayS2CPacket() {
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
// transform data // transform data
for ((chunkPosition, data) in data) { for ((chunkPosition, data) in data) {
data?.blocks?.let {
VersionTweaker.transformSections(it, connection.version.versionId)
}
data?.let { data?.let {
val chunk = connection.world.getOrCreateChunk(chunkPosition) val chunk = connection.world.getOrCreateChunk(chunkPosition)
chunk.setData(data) chunk.setData(data)