package net.glowstone.block.blocktype;
import net.glowstone.GlowWorld;
import net.glowstone.block.GlowBlock;
import net.glowstone.block.GlowBlockState;
import net.glowstone.entity.GlowPlayer;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import org.bukkit.util.Vector;
import java.util.Arrays;
import java.util.Collection;
public class BlockLog2 extends BlockType {
@Override
public void placeBlock(GlowPlayer player, GlowBlockState state, BlockFace face, ItemStack holding, Vector clickedLoc) {
super.placeBlock(player, state, face, holding, clickedLoc);
// No Tree2 MaterialData
MaterialData data = state.getData();
data.setData(setTree(face, (byte) holding.getDurability()));
state.setData(data);
}
public byte setTree(BlockFace dir, byte data) {
switch (dir) {
case UP:
case DOWN:
data += 0;
break;
case WEST:
case EAST:
data += 4;
break;
case NORTH:
case SOUTH:
data += 8;
break;
case SELF:
default:
data += 12;
break;
}
return data;
}
@Override
public Collection<ItemStack> getDrops(GlowBlock block, ItemStack tool) {
return Arrays.asList(new ItemStack(Material.LOG_2, 1, (short) (block.getData() & 0x03)));
}
@Override
public void blockDestroy(GlowPlayer player, GlowBlock block, BlockFace face) {
// vanilla set leaf decay check in a 9x9x9 neighboring when a log block is removed
final GlowWorld world = block.getWorld();
for (int x = 0; x < 9; x++) {
for (int z = 0; z < 9; z++) {
for (int y = 0; y < 9; y++) {
final GlowBlock b = world.getBlockAt(block.getLocation().add(x - 4, y - 4, z - 4));
if (b.getType() == Material.LEAVES || b.getType() == Material.LEAVES_2) {
final GlowBlockState state = b.getState();
if ((state.getRawData() & 0x08) == 0 && (state.getRawData() & 0x04) == 0) { // check decay is off and decay is on
// set decay check on for this leaves block
state.setRawData((byte) (state.getRawData() | 0x08));
state.update(true);
}
}
}
}
}
}
}