fix sound loading bug, implement crop blocks #28

This commit is contained in:
Bixilon 2021-11-29 21:30:11 +01:00
parent 6e044a8146
commit b5c2e9e5ca
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
11 changed files with 127 additions and 12 deletions

View File

@ -17,11 +17,14 @@ import de.bixilon.minosoft.data.registries.blocks.types.*
import de.bixilon.minosoft.data.registries.blocks.types.button.StoneButtonBlock
import de.bixilon.minosoft.data.registries.blocks.types.button.WoodenButtonBlock
import de.bixilon.minosoft.data.registries.blocks.types.leaves.LeavesBlock
import de.bixilon.minosoft.data.registries.blocks.types.plant.CropBlock
import de.bixilon.minosoft.data.registries.blocks.types.plant.PlantBlock
import de.bixilon.minosoft.data.registries.blocks.types.portal.NetherPortalBlock
import de.bixilon.minosoft.data.registries.blocks.types.redstone.ComparatorBlock
import de.bixilon.minosoft.data.registries.blocks.types.redstone.RepeaterBlock
import de.bixilon.minosoft.data.registries.blocks.types.wall.LeverBlock
import de.bixilon.minosoft.data.registries.blocks.types.water.KelpBlock
import de.bixilon.minosoft.data.registries.blocks.types.water.KelpPlantBlock
import de.bixilon.minosoft.data.registries.blocks.types.water.SeagrassBlock
import de.bixilon.minosoft.data.registries.factory.clazz.DefaultClassFactory
@ -42,8 +45,11 @@ object DefaultBlockFactories : DefaultClassFactory<BlockFactory<*>>(
RedstoneTorchBlock,
HoneyBlock,
KelpBlock,
KelpPlantBlock,
SeagrassBlock,
StoneButtonBlock,
WoodenButtonBlock,
LeavesBlock,
PlantBlock,
CropBlock,
)

View File

@ -29,7 +29,6 @@ import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.data.registries.registries.registry.ResourceLocationDeserializer
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
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.tint.TintProvider
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
@ -76,7 +75,7 @@ open class Block(
return resourceLocation.full
}
open fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? = defaultState
open fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? = defaultState
open fun onBreak(connection: PlayConnection, blockPosition: Vec3i, blockState: BlockState, blockEntity: BlockEntity?) = Unit

View File

@ -22,13 +22,12 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.materials.DefaultMaterials
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
open class DoorBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : DoubleSizeBlock(resourceLocation, registries, data) {
override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? {
override fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? {
TODO()
}

View File

@ -0,0 +1,34 @@
/*
* Minosoft
* Copyright (C) 2021 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <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.plant
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.MinecraftBlocks
import de.bixilon.minosoft.data.registries.registries.Registries
open class CropBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : PlantBlock(resourceLocation, registries, data) {
override fun canPlaceOn(blockState: BlockState): Boolean {
return blockState.block.resourceLocation == MinecraftBlocks.FARMLAND
}
companion object : BlockFactory<CropBlock> {
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): CropBlock {
return CropBlock(resourceLocation, registries, data)
}
}
}

View File

@ -0,0 +1,47 @@
/*
* Minosoft
* Copyright (C) 2021 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <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.plant
import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.MinecraftBlocks
import de.bixilon.minosoft.data.registries.blocks.types.Block
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
open class PlantBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data) {
open fun canPlaceOn(blockState: BlockState): Boolean {
return blockState.block.resourceLocation == MinecraftBlocks.DIRT || blockState.block.resourceLocation == MinecraftBlocks.FARMLAND
}
override fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? {
val below = connection.world[hit.blockPosition + hit.hitDirection + Directions.DOWN] ?: return null
if (!canPlaceOn(below)) {
return null
}
return super.getPlacementState(connection, hit)
}
companion object : BlockFactory<PlantBlock> {
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): PlantBlock {
return PlantBlock(resourceLocation, registries, data)
}
}
}

View File

@ -21,13 +21,12 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
open class ComparatorBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : RedstoneGateBlock(resourceLocation, registries, data) {
override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? {
override fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? {
TODO()
}

View File

@ -21,13 +21,12 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
open class RepeaterBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : RedstoneGateBlock(resourceLocation, registries, data) {
override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? {
override fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? {
TODO()
}

View File

@ -24,7 +24,6 @@ import de.bixilon.minosoft.data.registries.particle.data.DustParticleData
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.text.Colors
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
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.particle.types.render.texture.simple.dust.DustParticle
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
@ -56,7 +55,7 @@ open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries
}
}
override fun getPlacementState(connection: PlayConnection, raycastHit: RaycastHit): BlockState? {
override fun getPlacementState(connection: PlayConnection, hit: BlockRaycastHit): BlockState? {
TODO()
}

View File

@ -0,0 +1,33 @@
/*
* Minosoft
* Copyright (C) 2021 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <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.water
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.types.Block
import de.bixilon.minosoft.data.registries.blocks.types.FluidFillable
import de.bixilon.minosoft.data.registries.fluid.DefaultFluids
import de.bixilon.minosoft.data.registries.fluid.Fluid
import de.bixilon.minosoft.data.registries.registries.Registries
open class KelpPlantBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data), FluidFillable {
override val fluid: Fluid = registries.fluidRegistry[DefaultFluids.WATER]!!
companion object : BlockFactory<KelpPlantBlock> {
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): KelpPlantBlock {
return KelpPlantBlock(resourceLocation, registries, data)
}
}
}

View File

@ -95,6 +95,7 @@ open class Item(
}
return when (val `class` = data["class"].unsafeCast<String>()) {
"BlockItem" -> BlockItem(resourceLocation, registries, data)
"AliasedBlockItem" -> AliasedBlockItem(resourceLocation, registries, data)
"Item", "AirBlockItem" -> Item(resourceLocation, registries, data)
"ArmorItem" -> ArmorItem(resourceLocation, registries, data)
"SwordItem" -> SwordItem(resourceLocation, registries, data)
@ -114,7 +115,6 @@ open class Item(
"LilyPadItem" -> LilyPadItem(resourceLocation, registries, data)
"CommandBlockItem" -> CommandBlockItem(resourceLocation, registries, data)
"ScaffoldingItem" -> ScaffoldingItem(resourceLocation, registries, data)
"AliasedBlockItem" -> AliasedBlockItem(resourceLocation, registries, data)
"SaddleItem" -> SaddleItem(resourceLocation, registries, data)
"MinecartItem" -> MinecartItem(resourceLocation, registries, data)
"OnAStickItem" -> OnAStickItem(resourceLocation, registries, data)

View File

@ -81,7 +81,7 @@ data class Sound(
return Sound(
soundEvent = soundEvent,
path = data["name"].toResourceLocation(),
path = data["name"].toResourceLocation().sound(),
volume = data["volume"]?.toFloat() ?: 1.0f,
pitch = data["pitch"]?.toFloat() ?: 1.0f,
weight = data["weight"]?.toInt() ?: 1,