Fixed block colouring in the world
This commit is contained in:
parent
367fa2cefa
commit
60f2ee807b
8 changed files with 149 additions and 55 deletions
|
@ -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() {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"parent": "block/tallgrass",
|
"parent": "block/tinted_cross",
|
||||||
"textures": {
|
"textures": {
|
||||||
"cross": "biomesoplenty:blocks/flax_lower"
|
"cross": "biomesoplenty:blocks/flax_lower"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue