public void onBlockPhysics(BlockPhysicsEvent e) {
		if (e.isCancelled()) return;
		CBlock conBlock = parent.getControllerBlockFor(null, e.getBlock().getLocation(), null, true);
		if (conBlock == null) return;
		if (conBlock.isBeingEdited()) {
			// Scheduled event should normally do this for us
			if (!parent.blockPhysicsEditCheck) return;
			
			// Ignore fences >.< They don't drop when this gets thrown
			if (e.getBlock().getType().equals(Material.FENCE)) return;
			
			Player player = getPlayerEditing(conBlock);
			
			if (!Util.typeEquals(conBlock.getType(), e.getChangedType())) {
				//player.sendMessage("from: " + e.getBlock().getType() + " to: " + 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.getConfig().getOpt(Option.BlockPhysicsProtectMode);
			if (protect.equals(BlockProtectMode.protect)) {
				e.setCancelled(true);
			} else if (protect.equals(BlockProtectMode.remove)) {
				conBlock.delBlock(e.getBlock());
			}
		}
	}