// when a painting is broken
  @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
  public void onPaintingBreak(PaintingBreakEvent event) {
    // FEATURE: claimed paintings are protected from breakage

    // only allow players to break paintings, not anything else (like water and explosions)
    if (!(event instanceof PaintingBreakByEntityEvent)) {
      event.setCancelled(true);
      return;
    }

    PaintingBreakByEntityEvent entityEvent = (PaintingBreakByEntityEvent) event;

    // who is removing it?
    Entity remover = entityEvent.getRemover();

    // again, making sure the breaker is a player
    if (!(remover instanceof Player)) {
      event.setCancelled(true);
      return;
    }

    // if the player doesn't have build permission, don't allow the breakage
    Player playerRemover = (Player) entityEvent.getRemover();
    String noBuildReason =
        GriefPrevention.instance.allowBuild(playerRemover, event.getPainting().getLocation());
    if (noBuildReason != null) {
      event.setCancelled(true);
      GriefPrevention.sendMessage(playerRemover, TextMode.Err, noBuildReason);
    }
  }
예제 #2
0
 @EventHandler(priority = EventPriority.NORMAL)
 public void onPaintingBreak(PaintingBreakEvent event) {
   if (event instanceof PaintingBreakByEntityEvent) {
     PaintingBreakByEntityEvent evt = (PaintingBreakByEntityEvent) event;
     if (evt.getRemover() instanceof Player) {
       Player player = (Player) evt.getRemover();
       if (Residence.isResAdminOn(player)) {
         return;
       }
       String pname = player.getName();
       FlagPermissions perms = Residence.getPermsByLoc(event.getPainting().getLocation());
       String world = event.getPainting().getWorld().getName();
       boolean hasplace =
           perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true));
       if (!hasplace) {
         event.setCancelled(true);
         player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission"));
       }
     }
   }
 }
예제 #3
0
  @EventHandler(priority = EventPriority.HIGHEST)
  public void onPaintingBreak(PaintingBreakEvent evt) {

    Player cause;

    if (!(evt instanceof PaintingBreakByEntityEvent)) {
      return;
    }

    PaintingBreakByEntityEvent event = (PaintingBreakByEntityEvent) evt;
    if (!(event.getRemover() instanceof Player)) {
      return;
    }

    cause = (Player) event.getRemover();

    Location l = evt.getPainting().getLocation();
    World w = l.getWorld();
    Chunk c = w.getChunkAt(l);

    GlobalWorldSetting gws = GlobalRegionManager.getGlobalWorldSetting(w);

    Region r;

    ArrayList<Region> regionSet = new ArrayList<Region>();

    for (Region region : GlobalRegionManager.getRegions()) {
      for (Chunk chunk : region.getChunkGrid().getChunks()) {
        if (chunk.getWorld() == w) {
          if (areChunksEqual(chunk, c)) {
            if (!regionSet.contains(region)) {
              regionSet.add(region);
            }
          }
        }
      }
    }

    if (regionSet.isEmpty()) {
      if (gws != null) {
        if (gws.invert_protection) {
          evt.setCancelled(true);
          return;
        }
      }
      return;
    }

    ArrayList<Region> currentRegionSet = new ArrayList<Region>();

    for (Region reg : regionSet) {
      if (extReg.isInsideCuboid(
          l, reg.getL1().toBukkitLocation(), reg.getL2().toBukkitLocation())) {
        currentRegionSet.add(reg);
      }
    }

    if (currentRegionSet.isEmpty()) { // If player is in chunk range but not
      // inside region then cancel the
      // check.
      if (gws != null) {
        if (gws.invert_protection) {
          evt.setCancelled(true);
          return;
        }
      }
      return;
    }

    if (currentRegionSet.size() > 1) {
      r = srm.getCurrentRegion(null, currentRegionSet);
    } else {
      r = currentRegionSet.get(0);
    }

    if (r.is_protectionBreak()) {
      if (!r.canBuild(cause)) {
        LogRunner.addLogMessage(r, LogRunner.getPrefix(r) + (" Painting break was prevented."));
        r.sendBuildMessage(cause);
        evt.setCancelled(true);
        return;
      }
    }
  }