Search in sources :

Example 46 with GlowBlockState

use of net.glowstone.block.GlowBlockState in project Glowstone by GlowstoneMC.

the class BlockMycel method updateBlock.

@Override
public void updateBlock(GlowBlock block) {
    GlowBlock blockAbove = block.getRelative(BlockFace.UP);
    if (blockAbove.getLightLevel() < 4 && blockAbove.getMaterialValues().getLightOpacity() > 2) {
        // mycel block turns into dirt block
        GlowBlockState state = block.getState();
        state.setType(Material.DIRT);
        BlockFadeEvent fadeEvent = new BlockFadeEvent(block, state);
        EventFactory.callEvent(fadeEvent);
        if (!fadeEvent.isCancelled()) {
            state.update(true);
        }
    } else if (blockAbove.getLightLevel() >= 9) {
        GlowWorld world = block.getWorld();
        int sourceX = block.getX();
        int sourceY = block.getY();
        int sourceZ = block.getZ();
        // mycel spread randomly around
        for (int i = 0; i < 4; i++) {
            int x = sourceX + random.nextInt(3) - 1;
            int z = sourceZ + random.nextInt(3) - 1;
            int y = sourceY + random.nextInt(5) - 3;
            GlowBlock targetBlock = world.getBlockAt(x, y, z);
            GlowBlock targetAbove = targetBlock.getRelative(BlockFace.UP);
            if (targetBlock.getType() == Material.DIRT && // only spread on normal dirt
            targetBlock.getData() == 0 && targetAbove.getMaterialValues().getLightOpacity() <= 2 && targetAbove.getLightLevel() >= 4) {
                GlowBlockState state = targetBlock.getState();
                state.setType(Material.MYCEL);
                state.setRawData((byte) 0);
                BlockSpreadEvent spreadEvent = new BlockSpreadEvent(targetBlock, block, state);
                EventFactory.callEvent(spreadEvent);
                if (!spreadEvent.isCancelled()) {
                    state.update(true);
                }
            }
        }
    }
}
Also used : GlowBlock(net.glowstone.block.GlowBlock) BlockFadeEvent(org.bukkit.event.block.BlockFadeEvent) BlockSpreadEvent(org.bukkit.event.block.BlockSpreadEvent) GlowBlockState(net.glowstone.block.GlowBlockState) GlowWorld(net.glowstone.GlowWorld)

Example 47 with GlowBlockState

use of net.glowstone.block.GlowBlockState in project Glowstone by GlowstoneMC.

the class BlockNetherWart method updateBlock.

@Override
public void updateBlock(GlowBlock block) {
    int cropState = block.getData();
    if (cropState < NetherWartsState.RIPE.ordinal() && random.nextInt(10) == 0) {
        cropState++;
        GlowBlockState state = block.getState();
        state.setRawData((byte) cropState);
        BlockGrowEvent growEvent = new BlockGrowEvent(block, state);
        EventFactory.callEvent(growEvent);
        if (!growEvent.isCancelled()) {
            state.update(true);
        }
    }
}
Also used : GlowBlockState(net.glowstone.block.GlowBlockState) BlockGrowEvent(org.bukkit.event.block.BlockGrowEvent)

Example 48 with GlowBlockState

use of net.glowstone.block.GlowBlockState in project Glowstone by GlowstoneMC.

the class BlockFenceGate method onRedstoneUpdate.

@Override
public void onRedstoneUpdate(GlowBlock block) {
    GlowBlockState state = block.getState();
    Gate gate = (Gate) state.getData();
    boolean powered = block.isBlockIndirectlyPowered();
    if (powered != gate.isOpen()) {
        gate.setOpen(powered);
        state.update();
    }
}
Also used : GlowBlockState(net.glowstone.block.GlowBlockState) Gate(org.bukkit.material.Gate)

Example 49 with GlowBlockState

use of net.glowstone.block.GlowBlockState in project Glowstone by GlowstoneMC.

the class BlockDoor method placeBlock.

@Override
public void placeBlock(GlowPlayer player, GlowBlockState state, BlockFace face, ItemStack holding, Vector clickedLoc) {
    // place the door and calculate the facing
    super.placeBlock(player, state, face, holding, clickedLoc);
    MaterialData data = state.getData();
    if (!(data instanceof Door)) {
        warnMaterialData(Door.class, data);
        return;
    }
    BlockFace facing = player.getDirection();
    ((Door) data).setFacingDirection(facing.getOppositeFace());
    // modify facing for double-doors
    GlowBlock leftBlock = null;
    switch(facing) {
        case NORTH:
            leftBlock = state.getBlock().getRelative(BlockFace.WEST);
            break;
        case WEST:
            leftBlock = state.getBlock().getRelative(BlockFace.SOUTH);
            break;
        case SOUTH:
            leftBlock = state.getBlock().getRelative(BlockFace.EAST);
            break;
        case EAST:
            leftBlock = state.getBlock().getRelative(BlockFace.NORTH);
            break;
    }
    if (leftBlock != null && leftBlock.getState().getData() instanceof Door) {
        switch(facing) {
            case NORTH:
                data.setData((byte) 6);
                break;
            case WEST:
                data.setData((byte) 5);
                break;
            case SOUTH:
                data.setData((byte) 4);
                break;
            case EAST:
                data.setData((byte) 7);
                break;
        }
    }
    // place top half of door
    GlowBlockState topState = state.getBlock().getRelative(BlockFace.UP).getState();
    topState.setType(state.getType());
    MaterialData topData = topState.getData();
    if (!(topData instanceof Door)) {
        warnMaterialData(Door.class, data);
    } else {
        ((Door) topData).setTopHalf(true);
        topState.update(true);
    }
}
Also used : GlowBlock(net.glowstone.block.GlowBlock) BlockFace(org.bukkit.block.BlockFace) GlowBlockState(net.glowstone.block.GlowBlockState) MaterialData(org.bukkit.material.MaterialData) Door(org.bukkit.material.Door)

Example 50 with GlowBlockState

use of net.glowstone.block.GlowBlockState in project Glowstone by GlowstoneMC.

the class BlockDoor method onRedstoneUpdate.

@Override
public void onRedstoneUpdate(GlowBlock block) {
    GlowBlockState state = block.getState();
    Door door = (Door) state.getData();
    if (!door.isTopHalf()) {
        boolean powered = block.isBlockIndirectlyPowered();
        if (powered != door.isOpen()) {
            door.setOpen(powered);
            state.update();
        }
    }
}
Also used : GlowBlockState(net.glowstone.block.GlowBlockState) Door(org.bukkit.material.Door)

Aggregations

GlowBlockState (net.glowstone.block.GlowBlockState)54 GlowBlock (net.glowstone.block.GlowBlock)21 MaterialData (org.bukkit.material.MaterialData)20 BlockGrowEvent (org.bukkit.event.block.BlockGrowEvent)11 GlowWorld (net.glowstone.GlowWorld)10 BlockFadeEvent (org.bukkit.event.block.BlockFadeEvent)7 BlockFace (org.bukkit.block.BlockFace)6 BlockSpreadEvent (org.bukkit.event.block.BlockSpreadEvent)5 ItemStack (org.bukkit.inventory.ItemStack)4 Material (org.bukkit.Material)3 Block (org.bukkit.block.Block)3 Door (org.bukkit.material.Door)3 DoublePlant (org.bukkit.material.DoublePlant)3 BlockType (net.glowstone.block.blocktype.BlockType)2 ItemType (net.glowstone.block.itemtype.ItemType)2 GlowDispenser (net.glowstone.block.state.GlowDispenser)2 GlowFlowerPot (net.glowstone.block.state.GlowFlowerPot)2 BlockIgniteEvent (org.bukkit.event.block.BlockIgniteEvent)2 CocoaPlant (org.bukkit.material.CocoaPlant)2 CocoaPlantSize (org.bukkit.material.CocoaPlant.CocoaPlantSize)2