I know the names of block and tile entity class is a bit odd. And my use of variables could be less. It will be changed.
Block:
public class JdwBlockBitumen extends Block implements IHasModel, ITileEntityProvider{
public JdwBlockBitumen(String name, Material material)
{
super(material);
setUnlocalizedName(name);
setRegistryName(name);
setCreativeTab(CreativeTabs.MISC);
setHarvestLevel("pick_axe", 1);
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public TileEntity createNewTileEntity(final World worldIn, int meta) {
return new JdwOSDigger();
}
@Override
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {
}
@Override
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
if (!worldIn.isRemote )
{
final JdwOSDigger tileEntity = (JdwOSDigger) worldIn.getTileEntity(pos);
if(tileEntity != null) {
tileEntity.toggleActive();
}
}
return true;
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
}
@Override
public void breakBlock(World worldIn, BlockPos pos, IBlockState state) {
super.breakBlock(worldIn, pos, state);
}
//registers model
@Override
public void registerModels()
{
DerpWorld.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
}
Tile Entity:
public class JdwOSDigger extends TileEntity implements ITickable{
private boolean aktivitas;
private List<BlockPos> AREA = new ArrayList<BlockPos>();
private int radi;
private int index;
private int tickCounter;
public JdwOSDigger() {
radi = 0;
index = 0;
tickCounter = 0;
aktivitas = false;
}
public void toggleActive() {
if (aktivitas) {
aktivitas = false;
System.out.println("Activated: " + aktivitas + ", Is valid?: " + !this.isInvalid());
}
else {
aktivitas = true;
System.out.println("Activated: " + aktivitas + " , Is valid? " + !this.isInvalid());
mapQuarry(6, this.getPos()); //here is where I call the Tile Entity pos
}
}
public void mapQuarry (int radi, BlockPos pos) {
List<BlockPos> l = new ArrayList<BlockPos>();
int[] squares = new int[radi];
BlockPos qC = null;
int bx, by, bz = 0;
for(int k = 0; k<4; k++) {
switch(k){
case 0: qC = pos.add(radi+1, 0, radi+1);
break;
case 1: qC = pos.add(-(radi+1), 0, radi+1);
break;
case 2: qC = pos.add(radi+1, 0, -(radi+1));
break;
case 3: qC = pos.add(-(radi+1), 0, -(radi+1));
break;
}
for(int e = 0; e<radi/2; e++) {
for(int i = -radi+e; i <= radi-e; i++) {
for (int j = -radi+e; j<=radi-e; j++) {
bx = qC.getX() + i;
bz = qC.getZ() + j;
by = qC.getY() - 1 - e;
BlockPos pos2 = new BlockPos( bx , by, bz );
l.add(pos2);
}
}
}
}
AREA.addAll(l);
System.out.println("map quarry finished, Testing AREA[4] : " + AREA.get(4));
}
public void readFromNBT(NBTTagCompound compound)
{
super.readFromNBT(compound);
aktivitas = compound.getBoolean("hore");
tickCounter = compound.getInteger("kuse");
index = compound.getInteger("lespe");
}
public NBTTagCompound writeToNBT(NBTTagCompound compound)
{
super.writeToNBT(compound);
//compound.setByte();
compound.setInteger("lespe", index);
compound.setInteger("kuse", tickCounter);
compound.setBoolean("hore", aktivitas);
return compound;
}
@Override
public void update()
{
if (!world.isRemote){
if(aktivitas) {
tickCounter++;
if (tickCounter==20) {
world.destroyBlock(AREA.get(index), false);
System.out.println("Destroyed block at: " + AREA.get(index) );
index++;
tickCounter = 0;
}
}
}
}