Added Block::getFogColor to allow custom blocks to control fog colors while inside them. (#4090)
This commit is contained in:
parent
0b969ef495
commit
9e413de6c9
5 changed files with 205 additions and 5 deletions
|
@ -227,7 +227,7 @@
|
|||
public SoundType func_185467_w()
|
||||
{
|
||||
return this.field_149762_H;
|
||||
@@ -936,6 +951,1218 @@
|
||||
@@ -936,6 +951,1255 @@
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1400,6 +1400,43 @@
|
|||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Use this to change the fog color used when the entity is "inside" a material.
|
||||
+ * Vec3d is used here as "r/g/b" 0 - 1 values.
|
||||
+ *
|
||||
+ * @param world The world.
|
||||
+ * @param pos The position at the entity viewport.
|
||||
+ * @param state The state at the entity viewport.
|
||||
+ * @param entity the entity
|
||||
+ * @param originalColor The current fog color, You are not expected to use this, Return as the default if applicable.
|
||||
+ * @return The new fog color.
|
||||
+ */
|
||||
+ @SideOnly (Side.CLIENT)
|
||||
+ public Vec3d getFogColor(World world, BlockPos pos, IBlockState state, Entity entity, Vec3d originalColor, float partialTicks)
|
||||
+ {
|
||||
+ if (state.func_185904_a() == Material.field_151586_h)
|
||||
+ {
|
||||
+ float f12 = 0.0F;
|
||||
+
|
||||
+ if (entity instanceof net.minecraft.entity.EntityLivingBase)
|
||||
+ {
|
||||
+ net.minecraft.entity.EntityLivingBase ent = (net.minecraft.entity.EntityLivingBase)entity;
|
||||
+ f12 = (float)net.minecraft.enchantment.EnchantmentHelper.func_185292_c(ent) * 0.2F;
|
||||
+
|
||||
+ if (ent.func_70644_a(net.minecraft.init.MobEffects.field_76427_o))
|
||||
+ {
|
||||
+ f12 = f12 * 0.3F + 0.6F;
|
||||
+ }
|
||||
+ }
|
||||
+ return new Vec3d(0.02F + f12, 0.02F + f12, 0.2F + f12);
|
||||
+ }
|
||||
+ else if (state.func_185904_a() == Material.field_151587_i)
|
||||
+ {
|
||||
+ return new Vec3d(0.6F, 0.1F, 0.0F);
|
||||
+ }
|
||||
+ return originalColor;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets the {@link IBlockState} to place
|
||||
+ * @param world The world the block is being placed in
|
||||
+ * @param pos The position the block is being placed at
|
||||
|
@ -1446,7 +1483,7 @@
|
|||
public static void func_149671_p()
|
||||
{
|
||||
func_176215_a(0, field_176230_a, (new BlockAir()).func_149663_c("air"));
|
||||
@@ -1247,14 +2474,7 @@
|
||||
@@ -1247,14 +2511,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
32
patches/minecraft/net/minecraft/block/BlockLiquid.java.patch
Normal file
32
patches/minecraft/net/minecraft/block/BlockLiquid.java.patch
Normal file
|
@ -0,0 +1,32 @@
|
|||
--- ../src-base/minecraft/net/minecraft/block/BlockLiquid.java
|
||||
+++ ../src-work/minecraft/net/minecraft/block/BlockLiquid.java
|
||||
@@ -452,4 +452,29 @@
|
||||
{
|
||||
return BlockFaceShape.UNDEFINED;
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ @SideOnly (Side.CLIENT)
|
||||
+ public Vec3d getFogColor(World world, BlockPos pos, IBlockState state, Entity entity, Vec3d originalColor, float partialTicks)
|
||||
+ {
|
||||
+ Vec3d viewport = net.minecraft.client.renderer.ActiveRenderInfo.func_178806_a(entity, partialTicks);
|
||||
+
|
||||
+ if (state.func_185904_a().func_76224_d())
|
||||
+ {
|
||||
+ float height = 0.0F;
|
||||
+ if (state.func_177230_c() instanceof BlockLiquid)
|
||||
+ {
|
||||
+ height = func_149801_b(state.func_177229_b(field_176367_b)) - 0.11111111F;
|
||||
+ }
|
||||
+ float f1 = (float) (pos.func_177956_o() + 1) - height;
|
||||
+ if (viewport.field_72448_b > (double)f1)
|
||||
+ {
|
||||
+ BlockPos upPos = pos.func_177984_a();
|
||||
+ IBlockState upState = world.func_180495_p(upPos);
|
||||
+ return upState.func_177230_c().getFogColor(world, upPos, upState, entity, originalColor, partialTicks);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return super.getFogColor(world, pos, state, entity, originalColor, partialTicks);
|
||||
+ }
|
||||
}
|
|
@ -167,7 +167,47 @@
|
|||
float f = this.field_78531_r.field_71441_e.func_72867_j(p_78474_1_);
|
||||
|
||||
if (f > 0.0F)
|
||||
@@ -1845,6 +1872,13 @@
|
||||
@@ -1749,30 +1776,17 @@
|
||||
this.field_175082_R = (float)vec3d3.field_72448_b;
|
||||
this.field_175081_S = (float)vec3d3.field_72449_c;
|
||||
}
|
||||
- else if (iblockstate.func_185904_a() == Material.field_151586_h)
|
||||
+ else
|
||||
{
|
||||
- float f12 = 0.0F;
|
||||
-
|
||||
- if (entity instanceof EntityLivingBase)
|
||||
- {
|
||||
- f12 = (float)EnchantmentHelper.func_185292_c((EntityLivingBase)entity) * 0.2F;
|
||||
-
|
||||
- if (((EntityLivingBase)entity).func_70644_a(MobEffects.field_76427_o))
|
||||
- {
|
||||
- f12 = f12 * 0.3F + 0.6F;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- this.field_175080_Q = 0.02F + f12;
|
||||
- this.field_175082_R = 0.02F + f12;
|
||||
- this.field_175081_S = 0.2F + f12;
|
||||
+ //Forge Moved to Block.
|
||||
+ Vec3d viewport = ActiveRenderInfo.func_178806_a(entity, p_78466_1_);
|
||||
+ BlockPos viewportPos = new BlockPos(viewport);
|
||||
+ IBlockState viewportState = this.field_78531_r.field_71441_e.func_180495_p(viewportPos);
|
||||
+ Vec3d inMaterialColor = viewportState.func_177230_c().getFogColor(this.field_78531_r.field_71441_e, viewportPos, viewportState, entity, new Vec3d(field_175080_Q, field_175082_R, field_175081_S), p_78466_1_);
|
||||
+ this.field_175080_Q = (float)inMaterialColor.field_72450_a;
|
||||
+ this.field_175082_R = (float)inMaterialColor.field_72448_b;
|
||||
+ this.field_175081_S = (float)inMaterialColor.field_72449_c;
|
||||
}
|
||||
- else if (iblockstate.func_185904_a() == Material.field_151587_i)
|
||||
- {
|
||||
- this.field_175080_Q = 0.6F;
|
||||
- this.field_175082_R = 0.1F;
|
||||
- this.field_175081_S = 0.0F;
|
||||
- }
|
||||
|
||||
float f13 = this.field_78535_ad + (this.field_78539_ae - this.field_78535_ad) * p_78466_1_;
|
||||
this.field_175080_Q *= f13;
|
||||
@@ -1845,6 +1859,13 @@
|
||||
this.field_175081_S = f7;
|
||||
}
|
||||
|
||||
|
@ -181,7 +221,7 @@
|
|||
GlStateManager.func_179082_a(this.field_175080_Q, this.field_175082_R, this.field_175081_S, 0.0F);
|
||||
}
|
||||
|
||||
@@ -1855,7 +1889,9 @@
|
||||
@@ -1855,7 +1876,9 @@
|
||||
GlStateManager.func_187432_a(0.0F, -1.0F, 0.0F);
|
||||
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
IBlockState iblockstate = ActiveRenderInfo.func_186703_a(this.field_78531_r.field_71441_e, entity, p_78468_2_);
|
||||
|
@ -192,7 +232,7 @@
|
|||
if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).func_70644_a(MobEffects.field_76440_q))
|
||||
{
|
||||
float f1 = 5.0F;
|
||||
@@ -1940,6 +1976,7 @@
|
||||
@@ -1940,6 +1963,7 @@
|
||||
GlStateManager.func_179102_b(f * 0.05F);
|
||||
GlStateManager.func_179153_c(Math.min(f, 192.0F) * 0.5F);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
package net.minecraftforge.debug;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
||||
import net.minecraftforge.client.model.ModelLoader;
|
||||
import net.minecraftforge.event.RegistryEvent;
|
||||
import net.minecraftforge.fluids.BlockFluidClassic;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
|
||||
|
||||
@EventBusSubscriber
|
||||
@Mod (modid = FogColorInsideMaterialTest.MOD_ID, name = "FogColor inside material debug.", version = "1.0", acceptableRemoteVersions = "*")
|
||||
public class FogColorInsideMaterialTest
|
||||
{
|
||||
|
||||
public static final String MOD_ID = "fogcolorinsidematerialtest";
|
||||
|
||||
@ObjectHolder ("test_fluid")
|
||||
public static final Block FLUID_BLOCK = null;
|
||||
@ObjectHolder ("test_fluid")
|
||||
public static final Item FLUID_ITEM = null;
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerBlocks(RegistryEvent.Register<Block> event)
|
||||
{
|
||||
Block fluid = new BlockFluidClassic(FluidRegistry.WATER, Material.WATER)
|
||||
{
|
||||
@Override
|
||||
public Vec3d getFogColor(World world, BlockPos pos, IBlockState state, Entity entity, Vec3d originalColor, float partialTicks)
|
||||
{
|
||||
return new Vec3d(0.6F, 0.1F, 0.0F);
|
||||
}
|
||||
};
|
||||
fluid.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
|
||||
fluid.setUnlocalizedName(MOD_ID + ":" + "test_fluid");
|
||||
fluid.setRegistryName("test_fluid");
|
||||
event.getRegistry().register(fluid);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerItems(RegistryEvent.Register<Item> event)
|
||||
{
|
||||
event.getRegistry().register(new ItemBlock(FLUID_BLOCK).setRegistryName(FLUID_BLOCK.getRegistryName()));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerModels(ModelRegistryEvent event)
|
||||
{
|
||||
ModelResourceLocation fluidLocation = new ModelResourceLocation(MOD_ID.toLowerCase() + ":test_fluid", "fluid");
|
||||
ModelLoader.registerItemVariants(FLUID_ITEM);
|
||||
ModelLoader.setCustomMeshDefinition(FLUID_ITEM, stack -> fluidLocation);
|
||||
ModelLoader.setCustomStateMapper(FLUID_BLOCK, new StateMapperBase()
|
||||
{
|
||||
@Override
|
||||
protected ModelResourceLocation getModelResourceLocation(IBlockState state)
|
||||
{
|
||||
return fluidLocation;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"model": "forge:fluid"
|
||||
},
|
||||
"variants": {
|
||||
"fluid": [
|
||||
{
|
||||
"custom": {
|
||||
"fluid": "test_fluid"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue