item registry: buckets

This commit is contained in:
Bixilon 2022-12-13 10:53:09 +01:00
parent 8c772f0c18
commit e4798f5ba4
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
18 changed files with 155 additions and 38 deletions

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.data.registries.integrated package de.bixilon.minosoft.data.registries.integrated
import de.bixilon.minosoft.data.registries.enchantment.tool.WeaponEnchantment import de.bixilon.minosoft.data.registries.enchantment.tool.WeaponEnchantment
import de.bixilon.minosoft.data.registries.item.items.food.AppleItem
import de.bixilon.minosoft.test.IT import de.bixilon.minosoft.test.IT
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import org.testng.Assert import org.testng.Assert
@ -27,4 +28,11 @@ class IntegratedRegistryIT {
val current = IT.VERSION.registries!!.enchantmentRegistry["minecraft:sharpness".toResourceLocation()] val current = IT.VERSION.registries!!.enchantmentRegistry["minecraft:sharpness".toResourceLocation()]
Assert.assertSame(current, expected) Assert.assertSame(current, expected)
} }
fun goldenApple() {
val current = IT.VERSION.registries!!.itemRegistry["minecraft:golden_apple".toResourceLocation()]
if (current !is AppleItem.GoldenAppleItem) {
Assert.fail("Not an golden apple: $current")
}
}
} }

View File

@ -14,19 +14,20 @@
package de.bixilon.minosoft.data.registries.items package de.bixilon.minosoft.data.registries.items
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.item.MinecraftItems import de.bixilon.minosoft.data.registries.item.items.food.AppleItem
import de.bixilon.minosoft.data.registries.item.items.Item import org.testng.Assert
import org.testng.annotations.Test import org.testng.annotations.Test
@Test(groups = ["item"]) @Test(groups = ["item"])
class AppleTest : ItemTest<Item>() { class AppleTest : ItemTest<AppleItem>() {
init { init {
AppleTestO = this AppleTestO = this
} }
fun getApple() { fun getApple() {
super.retrieveItem(MinecraftItems.APPLE) super.retrieveItem(AppleItem)
Assert.assertTrue(this.item is AppleItem)
} }
} }

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.data.registries.items
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.item.factory.ItemFactory
import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.item.items.Item
import de.bixilon.minosoft.test.IT import de.bixilon.minosoft.test.IT
import de.bixilon.minosoft.test.IT.reference import de.bixilon.minosoft.test.IT.reference
@ -36,4 +37,12 @@ abstract class ItemTest<T : Item> {
assertEquals(item.resourceLocation, name) assertEquals(item.resourceLocation, name)
this.item = item.unsafeCast() this.item = item.unsafeCast()
} }
fun retrieveItem(factory: ItemFactory<T>) {
val item = IT.VERSION.registries!!.itemRegistry[factory]
Assert.assertNotNull(item)
item!!
assertEquals(item.resourceLocation, factory.resourceLocation)
this.item = item
}
} }

View File

@ -15,20 +15,20 @@ package de.bixilon.minosoft.data.registries.items
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.fluid.lava.LavaFluid import de.bixilon.minosoft.data.registries.fluid.lava.LavaFluid
import de.bixilon.minosoft.data.registries.item.MinecraftItems import de.bixilon.minosoft.data.registries.item.items.bucket.FilledBucketItem
import de.bixilon.minosoft.data.registries.item.items.bucket.BucketItem
import org.testng.Assert.assertTrue import org.testng.Assert.assertTrue
import org.testng.annotations.Test import org.testng.annotations.Test
@Test(groups = ["item"]) @Test(groups = ["item"])
class LavaBucketTest : ItemTest<BucketItem>() { class LavaBucketTest : ItemTest<FilledBucketItem.LavaBucketItem>() {
init { init {
LavaBucketTest0 = this LavaBucketTest0 = this
} }
fun getLava() { fun getLava() {
super.retrieveItem(MinecraftItems.LAVA_BUCKET) super.retrieveItem(FilledBucketItem.LavaBucketItem)
assertTrue(item is FilledBucketItem.LavaBucketItem)
assertTrue(item.fluid is LavaFluid) assertTrue(item.fluid is LavaFluid)
} }
} }

View File

@ -15,20 +15,20 @@ package de.bixilon.minosoft.data.registries.items
import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.fluid.water.WaterFluid import de.bixilon.minosoft.data.registries.fluid.water.WaterFluid
import de.bixilon.minosoft.data.registries.item.MinecraftItems import de.bixilon.minosoft.data.registries.item.items.bucket.FilledBucketItem
import de.bixilon.minosoft.data.registries.item.items.bucket.BucketItem
import org.testng.Assert.assertTrue import org.testng.Assert.assertTrue
import org.testng.annotations.Test import org.testng.annotations.Test
@Test(groups = ["item"]) @Test(groups = ["item"])
class WaterBucketTest : ItemTest<BucketItem>() { class WaterBucketTest : ItemTest<FilledBucketItem.WaterBucketItem>() {
init { init {
WaterBucketTest0 = this WaterBucketTest0 = this
} }
fun getWater() { fun getWater() {
super.retrieveItem(MinecraftItems.WATER_BUCKET) super.retrieveItem(FilledBucketItem.WaterBucketItem)
assertTrue(item is FilledBucketItem.WaterBucketItem)
assertTrue(item.fluid is WaterFluid) assertTrue(item.fluid is WaterFluid)
} }
} }

View File

@ -15,15 +15,14 @@ package de.bixilon.minosoft.data.container.slots
import de.bixilon.minosoft.data.container.Container import de.bixilon.minosoft.data.container.Container
import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.container.stack.ItemStack
import de.bixilon.minosoft.data.registries.fluid.lava.LavaFluid import de.bixilon.minosoft.data.registries.item.items.bucket.FilledBucketItem
import de.bixilon.minosoft.data.registries.item.items.bucket.BucketItem
object FuelSlotType : SlotType { object FuelSlotType : SlotType {
override fun canPut(container: Container, slot: Int, stack: ItemStack): Boolean { override fun canPut(container: Container, slot: Int, stack: ItemStack): Boolean {
val item = stack.item.item val item = stack.item.item
if (item is BucketItem && item.fluid is LavaFluid) { if (item is FilledBucketItem.LavaBucketItem) {
return true return true
} }
val fuelTime = container.connection.registries.misc.getFuelTime(item) val fuelTime = container.connection.registries.misc.getFuelTime(item)

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 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 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.
* *
@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.util.KUtil.minecraft
class EmptyFluid( class EmptyFluid(
resourceLocation: ResourceLocation, resourceLocation: ResourceLocation,
@ -37,6 +38,7 @@ class EmptyFluid(
} }
companion object : FluidFactory<EmptyFluid> { companion object : FluidFactory<EmptyFluid> {
override val resourceLocation = minecraft("empty")
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): EmptyFluid { override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): EmptyFluid {
return EmptyFluid(resourceLocation, registries, data) return EmptyFluid(resourceLocation, registries, data)

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 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 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.
* *
@ -14,9 +14,10 @@
package de.bixilon.minosoft.data.registries.fluid package de.bixilon.minosoft.data.registries.fluid
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocationAble
import de.bixilon.minosoft.data.registries.factory.clazz.ClassFactory import de.bixilon.minosoft.data.registries.factory.clazz.ClassFactory
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
interface FluidFactory<T : Fluid> : ClassFactory<T> { interface FluidFactory<T : Fluid> : ClassFactory<T>, ResourceLocationAble {
fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): T fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): T
} }

View File

@ -34,6 +34,7 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.horizontal
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import java.util.* import java.util.*
@ -95,6 +96,7 @@ class LavaFluid(
} }
companion object : FluidFactory<LavaFluid>, MultiClassFactory<LavaFluid> { companion object : FluidFactory<LavaFluid>, MultiClassFactory<LavaFluid> {
override val resourceLocation = KUtil.minecraft("lava")
override val ALIASES: Set<String> = setOf("LavaFluid\$Flowing", "LavaFluid\$Still") override val ALIASES: Set<String> = setOf("LavaFluid\$Flowing", "LavaFluid\$Still")
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): LavaFluid { override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): LavaFluid {

View File

@ -34,6 +34,7 @@ import de.bixilon.minosoft.gui.rendering.tint.WaterTintProvider
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.minecraft
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import java.util.* import java.util.*
import kotlin.math.min import kotlin.math.min
@ -128,6 +129,7 @@ class WaterFluid(
} }
companion object : FluidFactory<WaterFluid>, MultiClassFactory<WaterFluid> { companion object : FluidFactory<WaterFluid>, MultiClassFactory<WaterFluid> {
override val resourceLocation = minecraft("water")
private const val VELOCITY_MULTIPLIER = 0.014 private const val VELOCITY_MULTIPLIER = 0.014
override val ALIASES: Set<String> = setOf("WaterFluid\$Flowing", "WaterFluid\$Still") override val ALIASES: Set<String> = setOf("WaterFluid\$Flowing", "WaterFluid\$Still")

View File

@ -13,7 +13,9 @@
package de.bixilon.minosoft.data.registries.item package de.bixilon.minosoft.data.registries.item
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.data.registries.item.factory.ItemFactories import de.bixilon.minosoft.data.registries.item.factory.ItemFactories
import de.bixilon.minosoft.data.registries.item.factory.ItemFactory
import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.item.items.Item
import de.bixilon.minosoft.data.registries.item.items.PixLyzerItem import de.bixilon.minosoft.data.registries.item.items.PixLyzerItem
import de.bixilon.minosoft.data.registries.registries.registry.MetaTypes import de.bixilon.minosoft.data.registries.registries.registry.MetaTypes
@ -38,4 +40,9 @@ class ItemRegistry(
super.getOrNull(id) super.getOrNull(id)
} }
} }
operator fun <T : Item> get(factory: ItemFactory<T>): T? {
val item = this[factory.resourceLocation] ?: return null
return item.unsafeCast()
}
} }

View File

@ -19,9 +19,6 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation
object MinecraftItems { object MinecraftItems {
val LEATHER_BOOTS = "minecraft:leather_boots".toResourceLocation() val LEATHER_BOOTS = "minecraft:leather_boots".toResourceLocation()
val LAPISLAZULI = "minecraft:lapis_lazuli".toResourceLocation() val LAPISLAZULI = "minecraft:lapis_lazuli".toResourceLocation()
val APPLE = "minecraft:apple".toResourceLocation()
val EGG = "minecraft:egg".toResourceLocation() val EGG = "minecraft:egg".toResourceLocation()
val LAVA_BUCKET = "minecraft:lava_bucket".toResourceLocation()
val WATER_BUCKET = "minecraft:water_bucket".toResourceLocation()
val COAL = "minecraft:coal".toResourceLocation() val COAL = "minecraft:coal".toResourceLocation()
} }

View File

@ -17,6 +17,8 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.factory.DefaultFactory import de.bixilon.minosoft.data.registries.factory.DefaultFactory
import de.bixilon.minosoft.data.registries.integrated.IntegratedRegistry import de.bixilon.minosoft.data.registries.integrated.IntegratedRegistry
import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.item.items.Item
import de.bixilon.minosoft.data.registries.item.items.bucket.BucketItem
import de.bixilon.minosoft.data.registries.item.items.bucket.FilledBucketItem
import de.bixilon.minosoft.data.registries.item.items.food.AppleItem import de.bixilon.minosoft.data.registries.item.items.food.AppleItem
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
@ -24,6 +26,10 @@ object ItemFactories : DefaultFactory<ItemFactory<*>>(
AppleItem, AppleItem,
AppleItem.GoldenAppleItem, AppleItem.GoldenAppleItem,
AppleItem.EnchantedGoldenAppleItem, AppleItem.EnchantedGoldenAppleItem,
BucketItem.EmptyBucketItem,
FilledBucketItem.LavaBucketItem,
FilledBucketItem.WaterBucketItem,
), IntegratedRegistry<Item> { ), IntegratedRegistry<Item> {
override fun build(name: ResourceLocation, registries: Registries): Item? { override fun build(name: ResourceLocation, registries: Registries): Item? {

View File

@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.registries.factory.clazz.DefaultClassFactory
import de.bixilon.minosoft.data.registries.item.items.* import de.bixilon.minosoft.data.registries.item.items.*
import de.bixilon.minosoft.data.registries.item.items.armor.* import de.bixilon.minosoft.data.registries.item.items.armor.*
import de.bixilon.minosoft.data.registries.item.items.block.* import de.bixilon.minosoft.data.registries.item.items.block.*
import de.bixilon.minosoft.data.registries.item.items.bucket.BucketItem
import de.bixilon.minosoft.data.registries.item.items.throwable.* import de.bixilon.minosoft.data.registries.item.items.throwable.*
import de.bixilon.minosoft.data.registries.item.items.throwable.potion.LingeringPotionItem import de.bixilon.minosoft.data.registries.item.items.throwable.potion.LingeringPotionItem
import de.bixilon.minosoft.data.registries.item.items.throwable.potion.PotionItem import de.bixilon.minosoft.data.registries.item.items.throwable.potion.PotionItem
@ -33,7 +32,6 @@ object PixLyzerItemFactories : DefaultClassFactory<PixLyzerItemFactory<*>>(
ScaffoldingItem, ScaffoldingItem,
SpawnEggItem, SpawnEggItem,
BucketItem,
DyeItem, DyeItem,
HorseArmorItem, HorseArmorItem,
ShieldItem, ShieldItem,

View File

@ -13,29 +13,24 @@
package de.bixilon.minosoft.data.registries.item.items.bucket package de.bixilon.minosoft.data.registries.item.items.bucket
import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.fluid.Fluid import de.bixilon.minosoft.data.registries.item.factory.ItemFactory
import de.bixilon.minosoft.data.registries.item.factory.PixLyzerItemFactory import de.bixilon.minosoft.data.registries.item.items.Item
import de.bixilon.minosoft.data.registries.item.items.PixLyzerItem import de.bixilon.minosoft.data.registries.item.items.fluid.FluidDrainable
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.util.KUtil.minecraft
open class BucketItem( abstract class BucketItem(
resourceLocation: ResourceLocation, resourceLocation: ResourceLocation,
registries: Registries, ) : Item(resourceLocation) {
data: Map<String, Any>,
) : PixLyzerItem(resourceLocation, registries, data) {
val fluid: Fluid = unsafeNull()
init { open class EmptyBucketItem(resourceLocation: ResourceLocation = this.resourceLocation) : BucketItem(resourceLocation), FluidDrainable {
this::fluid.inject(data["bucked_fluid_type"])
}
companion object : PixLyzerItemFactory<BucketItem> { companion object : ItemFactory<BucketItem> {
override val resourceLocation = minecraft("bucket")
override fun build(resourceLocation: ResourceLocation, registries: Registries, data: Map<String, Any>): BucketItem { override fun build(registries: Registries) = EmptyBucketItem()
return BucketItem(resourceLocation, registries, data)
} }
} }
} }

View File

@ -0,0 +1,54 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.item.items.bucket
import de.bixilon.kutil.cast.CastUtil
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.fluid.Fluid
import de.bixilon.minosoft.data.registries.fluid.FluidFactory
import de.bixilon.minosoft.data.registries.fluid.lava.LavaFluid
import de.bixilon.minosoft.data.registries.fluid.water.WaterFluid
import de.bixilon.minosoft.data.registries.item.factory.ItemFactory
import de.bixilon.minosoft.data.registries.item.items.fluid.FluidItem
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.util.KUtil.minecraft
open class FilledBucketItem<T : Fluid>(
resourceLocation: ResourceLocation,
factory: FluidFactory<T>,
) : BucketItem(resourceLocation), FluidItem {
override val fluid: Fluid = CastUtil.unsafeNull()
init {
this::fluid.inject(factory.resourceLocation)
}
open class LavaBucketItem(resourceLocation: ResourceLocation = this.resourceLocation) : FilledBucketItem<LavaFluid>(resourceLocation, LavaFluid) {
companion object : ItemFactory<LavaBucketItem> {
override val resourceLocation = minecraft("lava_bucket")
override fun build(registries: Registries) = LavaBucketItem()
}
}
open class WaterBucketItem(resourceLocation: ResourceLocation = this.resourceLocation) : FilledBucketItem<WaterFluid>(resourceLocation, WaterFluid) {
companion object : ItemFactory<WaterBucketItem> {
override val resourceLocation = minecraft("water_bucket")
override fun build(registries: Registries) = WaterBucketItem()
}
}
}

View File

@ -0,0 +1,16 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.item.items.fluid
interface FluidDrainable

View File

@ -0,0 +1,20 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.item.items.fluid
import de.bixilon.minosoft.data.registries.fluid.Fluid
interface FluidItem {
val fluid: Fluid
}