fix FluidFillable blocks

This commit is contained in:
Bixilon 2021-11-28 00:50:50 +01:00
parent 367ad70f5a
commit 426b97263d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 48 additions and 7 deletions

View File

@ -21,6 +21,8 @@ import de.bixilon.minosoft.data.registries.blocks.types.portal.NetherPortalBlock
import de.bixilon.minosoft.data.registries.blocks.types.redstone.ComparatorBlock
import de.bixilon.minosoft.data.registries.blocks.types.redstone.RepeaterBlock
import de.bixilon.minosoft.data.registries.blocks.types.wall.LeverBlock
import de.bixilon.minosoft.data.registries.blocks.types.water.KelpBlock
import de.bixilon.minosoft.data.registries.blocks.types.water.SeagrassBlock
import de.bixilon.minosoft.data.registries.factory.clazz.DefaultClassFactory
object DefaultBlockFactories : DefaultClassFactory<BlockFactory<*>>(
@ -40,6 +42,7 @@ object DefaultBlockFactories : DefaultClassFactory<BlockFactory<*>>(
RedstoneTorchBlock,
HoneyBlock,
KelpBlock,
SeagrassBlock,
StoneButtonBlock,
WoodenButtonBlock,
LeavesBlock,

View File

@ -11,10 +11,12 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.registries.blocks.types
package de.bixilon.minosoft.data.registries.blocks.types.water
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.types.Block
import de.bixilon.minosoft.data.registries.blocks.types.FluidFillable
import de.bixilon.minosoft.data.registries.fluid.DefaultFluids
import de.bixilon.minosoft.data.registries.fluid.Fluid
import de.bixilon.minosoft.data.registries.registries.Registries

View File

@ -0,0 +1,35 @@
/*
* Minosoft
* Copyright (C) 2021 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.registries.blocks.types.water
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockFactory
import de.bixilon.minosoft.data.registries.blocks.types.Block
import de.bixilon.minosoft.data.registries.blocks.types.FluidFillable
import de.bixilon.minosoft.data.registries.factory.clazz.MultiClassFactory
import de.bixilon.minosoft.data.registries.fluid.DefaultFluids
import de.bixilon.minosoft.data.registries.fluid.Fluid
import de.bixilon.minosoft.data.registries.registries.Registries
open class SeagrassBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>) : Block(resourceLocation, registries, data), FluidFillable {
override val fluid: Fluid = registries.fluidRegistry[DefaultFluids.WATER]!!
companion object : BlockFactory<SeagrassBlock>, MultiClassFactory<SeagrassBlock> {
override val ALIASES: Set<String> = setOf("TallSeagrassBlock")
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): SeagrassBlock {
return SeagrassBlock(resourceLocation, registries, data)
}
}
}

View File

@ -18,6 +18,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock
import de.bixilon.minosoft.data.registries.blocks.types.FluidFillable
import de.bixilon.minosoft.data.registries.items.Item
import de.bixilon.minosoft.data.registries.particle.ParticleType
import de.bixilon.minosoft.data.registries.registries.Registries
@ -61,17 +62,22 @@ open class Fluid(
open fun matches(other: BlockState?): Boolean {
other ?: return false
if (other.block is FluidFillable && this === other.block.fluid) {
return true
}
if (other.block !is FluidBlock) {
return false
}
return matches(other.block.fluid)
}
fun getHeight(blockState: BlockState): Float {
val level = blockState.properties[BlockProperties.FLUID_LEVEL]?.unsafeCast<Int>() ?: 8
if (level < 0 || level >= 8) {
return 1.0f
return 0.9f
}
return (8 - level) / 9.0f
}

View File

@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.player.LocalPlayerEntity
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.blocks.types.FluidFillable
import de.bixilon.minosoft.data.registries.effects.DefaultStatusEffects
import de.bixilon.minosoft.data.registries.effects.StatusEffect
import de.bixilon.minosoft.data.registries.enchantment.DefaultEnchantments
@ -71,10 +70,6 @@ class WaterFluid(
if (other.properties[BlockProperties.WATERLOGGED] == true) {
return true
}
if (other.block is FluidFillable && resourceLocation == other.block.fluid) {
return true
}
return super.matches(other)
}