246 lines
7.3 KiB
Java
Executable file
246 lines
7.3 KiB
Java
Executable file
package common.block;
|
|
|
|
import java.util.List;
|
|
|
|
import common.color.Colorizer;
|
|
import common.entity.npc.EntityNPC;
|
|
import common.init.Blocks;
|
|
import common.init.Config;
|
|
import common.init.Items;
|
|
import common.item.CheatTab;
|
|
import common.item.Item;
|
|
import common.item.ItemShears;
|
|
import common.item.ItemStack;
|
|
import common.material.Material;
|
|
import common.model.Model;
|
|
import common.model.ModelProvider;
|
|
import common.properties.IProperty;
|
|
import common.properties.PropertyEnum;
|
|
import common.rng.Random;
|
|
import common.tileentity.TileEntity;
|
|
import common.util.BlockPos;
|
|
import common.util.Identifyable;
|
|
import common.world.IWorldAccess;
|
|
import common.world.State;
|
|
import common.world.World;
|
|
import common.world.AWorldServer;
|
|
|
|
public class BlockTallGrass extends BlockBush implements IGrowable
|
|
{
|
|
public static final PropertyEnum<BlockTallGrass.EnumType> TYPE = PropertyEnum.<BlockTallGrass.EnumType>create("type", BlockTallGrass.EnumType.class);
|
|
|
|
public BlockTallGrass()
|
|
{
|
|
super(Material.vine);
|
|
this.setDefaultState(this.getBaseState().withProperty(TYPE, BlockTallGrass.EnumType.DEAD_BUSH));
|
|
float f = 0.4F;
|
|
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f);
|
|
// this.setTickRandomly();
|
|
}
|
|
|
|
public void updateTick(AWorldServer worldIn, BlockPos pos, State state, Random rand)
|
|
{
|
|
if(Config.tallgrassDry && worldIn.getTemperatureC(pos) >= 50.0f && state.getValue(TYPE) != EnumType.DEAD_BUSH)
|
|
{
|
|
worldIn.setState(pos, state.getValue(TYPE) == EnumType.GRASS || worldIn.rand.chance(20) ? Blocks.air.getState() :
|
|
this.getState().withProperty(TYPE, EnumType.DEAD_BUSH));
|
|
return;
|
|
}
|
|
super.updateTick(worldIn, pos, state, rand);
|
|
}
|
|
|
|
// public int getBlockColor()
|
|
// {
|
|
// return ColorizerFoliage.getGrassColor(0.5D, 1.0D);
|
|
// }
|
|
|
|
public boolean canBlockStay(World worldIn, BlockPos pos, State state)
|
|
{
|
|
return this.canPlaceBlockOn(worldIn.getState(pos.down()).getBlock());
|
|
}
|
|
|
|
/**
|
|
* Whether this Block can be replaced directly by other blocks (true for e.g. tall grass)
|
|
*/
|
|
public boolean isReplaceable(World worldIn, BlockPos pos)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public int getRenderColor(State state)
|
|
{
|
|
if (state.getBlock() != this)
|
|
{
|
|
return super.getRenderColor(state);
|
|
}
|
|
else
|
|
{
|
|
BlockTallGrass.EnumType blocktallgrass$enumtype = (BlockTallGrass.EnumType)state.getValue(TYPE);
|
|
return blocktallgrass$enumtype == BlockTallGrass.EnumType.DEAD_BUSH ? 16777215 : Colorizer.getGrassColor(0.5D, 1.0D);
|
|
}
|
|
}
|
|
|
|
public int colorMultiplier(IWorldAccess worldIn, BlockPos pos, int renderPass)
|
|
{
|
|
return worldIn.getBiomeGenForCoords(pos).getGrassColorAtPos(pos);
|
|
}
|
|
|
|
/**
|
|
* Get the Item that this Block should drop when harvested.
|
|
*/
|
|
public Item getItemDropped(State state, Random rand, int fortune)
|
|
{
|
|
return rand.chance(8) ? Items.wheat : null;
|
|
}
|
|
|
|
/**
|
|
* Get the quantity dropped based on the given fortune level
|
|
*/
|
|
public int quantityDroppedWithBonus(int fortune, Random random)
|
|
{
|
|
return random.roll(fortune * 2 + 1);
|
|
}
|
|
|
|
public void harvestBlock(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te)
|
|
{
|
|
if (!worldIn.client && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemShears)
|
|
{
|
|
// player.triggerAchievement(StatRegistry.mineBlockStatArray[BlockRegistry.getIdFromBlock(this)]);
|
|
spawnAsEntity(worldIn, pos, new ItemStack(Blocks.tallgrass, 1, ((BlockTallGrass.EnumType)state.getValue(TYPE)).getMeta()));
|
|
}
|
|
else
|
|
{
|
|
super.harvestBlock(worldIn, player, pos, state, te);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the meta to use for the Pick Block ItemStack result
|
|
*/
|
|
public int getDamageValue(World worldIn, BlockPos pos)
|
|
{
|
|
State iblockstate = worldIn.getState(pos);
|
|
return iblockstate.getBlock().getMetaFromState(iblockstate);
|
|
}
|
|
|
|
/**
|
|
* returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
|
|
*/
|
|
public void getSubBlocks(Item itemIn, CheatTab tab, List<ItemStack> list)
|
|
{
|
|
for (int i = 0; i < 3; ++i) // FIX (dead)bush!
|
|
{
|
|
list.add(new ItemStack(itemIn, 1, i));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Whether this IGrowable can grow
|
|
*/
|
|
public boolean canGrow(World worldIn, BlockPos pos, State state, boolean isClient)
|
|
{
|
|
return state.getValue(TYPE) != BlockTallGrass.EnumType.DEAD_BUSH;
|
|
}
|
|
|
|
public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, State state)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void grow(AWorldServer worldIn, Random rand, BlockPos pos, State state)
|
|
{
|
|
BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.GRASS;
|
|
|
|
if (state.getValue(TYPE) == BlockTallGrass.EnumType.FERN)
|
|
{
|
|
blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.FERN;
|
|
}
|
|
|
|
if (Blocks.double_plant.canPlaceBlockAt(worldIn, pos))
|
|
{
|
|
Blocks.double_plant.placeAt(worldIn, pos, blockdoubleplant$enumplanttype, 2);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Convert the given metadata into a BlockState for this Block
|
|
*/
|
|
public State getStateFromMeta(int meta)
|
|
{
|
|
return this.getState().withProperty(TYPE, BlockTallGrass.EnumType.byMetadata(meta));
|
|
}
|
|
|
|
/**
|
|
* Convert the BlockState into the correct metadata value
|
|
*/
|
|
public int getMetaFromState(State state)
|
|
{
|
|
return ((BlockTallGrass.EnumType)state.getValue(TYPE)).getMeta();
|
|
}
|
|
|
|
protected IProperty[] getProperties()
|
|
{
|
|
return new IProperty[] {TYPE};
|
|
}
|
|
|
|
// public EnumOffsetType getOffsetType()
|
|
// {
|
|
// return EnumOffsetType.XYZ;
|
|
// }
|
|
|
|
public Model getModel(ModelProvider provider, String name, State state) {
|
|
if(state.getValue(TYPE) != EnumType.DEAD_BUSH)
|
|
return provider.getModel(state.getValue(TYPE).getName()).crossTint();
|
|
else
|
|
return provider.getModel("deadbush").cross();
|
|
}
|
|
|
|
public static enum EnumType implements Identifyable
|
|
{
|
|
DEAD_BUSH(0, "dead_bush"),
|
|
GRASS(1, "tall_grass"),
|
|
FERN(2, "fern");
|
|
|
|
private static final BlockTallGrass.EnumType[] META_LOOKUP = new BlockTallGrass.EnumType[values().length];
|
|
private final int meta;
|
|
private final String name;
|
|
|
|
private EnumType(int meta, String name)
|
|
{
|
|
this.meta = meta;
|
|
this.name = name;
|
|
}
|
|
|
|
public int getMeta()
|
|
{
|
|
return this.meta;
|
|
}
|
|
|
|
public String toString()
|
|
{
|
|
return this.name;
|
|
}
|
|
|
|
public static BlockTallGrass.EnumType byMetadata(int meta)
|
|
{
|
|
if (meta < 0 || meta >= META_LOOKUP.length)
|
|
{
|
|
meta = 0;
|
|
}
|
|
|
|
return META_LOOKUP[meta];
|
|
}
|
|
|
|
public String getName()
|
|
{
|
|
return this.name;
|
|
}
|
|
|
|
static {
|
|
for (BlockTallGrass.EnumType blocktallgrass$enumtype : values())
|
|
{
|
|
META_LOOKUP[blocktallgrass$enumtype.getMeta()] = blocktallgrass$enumtype;
|
|
}
|
|
}
|
|
}
|
|
}
|