mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 18:05:51 -04:00
wip block tilling, flatting, stripping
This commit is contained in:
parent
1fc64ca7ac
commit
cc909f8116
@ -229,6 +229,10 @@ data class BlockState(
|
||||
|
||||
|
||||
fun withProperties(vararg properties: Pair<BlockProperties, Any>): BlockState {
|
||||
return withProperties(properties.toMap())
|
||||
}
|
||||
|
||||
fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
||||
val newProperties = this.properties.toMutableMap()
|
||||
for ((key, value) in properties) {
|
||||
newProperties[key] = value
|
||||
|
@ -91,6 +91,10 @@ open class Block(
|
||||
return this.defaultState.withProperties(*properties)
|
||||
}
|
||||
|
||||
fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
||||
return this.defaultState.withProperties(properties)
|
||||
}
|
||||
|
||||
companion object : ResourceLocationDeserializer<Block> {
|
||||
override fun deserialize(mappings: Registries?, resourceLocation: ResourceLocation, data: JsonObject): Block {
|
||||
check(mappings != null) { "Registries is null!" }
|
||||
|
@ -14,21 +14,37 @@
|
||||
package de.bixilon.minosoft.data.mappings.items.tools
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockUsages
|
||||
import de.bixilon.minosoft.data.mappings.blocks.types.Block
|
||||
import de.bixilon.minosoft.data.mappings.versions.Registries
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
|
||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class AxeItem(
|
||||
resourceLocation: ResourceLocation,
|
||||
registries: Registries,
|
||||
data: JsonObject,
|
||||
) : MiningToolItem(resourceLocation, registries, data) {
|
||||
val strippableBlocks: List<Block>? = data["strippables_blocks"]?.asJsonArray?.let {
|
||||
val strippableBlocks: MutableList<Block> = mutableListOf()
|
||||
for (id in it) {
|
||||
strippableBlocks += registries.blockRegistry[id.asInt]
|
||||
val strippableBlocks: Map<Block, Block>? = data["strippables_blocks"]?.asJsonObject?.let {
|
||||
val items: MutableMap<Block, Block> = mutableMapOf()
|
||||
for ((origin, target) in it.entrySet()) {
|
||||
items[registries.blockRegistry[origin.toInt()]] = registries.blockRegistry[target.asInt]
|
||||
}
|
||||
strippableBlocks.toList()
|
||||
items.toMap()
|
||||
}
|
||||
|
||||
override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages {
|
||||
// ToDo: Check tags (21w19a+)
|
||||
|
||||
val target = strippableBlocks?.get(blockState.block) ?: return BlockUsages.PASS
|
||||
|
||||
|
||||
connection.world[blockPosition] = target.withProperties(blockState.properties)
|
||||
return BlockUsages.SUCCESS
|
||||
}
|
||||
}
|
||||
|
@ -14,21 +14,34 @@
|
||||
package de.bixilon.minosoft.data.mappings.items.tools
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockUsages
|
||||
import de.bixilon.minosoft.data.mappings.blocks.types.Block
|
||||
import de.bixilon.minosoft.data.mappings.versions.Registries
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
|
||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class HoeItem(
|
||||
resourceLocation: ResourceLocation,
|
||||
registries: Registries,
|
||||
data: JsonObject,
|
||||
) : MiningToolItem(resourceLocation, registries, data) {
|
||||
val tillableBlocKStates: List<BlockState>? = data["tillables_block_states"]?.asJsonArray?.let {
|
||||
val diggableBlocks: MutableList<BlockState> = mutableListOf()
|
||||
for (id in it) {
|
||||
diggableBlocks += registries.getBlockState(id.asInt)!!
|
||||
val tillableBlockStates: Map<Block, BlockState>? = data["tillables_block_states"]?.asJsonObject?.let {
|
||||
val items: MutableMap<Block, BlockState> = mutableMapOf()
|
||||
for ((origin, target) in it.entrySet()) {
|
||||
items[registries.blockRegistry[origin.toInt()]] = registries.getBlockState(target.asInt)!!
|
||||
}
|
||||
diggableBlocks.toList()
|
||||
items.toMap()
|
||||
}
|
||||
|
||||
override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages {
|
||||
// ToDo: Check tags (21w19a+)
|
||||
|
||||
connection.world[blockPosition] = tillableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS
|
||||
return BlockUsages.SUCCESS
|
||||
}
|
||||
}
|
||||
|
@ -14,21 +14,35 @@
|
||||
package de.bixilon.minosoft.data.mappings.items.tools
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.mappings.blocks.BlockUsages
|
||||
import de.bixilon.minosoft.data.mappings.blocks.types.Block
|
||||
import de.bixilon.minosoft.data.mappings.versions.Registries
|
||||
import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
|
||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||
import glm_.vec3.Vec3i
|
||||
|
||||
open class ShovelItem(
|
||||
resourceLocation: ResourceLocation,
|
||||
registries: Registries,
|
||||
data: JsonObject,
|
||||
) : MiningToolItem(resourceLocation, registries, data) {
|
||||
val flattenableBlockStates: List<BlockState>? = data["flattenables_block_states"]?.asJsonArray?.let {
|
||||
val flattenableBlockStates: MutableList<BlockState> = mutableListOf()
|
||||
for (id in it) {
|
||||
flattenableBlockStates += registries.getBlockState(id.asInt)!!
|
||||
val flattenableBlockStates: Map<Block, BlockState>? = data["flattenables_block_states"]?.asJsonObject?.let {
|
||||
val items: MutableMap<Block, BlockState> = mutableMapOf()
|
||||
for ((origin, target) in it.entrySet()) {
|
||||
items[registries.blockRegistry[origin.toInt()]] = registries.getBlockState(target.asInt)!!
|
||||
}
|
||||
flattenableBlockStates.toList()
|
||||
items.toMap()
|
||||
}
|
||||
|
||||
|
||||
override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages {
|
||||
// ToDo: Check tags (21w19a+)
|
||||
|
||||
connection.world[blockPosition] = flattenableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS
|
||||
return BlockUsages.SUCCESS
|
||||
}
|
||||
}
|
||||
|
@ -144,9 +144,9 @@ class InteractionHandler(
|
||||
}
|
||||
|
||||
|
||||
|
||||
when (itemInHand.item.use(connection, raycastHit.blockState, raycastHit.blockPosition, raycastHit, Hands.MAIN_HAND, itemInHand)) {
|
||||
BlockUsages.SUCCESS -> {
|
||||
// ToDo: Interact with block?
|
||||
connection.sendPacket(ArmSwingC2SP(Hands.MAIN_HAND))
|
||||
}
|
||||
BlockUsages.PASS -> {
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user