/* * This file is part of Libelula Minecraft Edition Project. * * Libelula Minecraft Edition is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libelula Minecraft Edition is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Libelula Minecraft Edition. * If not, see <http://www.gnu.org/licenses/>. * */ package me.libelula.libelulalogger; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import java.util.Iterator; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryType; /** * Class EventLogger of the plugin. * * @author Diego Lucio D'Onofrio <ddonofrio@member.fsf.org> * @version 1.0 * */ public class EventLogger implements Listener { private final LibelulaLogger plugin; public EventLogger(LibelulaLogger plugin) { this.plugin = plugin; } private boolean mustBeLogged(Player player, Block block) { for (Iterator<Material> it = plugin.config.getIgnoredMaterials().iterator(); it.hasNext();) { Material material = it.next(); if (block.getType().equals(material)) { return false; } } if (!plugin.config.getIgnoredPlayerNames().isEmpty()) { if (!plugin.config.getIgnoredPlayerNames().contains(player.getName())) { return false; } } if (!plugin.config.getIgnoredWorlds().isEmpty()) { if (!plugin.config.getIgnoredWorlds().contains(block.getWorld())) { return false; } } if (plugin.config.getFlagValue("only-modified-blocks") && !plugin.meode.hasItBeenChanged(block)) { return false; } if (!plugin.config.wgRegionPolicyIsDefault()) { if (plugin.worldGuardPlugin != null) { RegionManager regionManager = plugin.worldGuardPlugin.getRegionManager(block.getWorld()); switch (plugin.config.getWgRegionPolicy()) { case "NEVER": if (regionManager.getApplicableRegions(block.getLocation()).size() != 0) { return false; } break; case "DIFFERS": for (ProtectedRegion region : regionManager.getApplicableRegions(block.getLocation())) { if (region.isMember(player.getName())) { return false; } else { break; } } } } } return true; } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent e) { if (mustBeLogged(e.getPlayer(), e.getBlock())) { plugin.meode.addEvent(e); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent e) { if (mustBeLogged(e.getPlayer(), e.getBlock())) { plugin.meode.addEvent(e); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onSignEdit(SignChangeEvent e) { if (plugin.config.logSignsToFile()) { Object objects[] = {e}; new LogToTextFile(plugin, LogToTextFile.types.SIGN, objects).runTaskAsynchronously(plugin); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestOpen(InventoryOpenEvent e) { if (e.getInventory().getType() != InventoryType.CHEST || !plugin.config.logChestToFile()) { return; } plugin.playerOpenChest((Player) e.getPlayer(), e.getInventory()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestClose(InventoryCloseEvent e) { if (e.getInventory().getType() != InventoryType.CHEST || !plugin.config.logChestToFile()) { return; } plugin.playerCloseChest((Player) e.getPlayer(), e.getInventory()); } }