fix some bugs in tilling, stripping, flatting

This commit is contained in:
Bixilon 2021-05-21 23:40:35 +02:00
parent cc909f8116
commit 5150df8dec
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 35 additions and 7 deletions

View File

@ -21,10 +21,7 @@ import de.bixilon.minosoft.data.mappings.blocks.BlockUsages
import de.bixilon.minosoft.data.mappings.inventory.CreativeModeTab import de.bixilon.minosoft.data.mappings.inventory.CreativeModeTab
import de.bixilon.minosoft.data.mappings.items.armor.ArmorItem import de.bixilon.minosoft.data.mappings.items.armor.ArmorItem
import de.bixilon.minosoft.data.mappings.items.armor.HorseArmorItem import de.bixilon.minosoft.data.mappings.items.armor.HorseArmorItem
import de.bixilon.minosoft.data.mappings.items.tools.AxeItem import de.bixilon.minosoft.data.mappings.items.tools.*
import de.bixilon.minosoft.data.mappings.items.tools.MiningToolItem
import de.bixilon.minosoft.data.mappings.items.tools.SwordItem
import de.bixilon.minosoft.data.mappings.items.tools.ToolItem
import de.bixilon.minosoft.data.mappings.registry.RegistryItem import de.bixilon.minosoft.data.mappings.registry.RegistryItem
import de.bixilon.minosoft.data.mappings.registry.ResourceLocationDeserializer import de.bixilon.minosoft.data.mappings.registry.ResourceLocationDeserializer
import de.bixilon.minosoft.data.mappings.registry.Translatable import de.bixilon.minosoft.data.mappings.registry.Translatable
@ -69,6 +66,8 @@ open class Item(
"HorseArmorItem" -> HorseArmorItem(resourceLocation, mappings, data) "HorseArmorItem" -> HorseArmorItem(resourceLocation, mappings, data)
"SpawnEggItem" -> SpawnEggItem(resourceLocation, mappings, data) "SpawnEggItem" -> SpawnEggItem(resourceLocation, mappings, data)
"MusicDiscItem" -> MusicDiscItem(resourceLocation, mappings, data) "MusicDiscItem" -> MusicDiscItem(resourceLocation, mappings, data)
"ShovelItem" -> ShovelItem(resourceLocation, mappings, data)
"HoeItem" -> HoeItem(resourceLocation, mappings, data)
// "Item" -> Item(resourceLocation, data) // "Item" -> Item(resourceLocation, data)
// else -> TODO("Can not find item class: ${data["class"].asString}") // else -> TODO("Can not find item class: ${data["class"].asString}")
else -> Item(resourceLocation, mappings, data) else -> Item(resourceLocation, mappings, data)

View File

@ -14,6 +14,7 @@
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.Directions
import de.bixilon.minosoft.data.inventory.ItemStack 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
@ -22,6 +23,7 @@ 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.data.player.Hands
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
@ -43,6 +45,9 @@ open class AxeItem(
val target = strippableBlocks?.get(blockState.block) ?: return BlockUsages.PASS val target = strippableBlocks?.get(blockState.block) ?: return BlockUsages.PASS
if (connection.world[blockPosition + Directions.UP] != null) {
return BlockUsages.PASS
}
connection.world[blockPosition] = target.withProperties(blockState.properties) connection.world[blockPosition] = target.withProperties(blockState.properties)
return BlockUsages.SUCCESS return BlockUsages.SUCCESS

View File

@ -14,6 +14,7 @@
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.Directions
import de.bixilon.minosoft.data.inventory.ItemStack 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
@ -22,6 +23,7 @@ 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.data.player.Hands
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
@ -41,7 +43,13 @@ open class HoeItem(
override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages { override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages {
// ToDo: Check tags (21w19a+) // ToDo: Check tags (21w19a+)
connection.world[blockPosition] = tillableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS val nextState = tillableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS
if (connection.world[blockPosition + Directions.UP] != null) {
return BlockUsages.PASS
}
connection.world[blockPosition] = nextState
return BlockUsages.SUCCESS return BlockUsages.SUCCESS
} }
} }

View File

@ -14,6 +14,7 @@
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.Directions
import de.bixilon.minosoft.data.inventory.ItemStack 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
@ -22,6 +23,7 @@ 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.data.player.Hands
import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit import de.bixilon.minosoft.gui.rendering.input.camera.RaycastHit
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
@ -42,7 +44,13 @@ open class ShovelItem(
override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages { override fun use(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, raycastHit: RaycastHit, hands: Hands, itemStack: ItemStack): BlockUsages {
// ToDo: Check tags (21w19a+) // ToDo: Check tags (21w19a+)
connection.world[blockPosition] = flattenableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS val nextState = flattenableBlockStates?.get(blockState.block) ?: return BlockUsages.PASS
if (connection.world[blockPosition + Directions.UP] != null) {
return BlockUsages.PASS
}
connection.world[blockPosition] = nextState
return BlockUsages.SUCCESS return BlockUsages.SUCCESS
} }
} }

View File

@ -146,8 +146,16 @@ 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))
connection.sendPacket(BlockPlaceC2SP(
position = raycastHit.blockPosition,
direction = raycastHit.hitDirection,
cursorPosition = raycastHit.hitPosition,
item = connection.player.inventory.getHotbarSlot(),
hand = Hands.MAIN_HAND,
insideBlock = false, // ToDo
))
} }
BlockUsages.PASS -> { BlockUsages.PASS -> {
return return