base mod created
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
package net.minecraft.block;
|
||||
|
||||
import java.util.Random;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class BlockRedstoneOre extends Block
|
||||
{
|
||||
private final boolean isOn;
|
||||
|
||||
public BlockRedstoneOre(boolean isOn)
|
||||
{
|
||||
super(Material.ROCK);
|
||||
|
||||
if (isOn)
|
||||
{
|
||||
this.setTickRandomly(true);
|
||||
}
|
||||
|
||||
this.isOn = isOn;
|
||||
}
|
||||
|
||||
/**
|
||||
* How many world ticks before ticking
|
||||
*/
|
||||
public int tickRate(World worldIn)
|
||||
{
|
||||
return 30;
|
||||
}
|
||||
|
||||
public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn)
|
||||
{
|
||||
this.activate(worldIn, pos);
|
||||
super.onBlockClicked(worldIn, pos, playerIn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the given entity walks on this Block
|
||||
*/
|
||||
public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn)
|
||||
{
|
||||
this.activate(worldIn, pos);
|
||||
super.onEntityWalk(worldIn, pos, entityIn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the block is right clicked by a player.
|
||||
*/
|
||||
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
|
||||
{
|
||||
this.activate(worldIn, pos);
|
||||
return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
|
||||
}
|
||||
|
||||
private void activate(World worldIn, BlockPos pos)
|
||||
{
|
||||
this.spawnParticles(worldIn, pos);
|
||||
|
||||
if (this == Blocks.REDSTONE_ORE)
|
||||
{
|
||||
worldIn.setBlockState(pos, Blocks.LIT_REDSTONE_ORE.getDefaultState());
|
||||
}
|
||||
}
|
||||
|
||||
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
|
||||
{
|
||||
if (this == Blocks.LIT_REDSTONE_ORE)
|
||||
{
|
||||
worldIn.setBlockState(pos, Blocks.REDSTONE_ORE.getDefaultState());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Item that this Block should drop when harvested.
|
||||
*/
|
||||
public Item getItemDropped(IBlockState state, Random rand, int fortune)
|
||||
{
|
||||
return Items.REDSTONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the quantity dropped based on the given fortune level
|
||||
*/
|
||||
public int quantityDroppedWithBonus(int fortune, Random random)
|
||||
{
|
||||
return this.quantityDropped(random) + random.nextInt(fortune + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the quantity of items to drop on block destruction.
|
||||
*/
|
||||
public int quantityDropped(Random random)
|
||||
{
|
||||
return 4 + random.nextInt(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawns this Block's drops into the World as EntityItems.
|
||||
*/
|
||||
public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune)
|
||||
{
|
||||
super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getExpDrop(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune)
|
||||
{
|
||||
if (this.getItemDropped(state, RANDOM, fortune) != Item.getItemFromBlock(this))
|
||||
{
|
||||
return 1 + RANDOM.nextInt(5);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand)
|
||||
{
|
||||
if (this.isOn)
|
||||
{
|
||||
this.spawnParticles(worldIn, pos);
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnParticles(World worldIn, BlockPos pos)
|
||||
{
|
||||
Random random = worldIn.rand;
|
||||
double d0 = 0.0625D;
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
double d1 = (double)((float)pos.getX() + random.nextFloat());
|
||||
double d2 = (double)((float)pos.getY() + random.nextFloat());
|
||||
double d3 = (double)((float)pos.getZ() + random.nextFloat());
|
||||
|
||||
if (i == 0 && !worldIn.getBlockState(pos.up()).isOpaqueCube())
|
||||
{
|
||||
d2 = (double)pos.getY() + 0.0625D + 1.0D;
|
||||
}
|
||||
|
||||
if (i == 1 && !worldIn.getBlockState(pos.down()).isOpaqueCube())
|
||||
{
|
||||
d2 = (double)pos.getY() - 0.0625D;
|
||||
}
|
||||
|
||||
if (i == 2 && !worldIn.getBlockState(pos.south()).isOpaqueCube())
|
||||
{
|
||||
d3 = (double)pos.getZ() + 0.0625D + 1.0D;
|
||||
}
|
||||
|
||||
if (i == 3 && !worldIn.getBlockState(pos.north()).isOpaqueCube())
|
||||
{
|
||||
d3 = (double)pos.getZ() - 0.0625D;
|
||||
}
|
||||
|
||||
if (i == 4 && !worldIn.getBlockState(pos.east()).isOpaqueCube())
|
||||
{
|
||||
d1 = (double)pos.getX() + 0.0625D + 1.0D;
|
||||
}
|
||||
|
||||
if (i == 5 && !worldIn.getBlockState(pos.west()).isOpaqueCube())
|
||||
{
|
||||
d1 = (double)pos.getX() - 0.0625D;
|
||||
}
|
||||
|
||||
if (d1 < (double)pos.getX() || d1 > (double)(pos.getX() + 1) || d2 < 0.0D || d2 > (double)(pos.getY() + 1) || d3 < (double)pos.getZ() || d3 > (double)(pos.getZ() + 1))
|
||||
{
|
||||
worldIn.spawnParticle(EnumParticleTypes.REDSTONE, d1, d2, d3, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected ItemStack getSilkTouchDrop(IBlockState state)
|
||||
{
|
||||
return new ItemStack(Blocks.REDSTONE_ORE);
|
||||
}
|
||||
|
||||
public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
|
||||
{
|
||||
return new ItemStack(Item.getItemFromBlock(Blocks.REDSTONE_ORE), 1, this.damageDropped(state));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user