Revert fluid change to use Material, fixes server crash

This commit is contained in:
tterrag committed 2019-12-16 23:22:13 -05:00
1 parent 1933d05e36
commit dec91dec68
7 files changed
+61 -44

No files matched your search

@@ -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<Material> textures)
{
ForgeRegistries.FLUIDS.getValues().stream()
.flatMap(f -> f.getAttributes().getTextures())
.filter(Objects::nonNull)
.flatMap(ForgeHooksClient::getFluidMaterials)
.forEach(textures::add);
}
public static Stream<Material> 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));
@@ -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<ModelDynBucket>
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;
@@ -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<ModelFluid>
@Override
public Collection<Material> getTextures(IModelConfiguration owner, Function<ResourceLocation, IUnbakedModel> modelGetter, Set<com.mojang.datafixers.util.Pair<String, String>> 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<ModelFluid>
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
);
@@ -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.");
@@ -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<Material> getTextures()
public Stream<ResourceLocation> 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<Builder,Fluid,FluidAttributes> factory;
protected Builder(Material stillTexture, Material flowingTexture, BiFunction<Builder,Fluid,FluidAttributes> factory) {
protected Builder(ResourceLocation stillTexture, ResourceLocation flowingTexture, BiFunction<Builder,Fluid,FluidAttributes> 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);
}
}