Search in sources :

Example 1 with PlayerNoteBlockBreak

use of org.cubeengine.module.log.action.block.player.destroy.PlayerNoteBlockBreak in project modules-extra by CubeEngine.

the class ActionBlock method setBlock.

protected boolean setBlock(BlockSection blockData, Location loc, LogAttachment attachment, boolean force, boolean preview, boolean rollback) {
    Block block = loc.getBlock();
    BlockState state = loc.getBlock().getState();
    state.setType(blockData.material);
    if (blockData.material == IRON_DOOR_BLOCK || blockData.material == WOODEN_DOOR) {
        // TODO correct?
        byte data = (byte) (blockData.data & ~8);
        state.setRawData(data);
    } else {
        state.setRawData(blockData.data);
    }
    if (!force && (// TODO correct?
    state.getData() instanceof Attachable || BlockUtil.isDetachableFromBelow(blockData.material))) {
        return false;
    }
    if (state.getData() instanceof Bed) {
        Bed bed = (Bed) state.getData();
        Block headBed = block.getRelative(bed.getFacing());
        BlockState headState = headBed.getState();
        headState.setType(AIR);
        if (preview) {
            attachment.addToPreview(headState);
        } else {
            headState.update(true, false);
        }
    } else if (state.getType() == WOOD_DOOR || state.getType() == IRON_DOOR_BLOCK) {
        Block topDoor = block.getRelative(UP);
        if (topDoor.getType() == state.getType()) {
            BlockState topState = topDoor.getState();
            topState.setType(AIR);
            if (preview) {
                attachment.addToPreview(topState);
            } else {
                topState.update(true, false);
            }
        }
    }
    if (preview) {
        attachment.addToPreview(state);
    } else {
        state.update(true, false);
    }
    if (rollback) {
        if (this instanceof SignBreak || this instanceof PlayerSignBreak) {
            String[] lines = this instanceof SignBreak ? ((SignBreak) this).oldLines : ((PlayerSignBreak) this).oldLines;
            if (preview) {
                attachment.addToPreview(state.getLocation(), lines);
            } else {
                Sign sign = (Sign) state.getBlock().getState();
                int i = 0;
                for (String line : lines) {
                    sign.setLine(i++, line);
                }
                sign.update();
            }
        } else if (blockData.is(BED_BLOCK)) {
            Bed bed = (Bed) state.getData();
            BlockState headBed = block.getRelative(bed.getFacing()).getState();
            headBed.setType(BED_BLOCK);
            Bed bedhead = (Bed) headBed.getData();
            bedhead.setHeadOfBed(true);
            bedhead.setFacingDirection(bed.getFacing());
            if (preview) {
                attachment.addToPreview(headBed);
            } else {
                headBed.update(true);
            }
        } else if (blockData.is(WOOD_DOOR, IRON_DOOR_BLOCK)) {
            byte data = (byte) (((blockData.data & 8) == 8) ? 9 : 8);
            BlockState topDoor = block.getRelative(UP).getState();
            topDoor.setType(state.getType());
            topDoor.setRawData(data);
            if (preview) {
                attachment.addToPreview(topDoor);
            } else {
                topDoor.update(true);
            }
        } else if (!preview) {
            if (this instanceof PlayerNoteBlockBreak) {
                NoteBlock noteblock = (NoteBlock) state.getBlock().getState();
                noteblock.setNote(((PlayerNoteBlockBreak) this).note);
                noteblock.update();
            } else if (this instanceof PlayerJukeboxBreak) {
                Jukebox jukebox = (Jukebox) state.getBlock().getState();
                jukebox.setPlaying(((PlayerJukeboxBreak) this).disc);
                jukebox.update();
            } else if (this instanceof PlayerContainerBreak) {
                InventoryHolder inventoryHolder = (InventoryHolder) state.getBlock().getState();
                inventoryHolder.getInventory().setContents(((PlayerContainerBreak) this).contents);
                ((BlockState) inventoryHolder).update();
            }
        }
    }
    return true;
}
Also used : Bed(org.bukkit.material.Bed) Jukebox(org.bukkit.block.Jukebox) PlayerSignBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerSignBreak) NoteBlock(org.bukkit.block.NoteBlock) PlayerContainerBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerContainerBreak) PlayerNoteBlockBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerNoteBlockBreak) BlockState(org.bukkit.block.BlockState) PlayerJukeboxBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerJukeboxBreak) Block(org.bukkit.block.Block) NoteBlock(org.bukkit.block.NoteBlock) Sign(org.bukkit.block.Sign) PlayerSignBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerSignBreak) Attachable(org.bukkit.material.Attachable) InventoryHolder(org.bukkit.inventory.InventoryHolder)

Example 2 with PlayerNoteBlockBreak

use of org.cubeengine.module.log.action.block.player.destroy.PlayerNoteBlockBreak in project modules-extra by CubeEngine.

the class ListenerPlayerBlock method onBlockBreak.

// Doors / Beds only logged bottom / feet
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
    if (event.getBlock().getType() == AIR) {
        // breaking air !? -> no logging
        return;
    }
    if (!this.isActive(PlayerBlockBreak.class, event.getBlock().getWorld())) {
        return;
    }
    BlockState blockState = event.getBlock().getState();
    PlayerBlockBreak action;
    if (blockState instanceof NoteBlock) {
        action = this.newAction(PlayerNoteBlockBreak.class);
        ((PlayerNoteBlockBreak) action).setNote(((NoteBlock) blockState).getNote());
    } else if (blockState instanceof Sign) {
        action = this.newAction(PlayerSignBreak.class);
        ((PlayerSignBreak) action).setLines(((Sign) blockState).getLines());
    } else if (blockState instanceof Jukebox && ((Jukebox) blockState).getPlaying() != null) {
        action = this.newAction(PlayerJukeboxBreak.class);
        ((PlayerJukeboxBreak) action).setDisc(((Jukebox) blockState).getPlaying());
    } else if (blockState instanceof InventoryHolder) {
        action = this.newAction(PlayerContainerBreak.class, event.getBlock().getWorld());
        if (action == null) {
            action = this.newAction(PlayerBlockBreak.class);
        } else {
            ((PlayerContainerBreak) action).setContents(((InventoryHolder) blockState).getInventory().getContents());
        }
    // TODO item drops
    // itemDrop.logDropsFromChest((InventoryHolder)blockState,location,event.getPlayer());
    } else {
        action = this.newAction(PlayerBlockBreak.class);
        // WOOD_DOOR IRON_DOOR OR BED_BLOCK
        blockState = adjustBlockForDoubleBlocks(blockState);
    }
    action.setPlayer(event.getPlayer());
    action.setLocation(event.getBlock().getLocation());
    action.setOldBlock(blockState);
    action.setNewBlock(AIR);
    this.logAction(action);
    if (// portal?
    blockState.getType() == OBSIDIAN) {
        // TODO better & complete
        Block block = blockState.getBlock();
        for (BlockFace face : BLOCK_FACES) {
            if (block.getRelative(face).getType() == PORTAL) {
                Block portal = block.getRelative(face);
                PlayerBlockBreak pAction = this.newAction(PlayerBlockBreak.class);
                pAction.setPlayer(event.getPlayer());
                pAction.setLocation(portal.getLocation());
                pAction.setOldBlock(portal.getState());
                pAction.setNewBlock(AIR);
                pAction.reference = this.reference(action);
                this.logAction(pAction);
                break;
            }
        }
    }
    // TODO attached & falling
    ListenerBlock.logAttachedBlocks(this, module.getCore().getEventManager(), event.getBlock(), action);
    ListenerBlock.logFallingBlocks(this, module.getCore().getEventManager(), event.getBlock(), action);
}
Also used : PlayerBlockBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerBlockBreak) Jukebox(org.bukkit.block.Jukebox) BlockState(org.bukkit.block.BlockState) PlayerJukeboxBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerJukeboxBreak) NoteBlock(org.bukkit.block.NoteBlock) BlockFace(org.bukkit.block.BlockFace) ListenerBlock(org.cubeengine.module.log.action.block.ListenerBlock) Block(org.bukkit.block.Block) NoteBlock(org.bukkit.block.NoteBlock) Sign(org.bukkit.block.Sign) InventoryHolder(org.bukkit.inventory.InventoryHolder) PlayerNoteBlockBreak(org.cubeengine.module.log.action.block.player.destroy.PlayerNoteBlockBreak) EventHandler(org.bukkit.event.EventHandler)

Aggregations

Block (org.bukkit.block.Block)2 BlockState (org.bukkit.block.BlockState)2 Jukebox (org.bukkit.block.Jukebox)2 NoteBlock (org.bukkit.block.NoteBlock)2 Sign (org.bukkit.block.Sign)2 InventoryHolder (org.bukkit.inventory.InventoryHolder)2 PlayerJukeboxBreak (org.cubeengine.module.log.action.block.player.destroy.PlayerJukeboxBreak)2 PlayerNoteBlockBreak (org.cubeengine.module.log.action.block.player.destroy.PlayerNoteBlockBreak)2 BlockFace (org.bukkit.block.BlockFace)1 EventHandler (org.bukkit.event.EventHandler)1 Attachable (org.bukkit.material.Attachable)1 Bed (org.bukkit.material.Bed)1 ListenerBlock (org.cubeengine.module.log.action.block.ListenerBlock)1 PlayerBlockBreak (org.cubeengine.module.log.action.block.player.destroy.PlayerBlockBreak)1 PlayerContainerBreak (org.cubeengine.module.log.action.block.player.destroy.PlayerContainerBreak)1 PlayerSignBreak (org.cubeengine.module.log.action.block.player.destroy.PlayerSignBreak)1