@EventHandler(priority = EventPriority.MONITOR) public void onBlockPhysics(BlockPhysicsEvent event) { if (event.isCancelled()) { return; } if (event.getBlock().getType() != Material.SAND && event.getBlock().getType() != Material.GRAVEL) { return; } if (!DeprecatedMethods.applyPhysics(event.getBlock())) { return; } BlockUpdate.Update(event.getBlock()); }
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void PhysicsCheck(BlockPhysicsEvent event) { if (ConfigPatch.fixInfRail == true) { if (event.getChangedType().name().contains("RAIL")) { if(CheckFast()){ event.setCancelled(true); } LastCheckedTime = System.currentTimeMillis(); } if (event.getChangedTypeId() == 165) { if(CheckFast()){ event.setCancelled(true); } LastCheckedTime = System.currentTimeMillis(); } } }
@EventHandler(priority = EventPriority.HIGH) public void onBlockPhysics(final BlockPhysicsEvent event) { if (!event.isCancelled()) { final Block block = event.getBlock(); if (Craft_Hyperspace.hyperspaceBlocks.contains(block)) { event.setCancelled(true); } if ((block.getTypeId() == 63) || (block.getTypeId() == 68) || (block.getTypeId() == 50) || (block.getTypeId() == 75) || (block.getTypeId() == 76) || (block.getTypeId() == 65) || (block.getTypeId() == 64) || (block.getTypeId() == 71) || (block.getTypeId() == 70) || (block.getTypeId() == 72) || (block.getTypeId() == 143)) { Craft c = Craft.getCraft(block.getX(), block.getY(), block.getZ()); if (c != null) { // if not iron door being controlled by circuit... if ((event.getChangedTypeId() != 0) && !(((block.getTypeId() == 71) || (block.getTypeId() == 64)) && ((event.getChangedTypeId() == 69) || (event.getChangedTypeId() == 77) || (event.getChangedTypeId() == 55) || (event.getChangedTypeId() == 70) || (event.getChangedTypeId() == 72) || (block.getTypeId() == 143) || (block.getTypeId() == 75) || (block.getTypeId() == 76) || (block.getTypeId() == 50)))) { event.setCancelled(true); } } } } }
protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) { if (!f(world, blockposition, iblockdata)) { // CraftBukkit Start org.bukkit.block.Block block = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); @SuppressWarnings("deprecation") BlockPhysicsEvent event = new BlockPhysicsEvent(block, block.getTypeId()); world.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return; } // CraftBukkit end this.b(world, blockposition, iblockdata, 0); world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), 3); } }
@EventHandler(priority = EventPriority.NORMAL) public void onBlockPhysics(final BlockPhysicsEvent event) { if (event.isCancelled()) return; final Block block = event.getBlock(); final WorldCoord coord = new WorldCoord(block); // Stop portal blocks from breaking if (BlockUtil.isStandableGateMaterial(block.getType()) && Gates.gateFromPortal(coord) != null) { event.setCancelled(true); } // Stop sand falling when part of the frame if (block.getType() == Material.SAND && Gates.gateFromFrame(coord) != null) { event.setCancelled(true); } return; }
@Override public void onBlockPhysics(BlockPhysicsEvent event) { final Block b = event.getBlock(); long timeNow = getLocation().getWorld().getFullTime(); Debugger.getInstance().debug(this + ": BUD physics: time=" + timeNow + ", lastPulse=" + lastPulse + ", duration=" + getDuration()); if (timeNow - lastPulse > getDuration() + getQuiet() && isRedstoneActive()) { // emit a signal for one or more ticks lastPulse = timeNow; active = true; repaint(b); Bukkit.getScheduler().runTaskLater(getProviderPlugin(), new Runnable() { @Override public void run() { active = false; repaint(b); } }, duration); } }
protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) { if (!this.f(world, blockposition, iblockdata)) { // CraftBukkit Start org.bukkit.block.Block block = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); BlockPhysicsEvent event = new BlockPhysicsEvent(block, block.getTypeId()); world.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return; } // CraftBukkit end this.b(world, blockposition, iblockdata, 0); world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), 3); } }
@EventHandler public void onBlockPhysicsChange(BlockPhysicsEvent event) { if (event.getBlock().getState() instanceof Sign) { Sign droppedSign = (Sign) event.getBlock().getState(); if (plugin.jailMan.isJailSign(droppedSign.getLine(0))) { if (plugin.jailMan.jailExists(droppedSign.getLine(1))) { plugin.jailMan.destroyCell(droppedSign.getLine(1), Integer.valueOf(droppedSign.getLine(2))); plugin.getLogger().info("[Zeus] Cell Destroyed"); } } } /* * Block pressurePlate = event.getBlock(); if * (pressurePlate.getState().getType() == Material.WOOD_PLATE || * pressurePlate.getState().getType() == Material.STONE_PLATE) { * * } */ }
@EventHandler (priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { final Block physics = event.getBlock(); if (physics.getRelative(BlockFace.DOWN).getType() != Material.AIR) { return; } final Sprout sprout = plugin.getWorldRegistry().remove(physics.getWorld().getName(), physics.getX(), physics.getY(), physics.getZ()); final SaveThread thread = ((SaveThread) ThreadRegistry.get(physics.getWorld().getName())); if (thread != null) { thread.remove(physics.getLocation(), (SimpleSprout) sprout); } if (sprout == null) { return; } event.setCancelled(true); physics.setType(Material.AIR); ((SpoutBlock) physics).setCustomBlock(null); if (!sprout.getRequiredTools().isEmpty()) { disperseDrops(sprout, physics, false); } }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void checkBlockPhysics(final BlockPhysicsEvent event) { BlockEventQuery query = new BlockEventQuery(event, event.getBlock().getState()); for(EventRule rule : this.ruleContext.get(EventRuleScope.BLOCK_PHYSICS)) { if(rule.region().contains(event.getBlock()) && processQuery(rule, query)) break; } }
public void handleBlockPhysics(BlockPhysicsEvent event) { Block block = event.getBlock(); if(this.waitingBlocks.remove(block)) { processBlock(block, block.isBlockPowered()); } }
@EventHandler(ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { Region region = this.regions.fetch(event.getBlock()); FilterResult result = this.getFilterResult(region, RegionEventType.BLOCK_PHYSICS, null, null, event.getBlock()); if (result.equals(FilterResult.DENY)) { event.setCancelled(true); } }
/** * Filters BlockPhysicsEvent, like redstone updating, or sand start falling. * * <p>Applies to: block physics<p/> */ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { Match match = Cardinal.getMatch(event.getWorld()); if (match == null) { return; } for (AppliedRegion reg : get(match, ApplyType.BLOCK_PHYSICS)) { if (apply(reg, event.getBlock().getLocation(), null, event, event, event.getBlock())) { break; } } }
protected boolean containsSetAir(Exception e, BlockPhysicsEvent event) { for (int frame = 25; frame < 35; frame++) { StackTraceElement elem = getElement(e, frame); if (elem != null) { String methodName = elem.getMethodName(); // setAir (hacky, but this needs to be efficient) if (methodName.charAt(0) == 's' && methodName.length() == 6) { return true; } } } return false; }
@EventHandler(priority = EventPriority.HIGHEST) public void onBlockPhysics(BlockPhysicsEvent e) { boolean cancelled = false; String w = e.getBlock().getWorld().getName(); for (String p : worlds.keySet()) { for (int i = 0; i < worlds.get(p).size(); i++) { if (worlds.get(p).get(i).equals(w)) { if (!Minigame.getMinigameInstance(p).getConfigManager().areBlockPhysicsAllowed()) { e.setCancelled(true); cancelled = true; break; } } } } if (cancelled) { return; } Block adjBlock = MGUtil.getAttachedSign(e.getBlock()); if (adjBlock != null) { for (Minigame mg : Minigame.getMinigameInstances()) { for (LobbySign l : mg.getLobbyManager().signs.values()) { if (l.getX() == adjBlock.getX() && l.getY() == adjBlock.getY() && l.getZ() == adjBlock.getZ() && l.getWorld().equals(adjBlock.getWorld().getName())) { e.setCancelled(true); break; } } } } }
public void e(int i, int j, int k, Block block) { if (!this.isStatic) { Block block1 = this.getType(i, j, k); try { // CraftBukkit start CraftWorld world = ((WorldServer) this).getWorld(); if (world != null) { BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(i, j, k), CraftMagicNumbers.getId(block)); this.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return; } } // CraftBukkit end block1.doPhysics(this, i, j, k, block); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Exception while updating neighbours"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Block being updated"); int l; try { l = this.getData(i, j, k); } catch (Throwable throwable1) { l = -1; } crashreportsystemdetails.a("Source block type", (Callable) (new CrashReportSourceBlockType(this, block))); CrashReportSystemDetails.a(crashreportsystemdetails, i, j, k, block1, l); throw new ReportedException(crashreport); } } }
@EventHandler(priority=EventPriority.LOWEST) public void onBlockPhysics(BlockPhysicsEvent event) { long now = System.currentTimeMillis(); if (now - last < 20) { if (count > Settings.CHUNK_PROCESSOR_MAX_ENTITIES) { event.setCancelled(true); } count++; } else { count = 0; } last = now; }
@EventHandler public void onBlockPhysics(BlockPhysicsEvent event) { if(event.getChangedType() == Material.PORTAL || event.getBlock().getType() == Material.PORTAL) { String portal = this.module.getPortalManager().getPortal(event.getBlock().getLocation()); if(portal != null) { event.setCancelled(true); } } }
/** * Called when block physics occurs. */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent ev) { if (ev.getBlock().getType() != Material.PORTAL) return; // Only cancelled when a block is placed (changedType = air), or a block is destroyed, which is not portal or obsidian if (ev.getChangedType() != Material.PORTAL && ev.getChangedType() != Material.OBSIDIAN) ev.setCancelled(true); }
public void g(int i, int j, int k, int l) { if (!this.isStatic) { int i1 = this.getTypeId(i, j, k); Block block = Block.byId[i1]; if (block != null) { try { // CraftBukkit start CraftWorld world = ((WorldServer) this).getWorld(); if (world != null) { BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(i, j, k), l); this.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return; } } // CraftBukkit end block.doPhysics(this, i, j, k, l); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Exception while updating neighbours"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Block being updated"); int j1; try { j1 = this.getData(i, j, k); } catch (Throwable throwable1) { j1 = -1; } crashreportsystemdetails.a("Source block type", (Callable) (new CrashReportSourceBlockType(this, l))); CrashReportSystemDetails.a(crashreportsystemdetails, i, j, k, i1, j1); throw new ReportedException(crashreport); } } } }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onIndirectSignBreak(BlockPhysicsEvent event) { if(event.getBlock().getType() == Material.SIGN_POST || event.getBlock().getType() == Material.WALL_SIGN) { // Check if the rent sign is really the same as a saved rent if(SignsFeature.getSignByLocation(event.getBlock().getLocation()) != null) { // Cancel the sign breaking, will create a floating sign but at least it is not disconnected/gone event.setCancelled(true); } } }
public void e(int i, int j, int k, Block block) { if (!this.isStatic) { Block block1 = this.getType(i, j, k); try { // CraftBukkit start CraftWorld world = ((WorldServer) this).getWorld(); if (world != null) { BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(i, j, k), CraftMagicNumbers.getId(block)); this.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return; } } // CraftBukkit end block1.doPhysics(this, i, j, k, block); } catch (StackOverflowError stackoverflowerror) { // Spigot Start haveWeSilencedAPhysicsCrash = true; blockLocation = i + ", " + j + ", " + k; // Spigot End } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Exception while updating neighbours"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Block being updated"); int l; try { l = this.getData(i, j, k); } catch (Throwable throwable1) { l = -1; } crashreportsystemdetails.a("Source block type", (Callable) (new CrashReportSourceBlockType(this, block))); CrashReportSystemDetails.a(crashreportsystemdetails, i, j, k, block1, l); throw new ReportedException(crashreport); } } }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onRedstone(BlockPhysicsEvent event) { if (event.getChangedType() != Material.DIODE_BLOCK_ON) return; Block blockUpdated = event.getBlock(); if(blockUpdated.getType() != Material.LEVER){ return; } plugin.queueDetect(blockUpdated); }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockFall(final BlockPhysicsEvent event) { if (!this.isActive(BlockFall.class, event.getBlock().getWorld())) { return; } BlockState state = event.getBlock().getState(); if (state.getType().hasGravity() || state.getType() == DRAGON_EGG) { if (event.getBlock().getRelative(DOWN).getType() == AIR) { Location loc = state.getLocation(); BlockFall action = this.set(BlockFall.class, state, null); ActionBlock cause = this.plannedFall.remove(loc); if (cause instanceof ActionPlayerBlock) { action.cause = this.reference((ActionPlayerBlock)cause); } action.setNewBlock(AIR); this.logAction(action); Block onTop = state.getBlock().getRelative(UP); if (onTop.getType().hasGravity() || onTop.getType() == DRAGON_EGG) { this.preplanBlockFall(new BlockPreFallEvent(onTop.getLocation(), cause)); } } } }
/** * Block physics event handler<br> * remove detached death chest signs from game to prevent players gaining additional signs * @param event */ @EventHandler public void signDetachCheck(BlockPhysicsEvent event) { Block block = event.getBlock(); // if event is cancelled, do nothing and return if (event.isCancelled()) { return; } // if block is not a DeathChestBlock, do nothing and return if (!DeathChestBlock.isDeathChestBlock(block)) { return; } // if block is not a sign, do nothing and return if (block.getType() != Material.WALL_SIGN && block.getType() != Material.SIGN_POST) { return; } Sign sign = (Sign)block.getState().getData(); Block attached_block = block.getRelative(sign.getAttachedFace()); // if attached block is still there, do nothing and return if (attached_block.getType() != Material.AIR) { return; } // cancel event event.setCancelled(true); // destroy DeathChestBlock plugin.chestManager.destroyDeathChestBlock(block); }
@Override public void onBlockPhysics(BlockPhysicsEvent event) { Bukkit.getScheduler().runTask(getProviderPlugin(), new Runnable() { @Override public void run() { findNeighbourInventories(); } }); }
@Override public void onBlockPhysics(BlockPhysicsEvent event) { // ensure carpet layer doesn't get popped off (and thus not cleared) when block is broken if (event.getBlock().getType() == Material.CARPET) { event.setCancelled(true); } }
@EventHandler public void psycic(BlockPhysicsEvent e) { if(e.isCancelled()) { return; } if(e.getBlock().getType() == Material.PORTAL) { for(Portal portal : pl.getConfiguration().getPortalConfig().getPortals().values()) { if(portal.getInnerBlocks().contains(e.getBlock())) { e.setCancelled(true); } } } }
@EventHandler public void onPsyics(BlockPhysicsEvent e) { if(e.isCancelled()) { return; } if(e.getBlock().getType() == Material.PORTAL) { for(Portal portal : pl.getConfiguration().getPortalConfig().getPortals().values()) { if(portal.getInnerBlocks().contains(e.getBlock())) { e.setCancelled(true); break; } } } }
/** * * @param bpe */ @EventHandler public void onPhysicsEvent(final BlockPhysicsEvent bpe) { if (DataHandler.isBlueprintBlock(bpe.getBlock())) { DataHandler.updateBlock(bpe.getBlock()); bpe.setCancelled(true); } }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) void onBlockPhysics(BlockPhysicsEvent event) { Block block = event.getBlock(); if (cancelNextBlockPhysicsLoc != null && cancelNextBlockPhysicsLoc.equals(block.getLocation())) { event.setCancelled(true); } else { if (Utils.isSign(block.getType()) && plugin.getShopkeeperByBlock(block) != null) { event.setCancelled(true); } } }
/** * Cancels block physics events in arenas not currently running. * @param event The {@link org.bukkit.event.block.BlockPhysicsEvent} event. */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { Material material = event.getChangedType(); if (material == Material.WATER || material == Material.LAVA || UGUtils.hasPhysics(material)) { Arena arena = ultimateGames.getArenaManager().getLocationArena(event.getBlock().getLocation()); if (arena != null && arena.getStatus() != ArenaStatus.RUNNING) { event.setCancelled(true); } } }
/** * Physics checks; launches a break task if the material under review might be breaking and not covered by some other test. * * Note that basically all physics related checks involve breaks. Some are * immediate and can be cancelled; others you only know what's going on if you check the material * and then check all the conditions that can break it (missing soil, light, etc) as the * code paths in new.minecraft.server don't involve any return values. * * So for our purposes as we're just augmenting drops at present, we'll look for things we * care about, and register a break-check if it looks interesting. * * Currently tracked: * <ul><li>Too little light on crops</li><li>Too much light on mushrooms (with wrong soil)</li> * <li>No water adjacent to sugarcane</li><li>Solid blocks adjacent to cactus</li></ul> * * @param e The physics event. */ @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled=true) public void onPhysics(BlockPhysicsEvent e) { Block block = e.getBlock(); Material chMat = block.getType(); //getChangedType(); Location loc = block.getLocation(); boolean checkBreak = false; if (maybeTracked(chMat) && !pendingChecks.contains(loc)) { // do we even slightly care? // Check light levels. if (Material.CROPS.equals(chMat) || Material.POTATO.equals(chMat) || Material.CARROT.equals(chMat) || Material.BEETROOT.equals(chMat)) { if (block.getLightLevel() < 8) { checkBreak = true; } } else if (Material.RED_MUSHROOM.equals(chMat) || Material.BROWN_MUSHROOM.equals(chMat)) { Block below = block.getRelative(BlockFace.DOWN); Material belowM = below.getType(); if (!Material.MYCEL.equals(belowM) && !Material.DIRT.equals(belowM)) { checkBreak = true; } else if (Material.DIRT.equals(belowM) && below.getData() != 2) { checkBreak = true; } } } if (checkBreak) { pendingChecks.add(loc); handleBreak(block, BreakType.PHYSICS, null, null); } else { // we haven't found a break condition yet. However, what follows aren't light level checks but rather // block checks, so these are controlled by a variety of rules. Some involve physics firing _adjacent_ to the block. // Basically it's a crapshoot. if (Material.SUGAR_CANE_BLOCK.equals(e.getChangedType())) { // Sugarcane winds up being weird. I'm still not sure what event fires and removes the bottom block but for // unattended (non-player) breaks physics events remove middle and top blocks. So, we just register // breaks for lower and upper blocks and if they are gone, we know it then. // // Note this will leave singular base blocks undetected. TODO if (chMat.equals(e.getChangedType())) { for (BlockFace a : CropControlEventHandler.traverse) { Location adjL = block.getRelative(a).getLocation(); if (!pendingChecks.contains(adjL)) { pendingChecks.add(adjL); // So, the physics check can take a tick to resolve. We mark our interest but defer resolution. Bukkit.getScheduler().runTaskLater(CropControl.getPlugin(), new Runnable() { public void run() { handleBreak(adjL.getBlock(), BreakType.PHYSICS, null, null); } }, 1L); } } } } else if (Material.CACTUS.equals(e.getChangedType())) { if (chMat.equals(e.getChangedType())) return; // handled elsewhere // Cactus is a little simpler. It breaks on adjacent placements; that's what would trigger this event. for (BlockFace face : CropControlEventHandler.directions) { // We look around face-adjacent places and trigger a break-check for any cactus found. Block adj = block.getRelative(face); Material adjM = adj.getType(); Location adjL = adj.getLocation(); if (Material.CACTUS.equals(adjM) && !pendingChecks.contains(adjL)) { pendingChecks.add(adjL); // So, the physics check can take a tick to resolve. We mark our interest but defer resolution. Bukkit.getScheduler().runTaskLater(CropControl.getPlugin(), new Runnable() {
@EventHandler public void onBlockPhysics(BlockPhysicsEvent event) { if(!allowPhysics()) { event.setCancelled(true); } }
@EventHandler(priority = EventPriority.HIGH) public void physics(final BlockPhysicsEvent event) { event.setCancelled(true); }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent e) { if (cm.isAntiInfiniteRail && this.isDupeBlock(e.getChangedType()) && this.isRails(e.getBlock().getType())) { e.setCancelled(true); } }