/* * This file is part of MyPet * * Copyright © 2011-2016 Keyle * MyPet is licensed under the GNU Lesser General Public License. * * MyPet 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. * * MyPet 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package de.Keyle.MyPet.util.hooks; import com.intellectualcrafters.plot.flag.Flags; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.util.Permissions; import com.plotsquared.bukkit.listeners.PlayerEvents; import com.plotsquared.bukkit.util.BukkitUtil; import de.Keyle.MyPet.api.Configuration; import de.Keyle.MyPet.api.util.hooks.PluginHookName; import de.Keyle.MyPet.api.util.hooks.types.PlayerVersusEntityHook; import de.Keyle.MyPet.api.util.hooks.types.PlayerVersusPlayerHook; import de.Keyle.MyPet.util.PluginHook; import org.bukkit.entity.*; @PluginHookName("PlotSquared") public class PlotSquaredHook extends PluginHook implements PlayerVersusPlayerHook, PlayerVersusEntityHook { protected PlayerEvents playerEvents; @Override public boolean onEnable() { if (Configuration.Hooks.USE_PlotSquared) { playerEvents = new PlayerEvents(); return true; } return false; } @Override public boolean canHurt(Player attacker, Entity defender) { try { com.intellectualcrafters.plot.object.Location dloc = BukkitUtil.getLocation(attacker); com.intellectualcrafters.plot.object.Location vloc = BukkitUtil.getLocation(defender); PlotArea dArea = dloc.getPlotArea(); PlotArea vArea = dArea != null && dArea.contains(vloc.getX(), vloc.getZ()) ? dArea : vloc.getPlotArea(); if (dArea != null || vArea != null) { Plot dplot = dArea != null ? dArea.getPlot(dloc) : null; Plot vplot = vArea != null ? vArea.getPlot(vloc) : null; Plot plot; String stub; if (dplot == null && vplot == null) { if (dArea == null) { return true; } plot = null; stub = "road"; } else { if (defender.getTicksLived() > attacker.getTicksLived()) { if (dplot != null && defender instanceof Player) { plot = dplot; } else if (vplot == null) { plot = dplot; } else { plot = vplot; } } else if (dplot != null && defender instanceof Player) { if (vplot == null) { plot = dplot; } else { plot = vplot; } } else if (vplot == null) { plot = dplot; } else { plot = vplot; } if (plot.hasOwner()) { stub = "other"; } else { stub = "unowned"; } } PlotPlayer plotPlayer1 = BukkitUtil.getPlayer(attacker); if (defender instanceof Hanging) { if (plot != null && (plot.getFlag(Flags.HANGING_BREAK, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.destroy." + stub)) { return false; } } else if (defender.getEntityId() == 30) { if (plot != null && (plot.getFlag(Flags.MISC_BREAK, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.destroy." + stub)) { return false; } } else if (!(defender instanceof Monster) && !(defender instanceof EnderDragon)) { if (defender instanceof Tameable) { if (plot != null && (plot.getFlag(Flags.TAMED_ATTACK, Boolean.FALSE) || plot.getFlag(Flags.PVE, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.pve." + stub)) { return false; } } else if (defender instanceof Player) { if (plot != null) { return !(Flags.PVP.isFalse(plot) && !Permissions.hasPermission(plotPlayer1, "plots.admin.pvp." + stub)); } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.pvp." + stub)) { return false; } } else if (!(defender instanceof Creature)) { if (defender instanceof Vehicle) { return true; } if (plot != null && (plot.getFlag(Flags.PVE, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.pve." + stub)) { return false; } } else { if (plot != null && (plot.getFlag(Flags.ANIMAL_ATTACK, Boolean.FALSE) || plot.getFlag(Flags.PVE, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.pve." + stub)) { return false; } } } else { if (plot != null && (plot.getFlag(Flags.HOSTILE_ATTACK, Boolean.FALSE) || plot.getFlag(Flags.PVE, Boolean.FALSE) || plot.isAdded(plotPlayer1.getUUID()))) { return true; } if (!Permissions.hasPermission(plotPlayer1, "plots.admin.pve." + stub)) { return false; } } } } catch (Throwable ignored) { } return true; } @Override public boolean canHurt(Player attacker, Player defender) { return canHurt(attacker, (Entity) defender); } }