From 4faadafe94b69cf87c1b2c0fd0b4e8f02686c297 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Sun, 8 Oct 2023 22:50:55 +0200 Subject: [PATCH] implement fern blocks (`dead_bush`, `grass`, `fern`) That makes walking through biomes soooo much easier and better. --- .../blocks/factory/BlockFactories.kt | 8 ++- .../blocks/properties/BlockProperties.kt | 4 +- .../blocks/types/building/WoolBlock.kt | 32 ++++----- .../types/{ => building}/dirt/GrassBlock.kt | 2 +- .../types/{ => building}/dirt/SnowyBlock.kt | 4 +- .../blocks/types/building/plants/FernBlock.kt | 72 +++++++++++++++++++ .../{ => building}/snow/AbstractSnowBlock.kt | 2 +- .../types/{ => building}/snow/SnowBlock.kt | 2 +- .../{ => building}/snow/SnowLayerBlock.kt | 2 +- 9 files changed, 101 insertions(+), 27 deletions(-) rename src/main/java/de/bixilon/minosoft/data/registries/blocks/types/{ => building}/dirt/GrassBlock.kt (96%) rename src/main/java/de/bixilon/minosoft/data/registries/blocks/types/{ => building}/dirt/SnowyBlock.kt (94%) create mode 100644 src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/plants/FernBlock.kt rename src/main/java/de/bixilon/minosoft/data/registries/blocks/types/{ => building}/snow/AbstractSnowBlock.kt (91%) rename src/main/java/de/bixilon/minosoft/data/registries/blocks/types/{ => building}/snow/SnowBlock.kt (96%) rename src/main/java/de/bixilon/minosoft/data/registries/blocks/types/{ => building}/snow/SnowLayerBlock.kt (98%) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/factory/BlockFactories.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/factory/BlockFactories.kt index 598fa5f2a..3d45ad168 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/factory/BlockFactories.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/factory/BlockFactories.kt @@ -20,16 +20,17 @@ import de.bixilon.minosoft.data.registries.blocks.types.Block import de.bixilon.minosoft.data.registries.blocks.types.air.AirBlock import de.bixilon.minosoft.data.registries.blocks.types.bee.HoneyBlock import de.bixilon.minosoft.data.registries.blocks.types.building.WoolBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.dirt.GrassBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.plants.FernBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.snow.SnowBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.snow.SnowLayerBlock import de.bixilon.minosoft.data.registries.blocks.types.climbing.ScaffoldingBlock -import de.bixilon.minosoft.data.registries.blocks.types.dirt.GrassBlock import de.bixilon.minosoft.data.registries.blocks.types.fluid.LavaFluidBlock import de.bixilon.minosoft.data.registries.blocks.types.fluid.water.BubbleColumnBlock import de.bixilon.minosoft.data.registries.blocks.types.fluid.water.WaterFluidBlock import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.SlimeBlock import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.snow.PowderSnowBlock import de.bixilon.minosoft.data.registries.blocks.types.pvp.CobwebBlock -import de.bixilon.minosoft.data.registries.blocks.types.snow.SnowBlock -import de.bixilon.minosoft.data.registries.blocks.types.snow.SnowLayerBlock import de.bixilon.minosoft.data.registries.blocks.types.stone.RockBlock import de.bixilon.minosoft.data.registries.blocks.types.wood.* import de.bixilon.minosoft.data.registries.factory.DefaultFactory @@ -72,6 +73,7 @@ object BlockFactories : DefaultFactory>( FloweringAzalea.Leaves, SnowBlock, SnowLayerBlock, + FernBlock.DeadBush, FernBlock.Grass, FernBlock.Fern, ) { fun build(name: ResourceLocation, registries: Registries, settings: BlockSettings): Block? { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt index 9ae44838d..a714320a6 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt @@ -19,9 +19,9 @@ import de.bixilon.minosoft.data.registries.blocks.properties.primitives.BooleanP import de.bixilon.minosoft.data.registries.blocks.properties.primitives.IntProperty import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.types.Block -import de.bixilon.minosoft.data.registries.blocks.types.dirt.SnowyBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.dirt.SnowyBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.snow.SnowLayerBlock import de.bixilon.minosoft.data.registries.blocks.types.fluid.FluidBlock -import de.bixilon.minosoft.data.registries.blocks.types.snow.SnowLayerBlock @Deprecated("Fallback data") object BlockProperties { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/WoolBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/WoolBlock.kt index 62c23dcdf..45d0b6ea8 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/WoolBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/WoolBlock.kt @@ -47,7 +47,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) return 1.0f } - open class White(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class White(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.WHITE companion object : BlockFactory { @@ -57,7 +57,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Orange(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Orange(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.ORANGE companion object : BlockFactory { @@ -67,7 +67,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Magenta(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Magenta(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.MAGENTA companion object : BlockFactory { @@ -77,7 +77,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class LightBlue(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class LightBlue(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.LIGHT_BLUE companion object : BlockFactory { @@ -87,7 +87,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Yellow(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Yellow(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.YELLOW companion object : BlockFactory { @@ -97,7 +97,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Lime(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Lime(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.LIME companion object : BlockFactory { @@ -107,7 +107,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Pink(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Pink(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.PINK companion object : BlockFactory { @@ -117,7 +117,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Gray(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Gray(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.GRAY companion object : BlockFactory { @@ -127,7 +127,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class LightGray(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class LightGray(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.LIGHT_GRAY companion object : BlockFactory { @@ -137,7 +137,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Cyan(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Cyan(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.CYAN companion object : BlockFactory { @@ -147,7 +147,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Purple(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Purple(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.PURPLE companion object : BlockFactory { @@ -157,7 +157,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Blue(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Blue(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.BLUE companion object : BlockFactory { @@ -167,7 +167,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Brown(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Brown(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.BROWN companion object : BlockFactory { @@ -177,7 +177,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Green(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Green(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.GREEN companion object : BlockFactory { @@ -187,7 +187,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Red(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Red(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.RED companion object : BlockFactory { @@ -197,7 +197,7 @@ abstract class WoolBlock(identifier: ResourceLocation, settings: BlockSettings) } } - open class Black(identifier: ResourceLocation = this.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { + open class Black(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : WoolBlock(identifier, settings) { override val color: DyeColors get() = DyeColors.BLACK companion object : BlockFactory { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/GrassBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/GrassBlock.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/GrassBlock.kt rename to src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/GrassBlock.kt index b92b2927d..0e4ff5b82 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/GrassBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/GrassBlock.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.registries.blocks.types.dirt +package de.bixilon.minosoft.data.registries.blocks.types.building.dirt import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/SnowyBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/SnowyBlock.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/SnowyBlock.kt rename to src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/SnowyBlock.kt index 3ddef4329..cd838c768 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/dirt/SnowyBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/dirt/SnowyBlock.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.registries.blocks.types.dirt +package de.bixilon.minosoft.data.registries.blocks.types.building.dirt import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.registries.blocks.properties.list.MapPropertyList @@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.primitives.BooleanP import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.types.Block -import de.bixilon.minosoft.data.registries.blocks.types.snow.AbstractSnowBlock +import de.bixilon.minosoft.data.registries.blocks.types.building.snow.AbstractSnowBlock import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.models.block.state.DirectBlockModel diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/plants/FernBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/plants/FernBlock.kt new file mode 100644 index 000000000..ed89f2fe9 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/plants/FernBlock.kt @@ -0,0 +1,72 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.registries.blocks.types.building.plants + +import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory +import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings +import de.bixilon.minosoft.data.registries.blocks.state.BlockState +import de.bixilon.minosoft.data.registries.blocks.types.Block +import de.bixilon.minosoft.data.registries.blocks.types.legacy.FlatteningRenamedModel +import de.bixilon.minosoft.data.registries.blocks.types.properties.hardness.InstantBreakableBlock +import de.bixilon.minosoft.data.registries.blocks.types.properties.item.BlockWithItem +import de.bixilon.minosoft.data.registries.blocks.types.properties.offset.RandomOffsetBlock +import de.bixilon.minosoft.data.registries.blocks.types.properties.offset.RandomOffsetTypes +import de.bixilon.minosoft.data.registries.blocks.types.properties.shape.outline.FullOutlinedBlock +import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft +import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.data.registries.item.items.Item +import de.bixilon.minosoft.data.registries.item.items.tool.shears.ShearsRequirement +import de.bixilon.minosoft.data.registries.registries.Registries +import de.bixilon.minosoft.data.registries.shapes.voxel.VoxelShape +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection + +abstract class FernBlock(identifier: ResourceLocation, settings: BlockSettings) : Block(identifier, settings), ShearsRequirement, BlockWithItem, FullOutlinedBlock, RandomOffsetBlock, InstantBreakableBlock { + override val randomOffset get() = RandomOffsetTypes.XYZ + override val item: Item = this::item.inject(identifier) + + override fun getOutlineShape(connection: PlayConnection, blockState: BlockState) = SHAPE + + companion object { + private val SHAPE = VoxelShape(0.125, 0.0, 0.125, 0.875, 0.8125, 0.875) + + } + + open class DeadBush(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : FernBlock(identifier, settings) { + + companion object : BlockFactory { + override val identifier = minecraft("dead_bush") + + override fun build(registries: Registries, settings: BlockSettings) = DeadBush(settings = settings) + } + } + + open class Grass(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : FernBlock(identifier, settings), FlatteningRenamedModel { + override val legacyModelName get() = minecraft("tall_grass") + + companion object : BlockFactory { + override val identifier = minecraft("grass") + + override fun build(registries: Registries, settings: BlockSettings) = Grass(settings = settings) + } + } + + open class Fern(identifier: ResourceLocation = Companion.identifier, settings: BlockSettings) : FernBlock(identifier, settings) { + + companion object : BlockFactory { + override val identifier = minecraft("fern") + + override fun build(registries: Registries, settings: BlockSettings) = Fern(settings = settings) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/AbstractSnowBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/AbstractSnowBlock.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/AbstractSnowBlock.kt rename to src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/AbstractSnowBlock.kt index 0ffd891aa..84a09bec1 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/AbstractSnowBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/AbstractSnowBlock.kt @@ -11,6 +11,6 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.registries.blocks.types.snow +package de.bixilon.minosoft.data.registries.blocks.types.building.snow interface AbstractSnowBlock diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowBlock.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowBlock.kt rename to src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowBlock.kt index 65c833331..70e26312e 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowBlock.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.registries.blocks.types.snow +package de.bixilon.minosoft.data.registries.blocks.types.building.snow import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowLayerBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowLayerBlock.kt similarity index 98% rename from src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowLayerBlock.kt rename to src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowLayerBlock.kt index 4bafc2d3a..e635ca0c1 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/snow/SnowLayerBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/building/snow/SnowLayerBlock.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.registries.blocks.types.snow +package de.bixilon.minosoft.data.registries.blocks.types.building.snow import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.registries.blocks.factory.BlockFactory