diff --git a/patches/minecraft/net/minecraft/client/renderer/FluidBlockRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/FluidBlockRenderer.java.patch index 0b6b1dcc8c..85d119f7bb 100644 --- a/patches/minecraft/net/minecraft/client/renderer/FluidBlockRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/FluidBlockRenderer.java.patch @@ -86,7 +86,7 @@ } + private void func_228797_a_(IVertexBuilder p_228797_1_, double p_228797_2_, double p_228797_4_, double p_228797_6_, float p_228797_8_, float p_228797_9_, float p_228797_10_, float alpha, float p_228797_11_, float p_228797_12_, int p_228797_13_) { -+ p_228797_1_.func_225582_a_(p_228797_2_, p_228797_4_, p_228797_6_).func_227885_a_(p_228797_8_, p_228797_9_, p_228797_10_, alpha).func_225583_a_(p_228797_11_, p_228797_12_).func_227886_a_(p_228797_13_).func_225584_a_(0.0F, 1.0F, 0.0F).func_181675_d(); ++ p_228797_1_.func_225582_a_(p_228797_2_, p_228797_4_, p_228797_6_).func_227885_a_(p_228797_8_, p_228797_9_, p_228797_10_, alpha).func_225583_a_(p_228797_11_, p_228797_12_).func_227886_a_(p_228797_13_).func_225584_a_(0.0F, 1.0F, 0.0F).func_181675_d(); + } + private int func_228795_a_(ILightReader p_228795_1_, BlockPos p_228795_2_) { diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 3daf649c67..75c7479b38 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -47,6 +47,7 @@ import java.util.Map; import java.util.Objects; import java.util.Random; import java.util.Set; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.vecmath.Matrix3f; @@ -79,6 +80,7 @@ import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.screen.MainMenuScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.Atlases; import net.minecraft.client.renderer.FogRenderer.FogType; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.ItemRenderer; @@ -108,6 +110,7 @@ import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; import net.minecraft.fluid.IFluidState; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ItemStack; @@ -596,22 +599,35 @@ public class ForgeHooksClient } }*/ + @SuppressWarnings("deprecation") public static TextureAtlasSprite[] getFluidSprites(ILightReader world, BlockPos pos, IFluidState fluidStateIn) { return new TextureAtlasSprite[] { - fluidStateIn.getFluid().getAttributes().getStillMaterial(world, pos).func_229314_c_(), - fluidStateIn.getFluid().getAttributes().getFlowingMaterial(world, pos).func_229314_c_(), + Minecraft.getInstance().func_228015_a_(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(fluidStateIn.getFluid().getAttributes().getStillTexture(world, pos)), + Minecraft.getInstance().func_228015_a_(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(fluidStateIn.getFluid().getAttributes().getFlowingTexture(world, pos)), }; } public static void gatherFluidTextures(Set textures) { ForgeRegistries.FLUIDS.getValues().stream() - .flatMap(f -> f.getAttributes().getTextures()) - .filter(Objects::nonNull) + .flatMap(ForgeHooksClient::getFluidMaterials) .forEach(textures::add); } + public static Stream getFluidMaterials(Fluid fluid) + { + return fluid.getAttributes().getTextures() + .filter(Objects::nonNull) + .map(ForgeHooksClient::getBlockMaterial); + } + + @SuppressWarnings("deprecation") + public static Material getBlockMaterial(ResourceLocation loc) + { + return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, loc); + } + private static class LightGatheringTransformer extends QuadGatheringTransformer { private static final VertexFormat FORMAT = new VertexFormat(ImmutableList.of(DefaultVertexFormats.TEX_2F, DefaultVertexFormats.TEX_2S)); diff --git a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java index 1d9c7b74fb..d883aa7590 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java +++ b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java @@ -46,6 +46,7 @@ import net.minecraft.resources.IResourceManager; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.geometry.IModelGeometry; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.resource.IResourceType; @@ -188,8 +189,7 @@ public final class ModelDynBucket implements IModelGeometry TransformationMatrix transform = state.func_225615_b_(); - Material fluidLocation = fluid != Fluids.EMPTY ? fluid.getAttributes().getStillMaterial() : null; - TextureAtlasSprite fluidSprite = fluidLocation != null ? spriteGetter.apply(fluidLocation) : null; + TextureAtlasSprite fluidSprite = fluid != Fluids.EMPTY ? spriteGetter.apply(ForgeHooksClient.getBlockMaterial(fluid.getAttributes().getStillTexture())) : null; if (particleSprite == null) particleSprite = fluidSprite; diff --git a/src/main/java/net/minecraftforge/client/model/ModelFluid.java b/src/main/java/net/minecraftforge/client/model/ModelFluid.java index ba6fd8bb3b..4d9dab6b96 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelFluid.java +++ b/src/main/java/net/minecraftforge/client/model/ModelFluid.java @@ -20,6 +20,7 @@ package net.minecraftforge.client.model; import java.util.function.Function; +import java.util.stream.Collectors; import java.util.Collection; import java.util.EnumMap; import java.util.List; @@ -43,6 +44,7 @@ import net.minecraft.fluid.Fluids; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.geometry.IModelGeometry; import net.minecraftforge.client.model.pipeline.IVertexConsumer; @@ -74,10 +76,7 @@ public final class ModelFluid implements IModelGeometry @Override public Collection getTextures(IModelConfiguration owner, Function modelGetter, Set> missingTextureErrors) { - FluidAttributes attrs = fluid.getAttributes(); - return attrs.getOverlayMaterial() != null - ? ImmutableSet.of(attrs.getStillMaterial(), attrs.getFlowingMaterial(), attrs.getOverlayMaterial()) - : ImmutableSet.of(attrs.getStillMaterial(), attrs.getFlowingMaterial()); + return ForgeHooksClient.getFluidMaterials(fluid).collect(Collectors.toList()); } @Override @@ -89,9 +88,9 @@ public final class ModelFluid implements IModelGeometry PerspectiveMapWrapper.getTransforms(sprite), modelLocation, attrs.getColor(), - spriteGetter.apply(attrs.getStillMaterial()), - spriteGetter.apply(attrs.getFlowingMaterial()), - Optional.ofNullable(attrs.getOverlayMaterial()).map(spriteGetter), + spriteGetter.apply(ForgeHooksClient.getBlockMaterial(attrs.getStillTexture())), + spriteGetter.apply(ForgeHooksClient.getBlockMaterial(attrs.getFlowingTexture())), + Optional.ofNullable(attrs.getOverlayTexture()).map(ForgeHooksClient::getBlockMaterial).map(spriteGetter), attrs.isLighterThanAir(), null ); diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index bcff28a1c0..496cf05bd0 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -846,15 +846,15 @@ public class ForgeHooks .color(0).density(0).temperature(0).luminosity(0).viscosity(0).build(fluid); if (fluid instanceof WaterFluid) return net.minecraftforge.fluids.FluidAttributes.Water.builder( - new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("block/water_still")), - new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("block/water_flow"))) - .overlay(new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("block/water_overlay"))) + new ResourceLocation("block/water_still"), + new ResourceLocation("block/water_flow")) + .overlay(new ResourceLocation("block/water_overlay")) .translationKey("block.minecraft.water") .color(0xFF3F76E4).build(fluid); if (fluid instanceof LavaFluid) return net.minecraftforge.fluids.FluidAttributes.builder( - new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("block/lava_still")), - new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("block/lava_flow"))) + new ResourceLocation("block/lava_still"), + new ResourceLocation("block/lava_flow")) .translationKey("block.minecraft.lava") .luminosity(15).density(3000).viscosity(6000).temperature(1300).build(fluid); throw new RuntimeException("Mod fluids must override createAttributes."); diff --git a/src/main/java/net/minecraftforge/fluids/FluidAttributes.java b/src/main/java/net/minecraftforge/fluids/FluidAttributes.java index 760d03ce72..647613c1e9 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidAttributes.java +++ b/src/main/java/net/minecraftforge/fluids/FluidAttributes.java @@ -22,7 +22,6 @@ package net.minecraftforge.fluids; import javax.annotation.Nullable; import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.model.Material; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.IFluidState; import net.minecraft.item.ItemStack; @@ -63,11 +62,11 @@ public class FluidAttributes private String translationKey; - private final Material stillTexture; - private final Material flowingTexture; + private final ResourceLocation stillTexture; + private final ResourceLocation flowingTexture; @Nullable - private final Material overlayTexture; + private final ResourceLocation overlayTexture; private final SoundEvent fillSound; private final SoundEvent emptySound; @@ -275,18 +274,18 @@ public class FluidAttributes return color; } - public Material getStillMaterial() + public ResourceLocation getStillTexture() { return stillTexture; } - public Material getFlowingMaterial() + public ResourceLocation getFlowingTexture() { return flowingTexture; } @Nullable - public Material getOverlayMaterial() + public ResourceLocation getOverlayTexture() { return overlayTexture; } @@ -309,8 +308,8 @@ public class FluidAttributes public boolean isGaseous(FluidStack stack){ return isGaseous(); } public Rarity getRarity(FluidStack stack){ return getRarity(); } public int getColor(FluidStack stack){ return getColor(); } - public Material getStillMaterial(FluidStack stack) { return getStillMaterial(); } - public Material getFlowingMaterial(FluidStack stack) { return getFlowingMaterial(); } + public ResourceLocation getStillTexture(FluidStack stack) { return getStillTexture(); } + public ResourceLocation getFlowingTexture(FluidStack stack) { return getFlowingTexture(); } public SoundEvent getFillSound(FluidStack stack) { return getFillSound(); } public SoundEvent getEmptySound(FluidStack stack) { return getEmptySound(); } @@ -322,16 +321,16 @@ public class FluidAttributes public boolean isGaseous(ILightReader world, BlockPos pos){ return isGaseous(); } public Rarity getRarity(ILightReader world, BlockPos pos){ return getRarity(); } public int getColor(ILightReader world, BlockPos pos){ return getColor(); } - public Material getStillMaterial(ILightReader world, BlockPos pos) { return getStillMaterial(); } - public Material getFlowingMaterial(ILightReader world, BlockPos pos) { return getFlowingMaterial(); } + public ResourceLocation getStillTexture(ILightReader world, BlockPos pos) { return getStillTexture(); } + public ResourceLocation getFlowingTexture(ILightReader world, BlockPos pos) { return getFlowingTexture(); } public SoundEvent getFillSound(ILightReader world, BlockPos pos) { return getFillSound(); } public SoundEvent getEmptySound(ILightReader world, BlockPos pos) { return getEmptySound(); } - public static Builder builder(Material stillTexture, Material flowingTexture) { + public static Builder builder(ResourceLocation stillTexture, ResourceLocation flowingTexture) { return new Builder(stillTexture, flowingTexture, FluidAttributes::new); } - public Stream getTextures() + public Stream getTextures() { if (overlayTexture != null) return Stream.of(stillTexture, flowingTexture, overlayTexture); @@ -340,9 +339,9 @@ public class FluidAttributes public static class Builder { - private final Material stillTexture; - private final Material flowingTexture; - private Material overlayTexture; + private final ResourceLocation stillTexture; + private final ResourceLocation flowingTexture; + private ResourceLocation overlayTexture; private int color = 0xFFFFFFFF; private String translationKey; private SoundEvent fillSound; @@ -355,7 +354,7 @@ public class FluidAttributes private Rarity rarity = Rarity.COMMON; private BiFunction factory; - protected Builder(Material stillTexture, Material flowingTexture, BiFunction factory) { + protected Builder(ResourceLocation stillTexture, ResourceLocation flowingTexture, BiFunction factory) { this.factory = factory; this.stillTexture = stillTexture; this.flowingTexture = flowingTexture; @@ -373,7 +372,7 @@ public class FluidAttributes return this; } - public final Builder overlay(Material texture) + public final Builder overlay(ResourceLocation texture) { overlayTexture = texture; return this; @@ -447,7 +446,7 @@ public class FluidAttributes return BiomeColors.func_228363_c_(world, pos) | 0xFF000000; } - public static Builder builder(Material stillTexture, Material flowingTexture) { + public static Builder builder(ResourceLocation stillTexture, ResourceLocation flowingTexture) { return new Builder(stillTexture, flowingTexture, Water::new); } } diff --git a/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java b/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java index 59febf69d9..fdc3af0df8 100644 --- a/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java +++ b/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java @@ -19,16 +19,20 @@ package net.minecraftforge.debug.fluid; +import org.apache.commons.lang3.Validate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FlowingFluidBlock; -import net.minecraft.client.renderer.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.fluid.FlowingFluid; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; -import net.minecraft.item.*; +import net.minecraft.item.BucketItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.ResourceLocation; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fluids.FluidAttributes; @@ -40,15 +44,14 @@ import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import org.apache.commons.lang3.Validate; @Mod(NewFluidTest.MODID) public class NewFluidTest { public static final String MODID = "new_fluid_test"; - public static final Material FLUID_STILL = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("minecraft:block/brown_mushroom_block")); - public static final Material FLUID_FLOWING = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation("minecraft:block/mushroom_stem")); + public static final ResourceLocation FLUID_STILL = new ResourceLocation("minecraft:block/brown_mushroom_block"); + public static final ResourceLocation FLUID_FLOWING = new ResourceLocation("minecraft:block/mushroom_stem"); public static final DeferredRegister BLOCKS = new DeferredRegister<>(ForgeRegistries.BLOCKS, MODID); public static final DeferredRegister ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, MODID);