diff --git a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java index da48569e79..263c3b71d8 100644 --- a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java +++ b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java @@ -113,8 +113,10 @@ public class DynamicFluidContainerModel implements UnbakedGeometry { // TODO: [Forge][Rendering] See if we can get rid of SimpleModelState and wrap transforms completely // If the fluid is lighter than air, rotate 180deg to turn it upside down - if (flipGas && fluid != Fluids.EMPTY && fluid.getFluidType().isLighterThanAir()) + if (flipGas && fluid != Fluids.EMPTY && fluid.getFluidType().isLighterThanAir()) { transformation = transformation.compose(new Transformation(null, new Quaternionf(0, 0, 1, 0), null, null)); + state = new SimpleModelState(transformation); + } var buf = new QuadCollection.Builder(); diff --git a/src/test/java/net/minecraftforge/debug/client/FluidBucketModelTest.java b/src/test/java/net/minecraftforge/debug/client/FluidBucketModelTest.java index 9eba0c5487..7a4b2ebc14 100644 --- a/src/test/java/net/minecraftforge/debug/client/FluidBucketModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/FluidBucketModelTest.java @@ -5,17 +5,31 @@ package net.minecraftforge.debug.client; -import net.minecraft.client.Minecraft; +import java.util.function.Consumer; + +import net.minecraft.client.renderer.block.FluidModel; +import net.minecraft.client.resources.model.sprite.Material; import net.minecraft.core.registries.Registries; -import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.resources.Identifier; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.PushReaction; +import net.minecraftforge.client.event.ModelEvent.BakeFluidModels; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.common.SoundActions; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.gametest.GameTest; import net.minecraftforge.gametest.GameTestNamespace; import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.test.BaseTestMod; @@ -24,26 +38,82 @@ import net.minecraftforge.test.BaseTestMod; public class FluidBucketModelTest extends BaseTestMod { public static final String MODID = "fluid_bucket_model"; + private static final DeferredRegister BLOCKS = DeferredRegister.create(Registries.BLOCK, MODID); private static final DeferredRegister ITEMS = DeferredRegister.create(Registries.ITEM, MODID); + private static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, MODID); + private static final DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.FLUID_TYPES, MODID); + + + private static ForgeFlowingFluid.Properties FLUID_PROPERTIES; + private static final RegistryObject GAS_STILL = FLUIDS.register("gas", () -> new ForgeFlowingFluid.Source(FLUID_PROPERTIES)); + private static final RegistryObject GAS_FLOWING = FLUIDS.register("gas_flowing", () -> new ForgeFlowingFluid.Flowing(FLUID_PROPERTIES)); + + private static final FluidType.Properties GAS_PROPERTIES = FluidType.Properties.create() + .lightLevel(10) + .density(-1600) + .viscosity(100) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .sound(SoundActions.FLUID_VAPORIZE, SoundEvents.FIRE_EXTINGUISH); + + private static final Identifier GAS_STILL_TEXTURE = rl("minecraft", "block/water_still"); + private static final Identifier GAS_FLOWING_TEXTURE = rl("minecraft", "block/water_flow"); + + public static final RegistryObject GAS_TYPE = FLUID_TYPES.register("gas", () -> { + return new FluidType(GAS_PROPERTIES) { + @Override + public void initializeClient(final Consumer consumer) { + consumer.accept(new IClientFluidTypeExtensions() { + @Override + public Identifier getStillTexture() { + return GAS_STILL_TEXTURE; + } + @Override + public Identifier getFlowingTexture() { + return GAS_FLOWING_TEXTURE; + } + }); + } + }; + }); + + public static final RegistryObject GAS_BLOCK = BLOCKS.register("gas", () -> new LiquidBlock( + GAS_STILL, + Block.Properties.of() + .replaceable() + .noCollision() + .strength(100) + .pushReaction(PushReaction.DESTROY) + .noLootTable() + .liquid() + .sound(SoundType.EMPTY) + .setId(BLOCKS.key("gas")) + )); + + public static final RegistryObject GAS_BUCKET = ITEMS.register("gas_bucket", () -> new BucketItem(GAS_STILL, new Item.Properties().setId(ITEMS.key("gas_bucket")))); + + static { + FLUID_PROPERTIES = new ForgeFlowingFluid.Properties(GAS_TYPE, GAS_STILL, GAS_FLOWING).block(GAS_BLOCK).bucket(GAS_BUCKET); + } + + public static final RegistryObject BUCKET = ITEMS.register("bucket", () -> new BucketItem(() -> Fluids.LAVA, new Item.Properties().setId(ITEMS.key("bucket")))); public FluidBucketModelTest(FMLJavaModLoadingContext context) { super(context, false, true); this.testItem(lookup -> BUCKET.get().getDefaultInstance()); + BakeFluidModels.BUS.addListener(this::registerFluidModels); } - @GameTest - public static void item_model(GameTestHelper helper) { - var manager = Minecraft.getInstance().getModelManager(); - - var key = rl("pig_head"); - var model = manager.getItemModel(key); - if (model == null) - helper.fail("Failed to retreive " + key + " item model"); - - if (model == manager.getMissingModel()) - helper.fail("Itme Model was the missing model"); - - helper.succeed(); + private void registerFluidModels(BakeFluidModels event) { + var gas_model = new FluidModel.Unbaked( + new Material(GAS_STILL_TEXTURE), + new Material(GAS_FLOWING_TEXTURE), + null, + null + ); + var gas_baked = gas_model.bake(event.materials(), () -> "Gas"); + event.register(GAS_STILL.get(), gas_baked); + event.register(GAS_FLOWING.get(), gas_baked); } } diff --git a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/blockstates/gas.json b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/blockstates/gas.json new file mode 100644 index 0000000000..d86665fb61 --- /dev/null +++ b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/blockstates/gas.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "fluid_bucket_model:block/gas" + } + } +} \ No newline at end of file diff --git a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/items/gas_bucket.json b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/items/gas_bucket.json new file mode 100644 index 0000000000..b29c97b6af --- /dev/null +++ b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/items/gas_bucket.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fluid_bucket_model:item/gas_bucket" + } +} \ No newline at end of file diff --git a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/block/gas.json b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/block/gas.json new file mode 100644 index 0000000000..67032282f0 --- /dev/null +++ b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/block/gas.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/water_still" + } +} \ No newline at end of file diff --git a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/bucket.json b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/bucket.json index 9846b8a1a0..5c42dc3a2d 100644 --- a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/bucket.json +++ b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/bucket.json @@ -2,5 +2,8 @@ "parent": "forge:item/bucket", "flip_gas": true, "fluid": "minecraft:lava", - "loader": "forge:fluid_container" + "loader": "forge:fluid_container", + "textures": { + "particle": "minecraft:block/lava_still" + } } \ No newline at end of file diff --git a/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/gas_bucket.json b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/gas_bucket.json new file mode 100644 index 0000000000..bf90e7b06e --- /dev/null +++ b/src/test/resources/fluid_bucket_model/assets/fluid_bucket_model/models/item/gas_bucket.json @@ -0,0 +1,9 @@ +{ + "parent": "forge:item/bucket", + "flip_gas": true, + "fluid": "fluid_bucket_model:gas", + "loader": "forge:fluid_container", + "textures": { + "particle": "minecraft:block/water_still" + } +} \ No newline at end of file