Skip to content

Commit ec68f95

Browse files
committed
fix some tool requirements
This really sucks. This interface hell was the worst thing to do...
1 parent c3fe8fa commit ec68f95

File tree

14 files changed

+58
-26
lines changed

14 files changed

+58
-26
lines changed

src/integration-test/kotlin/de/bixilon/minosoft/data/registries/blocks/factory/VerifyIntegratedBlockRegistry.kt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -30,6 +30,7 @@ import de.bixilon.minosoft.data.registries.blocks.types.building.nether.SoulSand
3030
import de.bixilon.minosoft.data.registries.blocks.types.building.plants.FernBlock
3131
import de.bixilon.minosoft.data.registries.blocks.types.building.plants.FlowerBlock
3232
import de.bixilon.minosoft.data.registries.blocks.types.building.snow.SnowLayerBlock
33+
import de.bixilon.minosoft.data.registries.blocks.types.building.stone.Bedrock
3334
import de.bixilon.minosoft.data.registries.blocks.types.climbing.ScaffoldingBlock
3435
import de.bixilon.minosoft.data.registries.blocks.types.entity.storage.ShulkerBoxBlock
3536
import de.bixilon.minosoft.data.registries.blocks.types.entity.storage.WoodenChestBlock
@@ -43,9 +44,12 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWit
4344
import de.bixilon.minosoft.data.registries.blocks.types.properties.offset.OffsetBlock
4445
import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.collision.CollidableBlock
4546
import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.outline.OutlinedBlock
47+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
48+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.ToolRequirement
4649
import de.bixilon.minosoft.data.registries.registries.Registries
4750
import de.bixilon.minosoft.data.world.positions.BlockPosition
4851
import de.bixilon.minosoft.protocol.network.session.play.PlaySession
52+
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_19_4
4953
import de.bixilon.minosoft.protocol.versions.Version
5054
import de.bixilon.minosoft.test.ITUtil.allocate
5155
import de.bixilon.minosoft.util.KUtil.toResourceLocation
@@ -198,9 +202,27 @@ object VerifyIntegratedBlockRegistry {
198202
errors.append(integratedItem)
199203
}
200204

205+
206+
private fun compareToolRequirement(pixlyzer: Block, integrated: Block, errors: StringBuilder) {
207+
if (integrated is Bedrock) return
208+
val requiresTool = (integrated is ToolRequirement && integrated !is HandBreakable)
209+
if (pixlyzer !is PixLyzerBlock) return
210+
211+
if (pixlyzer.requiresTool == requiresTool) return
212+
213+
errors.appendBlock(pixlyzer)
214+
errors.append("requiresTool: e=")
215+
errors.append(pixlyzer.requiresTool)
216+
errors.append(", a=")
217+
errors.append(requiresTool)
218+
}
219+
201220
private fun compare(session: PlaySession, pixlyzer: PixLyzerBlock, integrated: Block, errors: StringBuilder) {
202221
compareHardness(pixlyzer, integrated, errors)
203222
compareItem(pixlyzer, integrated, errors)
223+
if (session.version.versionId != V_1_19_4) {
224+
compareToolRequirement(pixlyzer, integrated, errors)
225+
}
204226
for (state in pixlyzer.states) {
205227
val integratedState = try {
206228
integrated.states.withProperties(state.properties)

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/Gravel.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -22,10 +22,11 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWit
2222
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2323
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2424
import de.bixilon.minosoft.data.registries.item.items.Item
25+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2526
import de.bixilon.minosoft.data.registries.item.items.tool.shovel.ShovelRequirement
2627
import de.bixilon.minosoft.data.registries.registries.Registries
2728

28-
class Gravel(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), FullBlock, ShovelRequirement, BlockWithItem<Item> {
29+
class Gravel(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), FullBlock, HandBreakable, ShovelRequirement, BlockWithItem<Item> {
2930
override val item: Item = this::item.inject(identifier)
3031
override val hardness get() = 0.6f
3132

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/SlabBlock.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation
3131
import de.bixilon.minosoft.data.registries.item.items.Item
3232
import de.bixilon.minosoft.data.registries.item.items.tool.axe.AxeRequirement
3333
import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement
34+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
3435
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
3536
import de.bixilon.minosoft.data.registries.shapes.shape.Shape
3637
import de.bixilon.minosoft.gui.rendering.RenderContext
@@ -114,7 +115,7 @@ abstract class SlabBlock(identifier: ResourceLocation, settings: BlockSettings)
114115
}
115116
}
116117

117-
abstract class WoodSlab(identifier: ResourceLocation, settings: BlockSettings) : SlabBlock(identifier, settings), AxeRequirement {
118+
abstract class WoodSlab(identifier: ResourceLocation, settings: BlockSettings) : SlabBlock(identifier, settings), AxeRequirement, HandBreakable {
118119
override val hardness get() = 2.0f
119120
}
120121

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/Dirt.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -21,10 +21,11 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWit
2121
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2222
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2323
import de.bixilon.minosoft.data.registries.item.items.Item
24+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2425
import de.bixilon.minosoft.data.registries.item.items.tool.shovel.ShovelRequirement
2526
import de.bixilon.minosoft.data.registries.registries.Registries
2627

27-
open class Dirt(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), FullBlock, ShovelRequirement, BlockWithItem<Item> {
28+
open class Dirt(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), FullBlock, ShovelRequirement, HandBreakable, BlockWithItem<Item> {
2829
override val item: Item = this::item.inject(identifier)
2930
override val hardness get() = 0.5f
3031

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/GrassBlock.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -21,12 +21,13 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWit
2121
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2222
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2323
import de.bixilon.minosoft.data.registries.item.items.Item
24+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2425
import de.bixilon.minosoft.data.registries.item.items.tool.shovel.ShovelRequirement
2526
import de.bixilon.minosoft.data.registries.registries.Registries
2627
import de.bixilon.minosoft.gui.rendering.tint.TintProvider
2728
import de.bixilon.minosoft.gui.rendering.tint.tints.grass.GrassTinted
2829

29-
open class GrassBlock(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : SnowyBlock(identifier, settings), FullBlock, FlatteningRenamedModel, ShovelRequirement, BlockWithItem<Item>, GrassTinted {
30+
open class GrassBlock(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : SnowyBlock(identifier, settings), FullBlock, FlatteningRenamedModel, HandBreakable, ShovelRequirement, BlockWithItem<Item>, GrassTinted {
3031
override val item: Item = this::item.inject(identifier)
3132
override val hardness get() = 0.6f
3233
override val legacyModelName get() = minecraft("grass")

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/door/DoorBlock.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation
4242
import de.bixilon.minosoft.data.registries.item.items.Item
4343
import de.bixilon.minosoft.data.registries.item.items.tool.axe.AxeRequirement
4444
import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement
45+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
4546
import de.bixilon.minosoft.data.registries.registries.Registries
4647
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
4748
import de.bixilon.minosoft.data.registries.shapes.shape.Shape
@@ -211,7 +212,7 @@ abstract class DoorBlock(identifier: ResourceLocation, settings: BlockSettings)
211212

212213
}
213214

214-
abstract class WoodenDoor(identifier: ResourceLocation, settings: BlockSettings) : DoorBlock(identifier, settings), AxeRequirement {
215+
abstract class WoodenDoor(identifier: ResourceLocation, settings: BlockSettings) : DoorBlock(identifier, settings), HandBreakable, AxeRequirement {
215216
override val hardness get() = 3.0f
216217

217218
override fun interact(session: PlaySession, target: BlockTarget, hand: Hands, stack: ItemStack?): InteractionResults {

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/nether/Glowstone.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -13,24 +13,23 @@
1313

1414
package de.bixilon.minosoft.data.registries.blocks.types.building.nether
1515

16-
import de.bixilon.kutil.cast.CastUtil.unsafeCast
1716
import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory
1817
import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings
1918
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
2019
import de.bixilon.minosoft.data.registries.blocks.state.builder.BlockStateBuilder
2120
import de.bixilon.minosoft.data.registries.blocks.types.Block
22-
import de.bixilon.minosoft.data.registries.blocks.types.building.RockBlock
2321
import de.bixilon.minosoft.data.registries.blocks.types.properties.FullBlock
2422
import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWithItem
2523
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2624
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2725
import de.bixilon.minosoft.data.registries.item.items.Item
2826
import de.bixilon.minosoft.data.registries.item.items.tool.pickaxe.PickaxeRequirement
27+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2928
import de.bixilon.minosoft.data.registries.registries.Registries
3029
import de.bixilon.minosoft.data.world.chunk.light.types.LightLevel
3130
import de.bixilon.minosoft.protocol.versions.Version
3231

33-
open class Glowstone(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), PickaxeRequirement, FullBlock, BlockWithItem<Item> {
32+
open class Glowstone(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), HandBreakable, PickaxeRequirement, FullBlock, BlockWithItem<Item> {
3433
override val item: Item = this::item.inject(identifier)
3534
override val hardness get() = 0.3f
3635

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/nether/SoulSand.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -24,11 +24,12 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.outline
2424
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2525
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2626
import de.bixilon.minosoft.data.registries.item.items.Item
27+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2728
import de.bixilon.minosoft.data.registries.item.items.tool.shovel.ShovelRequirement
2829
import de.bixilon.minosoft.data.registries.registries.Registries
2930
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
3031

31-
open class SoulSand(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), ShovelRequirement, CollidableBlock, OutlinedBlock, BlockWithItem<Item>, VelocityBlock {
32+
open class SoulSand(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), HandBreakable, ShovelRequirement, CollidableBlock, OutlinedBlock, BlockWithItem<Item>, VelocityBlock {
3233
override val item: Item = this::item.inject(identifier)
3334
override val hardness get() = 0.5f
3435
override val velocity get() = 0.4f

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/nether/SoulSoil.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -21,10 +21,11 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWit
2121
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
2222
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
2323
import de.bixilon.minosoft.data.registries.item.items.Item
24+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
2425
import de.bixilon.minosoft.data.registries.item.items.tool.shovel.ShovelRequirement
2526
import de.bixilon.minosoft.data.registries.registries.Registries
2627

27-
open class SoulSoil(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), ShovelRequirement, FullBlock, BlockWithItem<Item> {
28+
open class SoulSoil(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : Block(identifier, settings), HandBreakable, ShovelRequirement, FullBlock, BlockWithItem<Item> {
2829
override val item: Item = this::item.inject(identifier)
2930
override val hardness get() = 0.5f
3031

src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/plants/DoublePlant.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Minosoft
3-
* Copyright (C) 2020-2025 Moritz Zwerger
3+
* Copyright (C) 2020-2026 Moritz Zwerger
44
*
55
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
66
*
@@ -37,6 +37,7 @@ import de.bixilon.minosoft.data.registries.blocks.types.properties.size.DoubleSi
3737
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
3838
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
3939
import de.bixilon.minosoft.data.registries.item.items.Item
40+
import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.HandBreakable
4041
import de.bixilon.minosoft.data.registries.item.items.tool.shears.ShearsRequirement
4142
import de.bixilon.minosoft.data.registries.registries.Registries
4243
import de.bixilon.minosoft.data.registries.shapes.aabb.AABB
@@ -52,7 +53,7 @@ import de.bixilon.minosoft.gui.rendering.tint.tints.grass.TallGrassTintCalculato
5253
import de.bixilon.minosoft.protocol.network.session.play.PlaySession
5354
import de.bixilon.minosoft.protocol.versions.Version
5455

55-
abstract class DoublePlant(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), ShearsRequirement, BlockWithItem<Item>, OutlinedBlock, RandomOffsetBlock, InstantBreakableBlock, ModelChooser, DoubleSizeBlock, ReplaceableBlock {
56+
abstract class DoublePlant(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), HandBreakable, ShearsRequirement, BlockWithItem<Item>, OutlinedBlock, RandomOffsetBlock, InstantBreakableBlock, ModelChooser, DoubleSizeBlock, ReplaceableBlock {
5657
override val randomOffset get() = RandomOffsetTypes.XYZ
5758
override val item: Item = this::item.inject(identifier)
5859

0 commit comments

Comments
 (0)