From c4386ab2624590b7793f5e43381af67797db1172 Mon Sep 17 00:00:00 2001 From: Shevchik Date: Sun, 1 Sep 2013 16:59:58 +0400 Subject: [PATCH] Move sit method --- src/com/cnaude/chairs/EventListener.java | 364 ++++++++++++----------- target/Chairs.jar | Bin 22742 -> 22806 bytes 2 files changed, 186 insertions(+), 178 deletions(-) diff --git a/src/com/cnaude/chairs/EventListener.java b/src/com/cnaude/chairs/EventListener.java index af92a37..ae2f466 100644 --- a/src/com/cnaude/chairs/EventListener.java +++ b/src/com/cnaude/chairs/EventListener.java @@ -87,197 +87,205 @@ public class EventListener implements Listener { return; } if (event.hasBlock() && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + sitPlayer(player, event.getClickedBlock()); + if (sit) { + event.setCancelled(true); + sit = false; + } + } + } + private boolean sit = false; + protected void sitPlayer(Player player, Block block) + { + Stairs stairs = null; + Step step = null; + WoodenStep wStep = null; + double sh = plugin.sittingHeight; + boolean blockOkay = false; - Block block = event.getClickedBlock(); - Stairs stairs = null; - Step step = null; - WoodenStep wStep = null; - double sh = plugin.sittingHeight; - boolean blockOkay = false; - - if (ignoreList.isIgnored(player.getName())) { + if (ignoreList.isIgnored(player.getName())) { + return; + } + // Permissions Check + if (plugin.permissions) { + if (!player.hasPermission("chairs.sit")) { return; } - // Permissions Check - if (plugin.permissions) { - if (!player.hasPermission("chairs.sit")) { - return; - } + } + if (plugin.perItemPerms) { + if (plugin.pm.getPermission("chairs.sit." + block.getTypeId()) == null) { + plugin.pm.addPermission(new Permission("chairs.sit." + block.getTypeId(), + "Allow players to sit on a '" + block.getType().name() + "'", + PermissionDefault.FALSE)); } - if (plugin.perItemPerms) { - if (plugin.pm.getPermission("chairs.sit." + block.getTypeId()) == null) { - plugin.pm.addPermission(new Permission("chairs.sit." + block.getTypeId(), - "Allow players to sit on a '" + block.getType().name() + "'", - PermissionDefault.FALSE)); - } - if (plugin.pm.getPermission("chairs.sit." + block.getType().toString()) == null) { - plugin.pm.addPermission(new Permission("chairs.sit." + block.getType().toString(), - "Allow players to sit on a '" + block.getType().name() + "'", - PermissionDefault.FALSE)); - } - if (plugin.pm.getPermission("chairs.sit." + block.getTypeId() + ":" + block.getData()) == null) { - plugin.pm.addPermission(new Permission("chairs.sit." + block.getTypeId() + ":" + block.getData(), - "Allow players to sit on a '" + block.getType().name() + "'", - PermissionDefault.FALSE)); - } - if (plugin.pm.getPermission("chairs.sit." + block.getType().toString() + ":" + block.getData()) == null) { - plugin.pm.addPermission(new Permission("chairs.sit." + block.getType().toString() + ":" + block.getData(), - "Allow players to sit on a '" + block.getType().name() + "'", - PermissionDefault.FALSE)); - } + if (plugin.pm.getPermission("chairs.sit." + block.getType().toString()) == null) { + plugin.pm.addPermission(new Permission("chairs.sit." + block.getType().toString(), + "Allow players to sit on a '" + block.getType().name() + "'", + PermissionDefault.FALSE)); } + if (plugin.pm.getPermission("chairs.sit." + block.getTypeId() + ":" + block.getData()) == null) { + plugin.pm.addPermission(new Permission("chairs.sit." + block.getTypeId() + ":" + block.getData(), + "Allow players to sit on a '" + block.getType().name() + "'", + PermissionDefault.FALSE)); + } + if (plugin.pm.getPermission("chairs.sit." + block.getType().toString() + ":" + block.getData()) == null) { + plugin.pm.addPermission(new Permission("chairs.sit." + block.getType().toString() + ":" + block.getData(), + "Allow players to sit on a '" + block.getType().name() + "'", + PermissionDefault.FALSE)); + } + } - for (ChairBlock cb : plugin.allowedBlocks) { - if (cb.getMat().toString().contains("STAIRS")) { - if (cb.getMat().equals(block.getType())) { - blockOkay = true; - sh = cb.getSitHeight(); - continue; - } - } else if (cb.getMat().equals(block.getType()) - && cb.getDamage() == block.getData()) { + for (ChairBlock cb : plugin.allowedBlocks) { + if (cb.getMat().toString().contains("STAIRS")) { + if (cb.getMat().equals(block.getType())) { blockOkay = true; sh = cb.getSitHeight(); continue; } - } - if (blockOkay - || (player.hasPermission("chairs.sit." + block.getTypeId() + ":" + block.getData()) && plugin.perItemPerms) - || (player.hasPermission("chairs.sit." + block.getType().toString() + ":" + block.getData()) && plugin.perItemPerms) - || (player.hasPermission("chairs.sit." + block.getTypeId()) && plugin.perItemPerms) - || (player.hasPermission("chairs.sit." + block.getType().toString()) && plugin.perItemPerms)) { - - if (block.getState().getData() instanceof Stairs) { - stairs = (Stairs) block.getState().getData(); - } else if (block.getState().getData() instanceof Step) { - step = (Step) block.getState().getData(); - } else if (block.getState().getData() instanceof WoodenStep) { - wStep = (WoodenStep) block.getState().getData(); - } else { - sh += plugin.sittingHeightAdj; - } - - int chairwidth = 1; - - // Check if block beneath chair is solid. - if (block.getRelative(BlockFace.DOWN).isLiquid()) { - return; - } - if (block.getRelative(BlockFace.DOWN).isEmpty()) { - return; - } - if (!block.getRelative(BlockFace.DOWN).getType().isSolid()) { - return; - } - - // Check for distance distance between player and chair. - if (plugin.distance > 0 && player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > plugin.distance) { - return; - } - - if (stairs != null) { - if (stairs.isInverted() && plugin.invertedStairCheck) { - return; - } - } - if (step != null) { - if (step.isInverted() && plugin.invertedStepCheck) { - return; - } - } - if (wStep != null) { - if (wStep.isInverted() && plugin.invertedStepCheck) { - return; - } - } - - // Check for signs. - if (plugin.signCheck == true && stairs != null) { - boolean sign1 = false; - boolean sign2 = false; - - if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { - sign1 = checkSign(block, BlockFace.EAST) || checkFrame(block, BlockFace.EAST, player); - sign2 = checkSign(block, BlockFace.WEST) || checkFrame(block, BlockFace.WEST, player); - } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { - sign1 = checkSign(block, BlockFace.NORTH) || checkFrame(block, BlockFace.NORTH, player); - sign2 = checkSign(block, BlockFace.SOUTH) || checkFrame(block, BlockFace.SOUTH, player); - } - - if (!(sign1 == true && sign2 == true)) { - return; - } - } - - // Check for maximal chair width. - if (plugin.maxChairWidth > 0 && stairs != null) { - if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { - chairwidth += getChairWidth(block, BlockFace.EAST); - chairwidth += getChairWidth(block, BlockFace.WEST); - } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { - chairwidth += getChairWidth(block, BlockFace.NORTH); - chairwidth += getChairWidth(block, BlockFace.SOUTH); - } - - if (chairwidth > plugin.maxChairWidth) { - return; - } - } - - // Sit-down process. - if (plugin.seatOccupiedCheck) { - if (!plugin.sit.isEmpty()) { - if (plugin.sitblock.containsKey(block)) - { - if (!plugin.msgOccupied.isEmpty()) { - player.sendMessage(plugin.msgOccupied.replaceAll("%PLAYER%", plugin.sitblock.get(block))); - } - return; - } - } - } - - Location plocation = block.getLocation().clone(); - plocation.add(0.5D, (sh - 0.5D), 0.5D); - - // Rotate the player's view to the descending side of the block. - if (plugin.autoRotate && stairs != null) { - switch (stairs.getDescendingDirection()) { - case NORTH: - plocation.setYaw(180); - break; - case EAST: - plocation.setYaw(-90); - break; - case SOUTH: - plocation.setYaw(0); - break; - case WEST: - plocation.setYaw(90); - default: - ; - } - } else { - plocation.setYaw(player.getLocation().getYaw()); - } - - if (plugin.notifyplayer && !plugin.msgSitting.isEmpty()) { - player.sendMessage(plugin.msgSitting); - } - - plugin.sitstopteleportloc.put(player.getName(), player.getLocation()); - player.teleport(plocation); - Entity arrow = block.getWorld().spawnArrow(getBlockCentre(block).subtract(0, 0.5, 0), new Vector(0, 0, 0), 0, 0); - arrow.setPassenger(player); - player.setSneaking(false); - arrow.setTicksLived(1); - plugin.sit.put(player.getName(), arrow); - plugin.sitblock.put(block, player.getName()); - plugin.sitblockbr.put(player.getName(), block); - event.setCancelled(true); + } else if (cb.getMat().equals(block.getType()) + && cb.getDamage() == block.getData()) { + blockOkay = true; + sh = cb.getSitHeight(); + continue; } } + if (blockOkay + || (player.hasPermission("chairs.sit." + block.getTypeId() + ":" + block.getData()) && plugin.perItemPerms) + || (player.hasPermission("chairs.sit." + block.getType().toString() + ":" + block.getData()) && plugin.perItemPerms) + || (player.hasPermission("chairs.sit." + block.getTypeId()) && plugin.perItemPerms) + || (player.hasPermission("chairs.sit." + block.getType().toString()) && plugin.perItemPerms)) { + + if (block.getState().getData() instanceof Stairs) { + stairs = (Stairs) block.getState().getData(); + } else if (block.getState().getData() instanceof Step) { + step = (Step) block.getState().getData(); + } else if (block.getState().getData() instanceof WoodenStep) { + wStep = (WoodenStep) block.getState().getData(); + } else { + sh += plugin.sittingHeightAdj; + } + + int chairwidth = 1; + + // Check if block beneath chair is solid. + if (block.getRelative(BlockFace.DOWN).isLiquid()) { + return; + } + if (block.getRelative(BlockFace.DOWN).isEmpty()) { + return; + } + if (!block.getRelative(BlockFace.DOWN).getType().isSolid()) { + return; + } + + // Check for distance distance between player and chair. + if (plugin.distance > 0 && player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > plugin.distance) { + return; + } + + if (stairs != null) { + if (stairs.isInverted() && plugin.invertedStairCheck) { + return; + } + } + if (step != null) { + if (step.isInverted() && plugin.invertedStepCheck) { + return; + } + } + if (wStep != null) { + if (wStep.isInverted() && plugin.invertedStepCheck) { + return; + } + } + + // Check for signs. + if (plugin.signCheck == true && stairs != null) { + boolean sign1 = false; + boolean sign2 = false; + + if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { + sign1 = checkSign(block, BlockFace.EAST) || checkFrame(block, BlockFace.EAST, player); + sign2 = checkSign(block, BlockFace.WEST) || checkFrame(block, BlockFace.WEST, player); + } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { + sign1 = checkSign(block, BlockFace.NORTH) || checkFrame(block, BlockFace.NORTH, player); + sign2 = checkSign(block, BlockFace.SOUTH) || checkFrame(block, BlockFace.SOUTH, player); + } + + if (!(sign1 == true && sign2 == true)) { + return; + } + } + + // Check for maximal chair width. + if (plugin.maxChairWidth > 0 && stairs != null) { + if (stairs.getDescendingDirection() == BlockFace.NORTH || stairs.getDescendingDirection() == BlockFace.SOUTH) { + chairwidth += getChairWidth(block, BlockFace.EAST); + chairwidth += getChairWidth(block, BlockFace.WEST); + } else if (stairs.getDescendingDirection() == BlockFace.EAST || stairs.getDescendingDirection() == BlockFace.WEST) { + chairwidth += getChairWidth(block, BlockFace.NORTH); + chairwidth += getChairWidth(block, BlockFace.SOUTH); + } + + if (chairwidth > plugin.maxChairWidth) { + return; + } + } + + // Sit-down process. + if (plugin.seatOccupiedCheck) { + if (!plugin.sit.isEmpty()) { + if (plugin.sitblock.containsKey(block)) + { + if (!plugin.msgOccupied.isEmpty()) { + player.sendMessage(plugin.msgOccupied.replaceAll("%PLAYER%", plugin.sitblock.get(block))); + } + return; + } + } + } + + Location plocation = block.getLocation().clone(); + plocation.add(0.5D, (sh - 0.5D), 0.5D); + + // Rotate the player's view to the descending side of the block. + if (plugin.autoRotate && stairs != null) { + switch (stairs.getDescendingDirection()) { + case NORTH: + plocation.setYaw(180); + break; + case EAST: + plocation.setYaw(-90); + break; + case SOUTH: + plocation.setYaw(0); + break; + case WEST: + plocation.setYaw(90); + default: + ; + } + } else { + plocation.setYaw(player.getLocation().getYaw()); + } + + if (plugin.notifyplayer && !plugin.msgSitting.isEmpty()) { + player.sendMessage(plugin.msgSitting); + } + + plugin.sitstopteleportloc.put(player.getName(), player.getLocation()); + player.teleport(plocation); + Entity arrow = block.getWorld().spawnArrow(getBlockCentre(block).subtract(0, 0.5, 0), new Vector(0, 0, 0), 0, 0); + arrow.setPassenger(player); + player.setSneaking(false); + arrow.setTicksLived(1); + plugin.sit.put(player.getName(), arrow); + plugin.sitblock.put(block, player.getName()); + plugin.sitblockbr.put(player.getName(), block); + sit = true; + } } + // https://github.com/sk89q/craftbook/blob/master/src/main/java/com/sk89q/craftbook/util/BlockUtil.java public static Location getBlockCentre(Block block) { diff --git a/target/Chairs.jar b/target/Chairs.jar index 08a92f50086c2e1ae0bd5ff87da7ee0bd01784c3..69de59b592958a082d3c8f66defcb4835fd70999 100644 GIT binary patch delta 6232 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 GQ2jrb_QJdX