@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
	public void onBlockPhysics(BlockPhysicsEvent e) {
		CBlock conBlock = parent.getControllerBlockFor(null, e.getBlock()
				.getLocation(), null, Boolean.valueOf(true));
		if (conBlock == null) {
			return;
		}
		if (conBlock.isBeingEdited()) {
			if (!parent.blockPhysicsEditCheck) {
				return;
			}

			if ((e.getBlock().getType().equals(Material.FENCE))
					|| (e.getBlock().getType().equals(Material.THIN_GLASS))) {
				return;
			}

			Player player = getPlayerEditing(conBlock);

			if (!Util.typeEquals(conBlock.getType(), e.getChangedType())) {
				parent.log.debug("Block at "
						+ Util.formatLocation(e.getBlock().getLocation())
						+ " was changed to " + e.getChangedType()
						+ " but is supposed to be " + conBlock.getType()
						+ ", dupe!");
				conBlock.delBlock(e.getBlock());
				player.sendMessage("Removing block due to changed type while editing "
						+ Util.formatBlockCount(conBlock));
			}
		} else {
			BlockProtectMode protect = (BlockProtectMode) parent.getConfigu()
					.getOpt(Config.Option.BlockPhysicsProtectMode);
			if (protect.equals(BlockProtectMode.protect)) {
				e.setCancelled(true);
			} else if (protect.equals(BlockProtectMode.remove)) {
				conBlock.delBlock(e.getBlock());
			}
		}
	}