From 5150df8deca1d6690676779b9f01f23818b2006c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 21 May 2021 23:40:35 +0200 Subject: [PATCH] fix some bugs in tilling, stripping, flatting --- .../de/bixilon/minosoft/data/mappings/items/Item.kt | 7 +++---- .../minosoft/data/mappings/items/tools/AxeItem.kt | 5 +++++ .../minosoft/data/mappings/items/tools/HoeItem.kt | 10 +++++++++- .../minosoft/data/mappings/items/tools/ShovelItem.kt | 10 +++++++++- .../minosoft/gui/rendering/input/InteractionHandler.kt | 10 +++++++++- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/Item.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/Item.kt index e9b646cb3..aa938a8be 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/Item.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/Item.kt @@ -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.items.armor.ArmorItem 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.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.items.tools.* import de.bixilon.minosoft.data.mappings.registry.RegistryItem import de.bixilon.minosoft.data.mappings.registry.ResourceLocationDeserializer import de.bixilon.minosoft.data.mappings.registry.Translatable @@ -69,6 +66,8 @@ open class Item( "HorseArmorItem" -> HorseArmorItem(resourceLocation, mappings, data) "SpawnEggItem" -> SpawnEggItem(resourceLocation, mappings, data) "MusicDiscItem" -> MusicDiscItem(resourceLocation, mappings, data) + "ShovelItem" -> ShovelItem(resourceLocation, mappings, data) + "HoeItem" -> HoeItem(resourceLocation, mappings, data) // "Item" -> Item(resourceLocation, data) // else -> TODO("Can not find item class: ${data["class"].asString}") else -> Item(resourceLocation, mappings, data) diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt index acf16dc01..46ca9241c 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/AxeItem.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation 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.player.Hands 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 glm_.vec3.Vec3i @@ -43,6 +45,9 @@ open class AxeItem( 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) return BlockUsages.SUCCESS diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt index ba059f961..943490c04 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/HoeItem.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation 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.player.Hands 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 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 { // 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 } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt index 25e5a2a5e..0679d504e 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/items/tools/ShovelItem.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings.items.tools import com.google.gson.JsonObject +import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.ResourceLocation 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.player.Hands 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 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 { // 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 } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt index 13fa21cd0..e11b3da04 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/InteractionHandler.kt @@ -146,8 +146,16 @@ 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)) + + 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 -> { return