mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 02:15:34 -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 {
|
fun withProperties(vararg properties: Pair<BlockProperties, Any>): BlockState {
|
||||||
|
return withProperties(properties.toMap())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
||||||
val newProperties = this.properties.toMutableMap()
|
val newProperties = this.properties.toMutableMap()
|
||||||
for ((key, value) in properties) {
|
for ((key, value) in properties) {
|
||||||
newProperties[key] = value
|
newProperties[key] = value
|
||||||
|
@ -91,6 +91,10 @@ open class Block(
|
|||||||
return this.defaultState.withProperties(*properties)
|
return this.defaultState.withProperties(*properties)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun withProperties(properties: Map<BlockProperties, Any>): BlockState {
|
||||||
|
return this.defaultState.withProperties(properties)
|
||||||
|
}
|
||||||
|
|
||||||
companion object : ResourceLocationDeserializer<Block> {
|
companion object : ResourceLocationDeserializer<Block> {
|
||||||
override fun deserialize(mappings: Registries?, resourceLocation: ResourceLocation, data: JsonObject): Block {
|
override fun deserialize(mappings: Registries?, resourceLocation: ResourceLocation, data: JsonObject): Block {
|
||||||
check(mappings != null) { "Registries is null!" }
|
check(mappings != null) { "Registries is null!" }
|
||||||
|
@ -14,21 +14,37 @@
|
|||||||
package de.bixilon.minosoft.data.mappings.items.tools
|
package de.bixilon.minosoft.data.mappings.items.tools
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
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.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.blocks.types.Block
|
||||||
import de.bixilon.minosoft.data.mappings.versions.Registries
|
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(
|
open class AxeItem(
|
||||||
resourceLocation: ResourceLocation,
|
resourceLocation: ResourceLocation,
|
||||||
registries: Registries,
|
registries: Registries,
|
||||||
data: JsonObject,
|
data: JsonObject,
|
||||||
) : MiningToolItem(resourceLocation, registries, data) {
|
) : MiningToolItem(resourceLocation, registries, data) {
|
||||||
val strippableBlocks: List<Block>? = data["strippables_blocks"]?.asJsonArray?.let {
|
val strippableBlocks: Map<Block, Block>? = data["strippables_blocks"]?.asJsonObject?.let {
|
||||||
val strippableBlocks: MutableList<Block> = mutableListOf()
|
val items: MutableMap<Block, Block> = mutableMapOf()
|
||||||
for (id in it) {
|
for ((origin, target) in it.entrySet()) {
|
||||||
strippableBlocks += registries.blockRegistry[id.asInt]
|
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
|
package de.bixilon.minosoft.data.mappings.items.tools
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
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.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.mappings.blocks.BlockState
|
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.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(
|
open class HoeItem(
|
||||||
resourceLocation: ResourceLocation,
|
resourceLocation: ResourceLocation,
|
||||||
registries: Registries,
|
registries: Registries,
|
||||||
data: JsonObject,
|
data: JsonObject,
|
||||||
) : MiningToolItem(resourceLocation, registries, data) {
|
) : MiningToolItem(resourceLocation, registries, data) {
|
||||||
val tillableBlocKStates: List<BlockState>? = data["tillables_block_states"]?.asJsonArray?.let {
|
val tillableBlockStates: Map<Block, BlockState>? = data["tillables_block_states"]?.asJsonObject?.let {
|
||||||
val diggableBlocks: MutableList<BlockState> = mutableListOf()
|
val items: MutableMap<Block, BlockState> = mutableMapOf()
|
||||||
for (id in it) {
|
for ((origin, target) in it.entrySet()) {
|
||||||
diggableBlocks += registries.getBlockState(id.asInt)!!
|
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
|
package de.bixilon.minosoft.data.mappings.items.tools
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
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.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.mappings.blocks.BlockState
|
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.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(
|
open class ShovelItem(
|
||||||
resourceLocation: ResourceLocation,
|
resourceLocation: ResourceLocation,
|
||||||
registries: Registries,
|
registries: Registries,
|
||||||
data: JsonObject,
|
data: JsonObject,
|
||||||
) : MiningToolItem(resourceLocation, registries, data) {
|
) : MiningToolItem(resourceLocation, registries, data) {
|
||||||
val flattenableBlockStates: List<BlockState>? = data["flattenables_block_states"]?.asJsonArray?.let {
|
val flattenableBlockStates: Map<Block, BlockState>? = data["flattenables_block_states"]?.asJsonObject?.let {
|
||||||
val flattenableBlockStates: MutableList<BlockState> = mutableListOf()
|
val items: MutableMap<Block, BlockState> = mutableMapOf()
|
||||||
for (id in it) {
|
for ((origin, target) in it.entrySet()) {
|
||||||
flattenableBlockStates += registries.getBlockState(id.asInt)!!
|
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)) {
|
when (itemInHand.item.use(connection, raycastHit.blockState, raycastHit.blockPosition, raycastHit, Hands.MAIN_HAND, itemInHand)) {
|
||||||
BlockUsages.SUCCESS -> {
|
BlockUsages.SUCCESS -> {
|
||||||
|
// ToDo: Interact with block?
|
||||||
connection.sendPacket(ArmSwingC2SP(Hands.MAIN_HAND))
|
connection.sendPacket(ArmSwingC2SP(Hands.MAIN_HAND))
|
||||||
}
|
}
|
||||||
BlockUsages.PASS -> {
|
BlockUsages.PASS -> {
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user