mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 20:05:02 -04:00
fix block interacting
This commit is contained in:
parent
a4a5892dc2
commit
6e044a8146
@ -28,6 +28,7 @@ import de.bixilon.minosoft.data.registries.items.Item
|
||||
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
|
||||
@ -83,7 +84,7 @@ open class Block(
|
||||
|
||||
open fun canPlaceAt(connection: PlayConnection, blockPosition: Vec3i, blockState: BlockState): Boolean = true
|
||||
|
||||
open fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
open fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
if (blockEntityType == null) {
|
||||
return InteractionResults.PASS
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||
import de.bixilon.minosoft.data.registries.items.tools.ShovelItem
|
||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
|
||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.campfire.CampfireSmokeParticle
|
||||
import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle
|
||||
@ -92,13 +92,13 @@ open class CampfireBlock(resourceLocation: ResourceLocation, registries: Registr
|
||||
}
|
||||
}
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
// ToDo: Ignite (flint and steel, etc)
|
||||
if (itemStack?.item !is ShovelItem || blockState.properties[BlockProperties.LIT] != true) {
|
||||
return super.onUse(connection, blockState, blockPosition, raycastHit, hand, itemStack)
|
||||
if (itemStack?.item !is ShovelItem || hit.blockState.properties[BlockProperties.LIT] != true) {
|
||||
return super.onUse(connection, hit, hand, itemStack)
|
||||
}
|
||||
connection.world.setBlockState(blockPosition, blockState.withProperties(BlockProperties.LIT to false))
|
||||
extinguish(connection, blockState, blockPosition)
|
||||
connection.world.setBlockState(hit.blockPosition, hit.blockState.withProperties(BlockProperties.LIT to false))
|
||||
extinguish(connection, hit.blockState, hit.blockPosition)
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
||||
|
@ -21,10 +21,10 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
|
||||
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
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class DoorBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : DoubleSizeBlock(resourceLocation, registries, data) {
|
||||
|
||||
@ -32,12 +32,12 @@ open class DoorBlock(resourceLocation: ResourceLocation, registries: Registries,
|
||||
TODO()
|
||||
}
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
if (blockState.material.resourceLocation == DefaultMaterials.METAL) {
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
if (hit.blockState.material.resourceLocation == DefaultMaterials.METAL) {
|
||||
return InteractionResults.CONSUME
|
||||
}
|
||||
|
||||
connection.world[blockPosition] = blockState.cycle(BlockProperties.DOOR_OPEN)
|
||||
connection.world[hit.blockPosition] = hit.blockState.cycle(BlockProperties.DOOR_OPEN)
|
||||
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
@ -17,16 +17,14 @@ import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
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.registries.Registries
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.RaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class NoteBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data) {
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
||||
|
@ -16,22 +16,20 @@ package de.bixilon.minosoft.data.registries.blocks.types.button
|
||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.data.registries.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||
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.RaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
abstract class AbstractButtonBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data) {
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
if (blockState.properties[BlockProperties.POWERED] == true) {
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
if (hit.blockState.properties[BlockProperties.POWERED] == true) {
|
||||
return InteractionResults.CONSUME
|
||||
}
|
||||
connection.world[blockPosition] = blockState.withProperties(BlockProperties.POWERED to true)
|
||||
connection.world[hit.blockPosition] = hit.blockState.withProperties(BlockProperties.POWERED to true)
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
}
|
||||
|
@ -20,10 +20,10 @@ import de.bixilon.minosoft.data.registries.blocks.BlockFactory
|
||||
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
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class ComparatorBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : RedstoneGateBlock(resourceLocation, registries, data) {
|
||||
|
||||
@ -31,8 +31,8 @@ open class ComparatorBlock(resourceLocation: ResourceLocation, registries: Regis
|
||||
TODO()
|
||||
}
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
connection.world[blockPosition] = blockState.cycle(BlockProperties.STRUCTURE_BLOCK_MODE)
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
connection.world[hit.blockPosition] = hit.blockState.cycle(BlockProperties.STRUCTURE_BLOCK_MODE)
|
||||
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
@ -20,10 +20,10 @@ import de.bixilon.minosoft.data.registries.blocks.BlockFactory
|
||||
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
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class RepeaterBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : RedstoneGateBlock(resourceLocation, registries, data) {
|
||||
|
||||
@ -31,8 +31,8 @@ open class RepeaterBlock(resourceLocation: ResourceLocation, registries: Registr
|
||||
TODO()
|
||||
}
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
connection.world[blockPosition] = blockState.cycle(BlockProperties.REPEATER_DELAY)
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
connection.world[hit.blockPosition] = hit.blockState.cycle(BlockProperties.REPEATER_DELAY)
|
||||
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
|
||||
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
|
||||
@ -59,10 +60,10 @@ open class LeverBlock(resourceLocation: ResourceLocation, registries: Registries
|
||||
TODO()
|
||||
}
|
||||
|
||||
override fun onUse(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
val nextState = blockState.cycle(BlockProperties.POWERED)
|
||||
connection.world[blockPosition] = nextState
|
||||
spawnParticles(connection, nextState, blockPosition, 1.0f)
|
||||
override fun onUse(connection: PlayConnection, hit: BlockRaycastHit, hand: Hands, itemStack: ItemStack?): InteractionResults {
|
||||
val nextState = hit.blockState.cycle(BlockProperties.POWERED)
|
||||
connection.world[hit.blockPosition] = nextState
|
||||
spawnParticles(connection, nextState, hit.blockPosition, 1.0f)
|
||||
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.abilities.Gamemodes
|
||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.data.registries.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||
import de.bixilon.minosoft.data.registries.items.Item
|
||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||
@ -56,7 +57,12 @@ open class BlockItem(
|
||||
}
|
||||
|
||||
|
||||
val placeBlockState = block!!.getPlacementState(connection, raycastHit) ?: return InteractionResults.PASS
|
||||
var placeBlockState: BlockState = block!!.defaultState
|
||||
try {
|
||||
placeBlockState = block.getPlacementState(connection, raycastHit) ?: return InteractionResults.PASS
|
||||
} catch (exception: Exception) {
|
||||
exception.printStackTrace()
|
||||
}
|
||||
|
||||
val collisionShape = placeBlockState.collisionShape + placePosition
|
||||
for (entity in connection.world.entities) {
|
||||
|
@ -85,10 +85,16 @@ class InteractInteractionHandler(
|
||||
hand = hand,
|
||||
insideBlock = false, // ToDo: insideBlock
|
||||
))
|
||||
|
||||
if (connection.player.gamemode == Gamemodes.SPECTATOR) {
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
||||
val result = hit.blockState.block.onUse(connection, hit, hand, item)
|
||||
if (result == InteractionResults.SUCCESS) {
|
||||
return InteractionResults.SUCCESS
|
||||
}
|
||||
|
||||
if (item == null) {
|
||||
return InteractionResults.PASS
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user