Fixed block colouring in the world

This commit is contained in:
Adubbz 2016-03-17 10:22:02 +11:00
parent 367fa2cefa
commit 60f2ee807b
8 changed files with 149 additions and 55 deletions

View file

@ -44,7 +44,7 @@ public class BlockBOPDecoration extends Block implements IBOPBlock
@Override @Override
public String getStateName(IBlockState state) {return "";} public String getStateName(IBlockState state) {return "";}
@Override @Override
public IBlockColor getColourHandler() { return ModBlocks.FOLIAGE_COLOURING; } public IBlockColor getColourHandler() { return null; }
// constructor // constructor
public BlockBOPDecoration() { public BlockBOPDecoration() {

View file

@ -20,6 +20,7 @@ import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
@ -72,6 +73,39 @@ public class BlockBOPDoublePlant extends BlockBOPDoubleDecoration implements ISh
return ((DoublePlantType) state.getValue(VARIANT)).getName(); return ((DoublePlantType) state.getValue(VARIANT)).getName();
} }
public enum ColoringType {PLAIN, LIKE_LEAVES, LIKE_GRASS};
public static ColoringType getColoringType(DoublePlantType plant)
{
switch (plant)
{
case FLAX:
return ColoringType.LIKE_GRASS;
default:
return ColoringType.PLAIN;
}
}
public IBlockColor getColourHandler()
{
return new IBlockColor()
{
@Override
public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex)
{
if ( world != null && pos != null)
{
switch (getColoringType((DoublePlantType) state.getValue(VARIANT)))
{
case LIKE_GRASS:
return BiomeColorHelper.getGrassColorAtPos(world, pos);
}
}
return ColorizerFoliage.getFoliageColorBasic();
}
};
}
public BlockBOPDoublePlant() public BlockBOPDoublePlant()
{ {
@ -93,18 +127,7 @@ public class BlockBOPDoublePlant extends BlockBOPDoubleDecoration implements ISh
public enum ColoringType {PLAIN, LIKE_LEAVES, LIKE_GRASS};
public static ColoringType getColoringType(DoublePlantType plant)
{
switch (plant)
{
case FLAX:
return ColoringType.LIKE_GRASS;
default:
return ColoringType.PLAIN;
}
}
/* // different variants have different sizes /* // different variants have different sizes

View file

@ -13,6 +13,7 @@ import java.util.Random;
import biomesoplenty.api.block.BOPBlocks; import biomesoplenty.api.block.BOPBlocks;
import biomesoplenty.api.block.IBOPBlock; import biomesoplenty.api.block.IBOPBlock;
import biomesoplenty.api.block.ISustainsPlantType; import biomesoplenty.api.block.ISustainsPlantType;
import biomesoplenty.common.init.ModBlocks;
import biomesoplenty.common.item.ItemBOPBlock; import biomesoplenty.common.item.ItemBOPBlock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockDirt; import net.minecraft.block.BlockDirt;
@ -86,7 +87,7 @@ public class BlockBOPGrass extends BlockGrass implements IBOPBlock, ISustainsPla
} }
} }
@Override @Override
public IBlockColor getColourHandler() { return null; } public IBlockColor getColourHandler() { return ModBlocks.GRASS_COLORING; }
public BlockBOPGrass() public BlockBOPGrass()
{ {

View file

@ -13,6 +13,7 @@ import java.util.Random;
import biomesoplenty.api.block.IBOPBlock; import biomesoplenty.api.block.IBOPBlock;
import biomesoplenty.api.item.BOPItems; import biomesoplenty.api.item.BOPItems;
import biomesoplenty.common.enums.BOPPlants;
import biomesoplenty.common.enums.BOPTrees; import biomesoplenty.common.enums.BOPTrees;
import biomesoplenty.common.item.ItemBOPBlock; import biomesoplenty.common.item.ItemBOPBlock;
import biomesoplenty.common.util.block.VariantPagingHelper; import biomesoplenty.common.util.block.VariantPagingHelper;
@ -99,8 +100,48 @@ public class BlockBOPLeaves extends BlockLeaves implements IBOPBlock
return tree.getName() + "_leaves"; return tree.getName() + "_leaves";
} }
} }
public enum ColoringType {PLAIN, TINTED, OVERLAY};
public static ColoringType getColoringType(BOPTrees tree)
{
switch (tree)
{
case BAMBOO: case UMBRAN: case DEAD: case ETHEREAL: case FIR: case HELLBARK: case JACARANDA: case MAGIC: case MAPLE: case ORANGE_AUTUMN: case ORIGIN: case PINK_CHERRY: case WHITE_CHERRY: case YELLOW_AUTUMN: case RED_BIG_FLOWER: case YELLOW_BIG_FLOWER:
return ColoringType.PLAIN;
case FLOWERING:
return ColoringType.OVERLAY;
case MAHOGANY: case MANGROVE: case PALM: case PINE: case REDWOOD: case SACRED_OAK: case WILLOW: case EBONY: case EUCALYPTUS: default:
return ColoringType.TINTED;
}
}
@Override @Override
public IBlockColor getColourHandler() { return null; } public IBlockColor getColourHandler()
{
final IProperty variantProp = this.variantProperty;
return new IBlockColor()
{
@Override
public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex)
{
if ( world != null && pos != null)
{
switch (getColoringType((BOPTrees) state.getValue(variantProp)))
{
case TINTED:
return BiomeColorHelper.getFoliageColorAtPos(world, pos);
case OVERLAY:
if (tintIndex == 0)
return BiomeColorHelper.getFoliageColorAtPos(world, pos);
}
}
return 0xFFFFFF;
}
};
}
private BlockBOPLeaves() private BlockBOPLeaves()
{ {
@ -134,22 +175,6 @@ public class BlockBOPLeaves extends BlockLeaves implements IBOPBlock
return meta; return meta;
} }
public enum ColoringType {PLAIN, TINTED, OVERLAY};
public static ColoringType getColoringType(BOPTrees tree)
{
switch (tree)
{
case BAMBOO: case UMBRAN: case DEAD: case ETHEREAL: case FIR: case HELLBARK: case JACARANDA: case MAGIC: case MAPLE: case ORANGE_AUTUMN: case ORIGIN: case PINK_CHERRY: case WHITE_CHERRY: case YELLOW_AUTUMN: case RED_BIG_FLOWER: case YELLOW_BIG_FLOWER:
return ColoringType.PLAIN;
case FLOWERING:
return ColoringType.OVERLAY;
case MAHOGANY: case MANGROVE: case PALM: case PINE: case REDWOOD: case SACRED_OAK: case WILLOW: case EBONY: case EUCALYPTUS: default:
return ColoringType.TINTED;
}
}
// blocks that are not placed during generation should not decay // blocks that are not placed during generation should not decay
@Override @Override
public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
@ -359,7 +384,7 @@ public class BlockBOPLeaves extends BlockLeaves implements IBOPBlock
} }
//The fields used by getBlockLayer() and isOpaqueCube() are set externally for Blocks.leaves *specifically*. As a result, we do not inherit //The fields used by getBlockLayer(), isOpaqueCube() and shouldSideBeRendered are set externally for Blocks.leaves *specifically*. As a result, we do not inherit
//it simply be extending BlockLeaves. //it simply be extending BlockLeaves.
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -374,6 +399,12 @@ public class BlockBOPLeaves extends BlockLeaves implements IBOPBlock
return Blocks.leaves.isOpaqueCube(state); return Blocks.leaves.isOpaqueCube(state);
} }
@SideOnly(Side.CLIENT)
@Override
public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side)
{
return Blocks.leaves.shouldSideBeRendered(state, world, pos, side);
}
// We are forced to implement the method below in order to extend the BlockLeaves abstract class // We are forced to implement the method below in order to extend the BlockLeaves abstract class
// ...however, we don't actually use it anywhere so it's safe to just return null // ...however, we don't actually use it anywhere so it's safe to just return null

View file

@ -20,6 +20,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
@ -108,6 +109,48 @@ public class BlockBOPPlant extends BlockBOPDecoration implements IShearable
} }
} }
public enum ColoringType {PLAIN, LIKE_LEAVES, LIKE_GRASS};
public static ColoringType getColoringType(BOPPlants plant)
{
switch (plant)
{
case SHRUB: case LEAFPILE: case POISONIVY: case BUSH: case BERRYBUSH:
return ColoringType.LIKE_LEAVES;
case SHORTGRASS: case MEDIUMGRASS: case SPROUT: case KORU: case CLOVERPATCH: case WHEATGRASS: case DAMPGRASS:
return ColoringType.LIKE_GRASS;
default:
return ColoringType.PLAIN;
}
}
@Override
public IBlockColor getColourHandler()
{
final IProperty variantProp = this.variantProperty;
return new IBlockColor()
{
@Override
public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex)
{
if ( world != null && pos != null)
{
switch (getColoringType((BOPPlants) state.getValue(variantProp)))
{
case LIKE_LEAVES:
return BiomeColorHelper.getFoliageColorAtPos(world, pos);
case LIKE_GRASS:
return BiomeColorHelper.getGrassColorAtPos(world, pos);
}
}
return ColorizerFoliage.getFoliageColorBasic();
}
};
}
private BlockBOPPlant() private BlockBOPPlant()
{ {
super(); super();
@ -262,23 +305,6 @@ public class BlockBOPPlant extends BlockBOPDecoration implements IShearable
return false; return false;
} }
public enum ColoringType {PLAIN, LIKE_LEAVES, LIKE_GRASS};
public static ColoringType getColoringType(BOPPlants plant)
{
switch (plant)
{
case SHRUB: case LEAFPILE: case POISONIVY: case BUSH: case BERRYBUSH:
return ColoringType.LIKE_LEAVES;
case SHORTGRASS: case MEDIUMGRASS: case SPROUT: case KORU: case CLOVERPATCH: case WHEATGRASS: case DAMPGRASS:
return ColoringType.LIKE_GRASS;
default:
return ColoringType.PLAIN;
}
}
// different variants have different sizes // different variants have different sizes
/* @Override /* @Override
public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos)

View file

@ -9,6 +9,7 @@
package biomesoplenty.common.block; package biomesoplenty.common.block;
import biomesoplenty.api.block.IBOPBlock; import biomesoplenty.api.block.IBOPBlock;
import biomesoplenty.common.init.ModBlocks;
import biomesoplenty.common.item.ItemBOPBlock; import biomesoplenty.common.item.ItemBOPBlock;
import net.minecraft.block.BlockVine; import net.minecraft.block.BlockVine;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
@ -19,7 +20,9 @@ import net.minecraft.init.Blocks;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ColorizerGrass;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.biome.BiomeColorHelper;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@ -36,7 +39,7 @@ public class BlockBOPVine extends BlockVine implements IBOPBlock
@Override @Override
public String getStateName(IBlockState state) {return "";} public String getStateName(IBlockState state) {return "";}
@Override @Override
public IBlockColor getColourHandler() { return null; } public IBlockColor getColourHandler() { return useGreyScaleTextures ? ModBlocks.FOLIAGE_COLOURING : null; }
// if set to true, (the default), use BlockVine getBlockColor(), getRenderColor() and colorMultiplier() functions to color the texture based on biome // if set to true, (the default), use BlockVine getBlockColor(), getRenderColor() and colorMultiplier() functions to color the texture based on biome
// if set to false, use 0xFFFFFF for all the color functions so that the texture is used as it is // if set to false, use 0xFFFFFF for all the color functions so that the texture is used as it is

View file

@ -87,6 +87,7 @@ import net.minecraft.item.ItemDoor;
import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemSlab;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ColorizerFoliage; import net.minecraft.world.ColorizerFoliage;
import net.minecraft.world.ColorizerGrass;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.biome.BiomeColorHelper; import net.minecraft.world.biome.BiomeColorHelper;
import net.minecraftforge.common.EnumPlantType; import net.minecraftforge.common.EnumPlantType;
@ -106,6 +107,15 @@ public class ModBlocks
} }
}; };
public static final IBlockColor GRASS_COLORING = new IBlockColor()
{
@Override
public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex)
{
return world != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(world, pos) : ColorizerGrass.getGrassColor(0.5D, 1.0D);
}
};
// TODO: use getDrops() in classes where the drops are very specific, instead of implementing all 3 of quantityDropped() getItemDropped() and damageDropped() // TODO: use getDrops() in classes where the drops are very specific, instead of implementing all 3 of quantityDropped() getItemDropped() and damageDropped()
// TODO: docblocks! // TODO: docblocks!
// TODO: make better use of canSustainPlant() in BlockDecoration and children // TODO: make better use of canSustainPlant() in BlockDecoration and children

View file

@ -1,5 +1,5 @@
{ {
"parent": "block/tallgrass", "parent": "block/tinted_cross",
"textures": { "textures": {
"cross": "biomesoplenty:blocks/flax_lower" "cross": "biomesoplenty:blocks/flax_lower"
} }