/*
* 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.garbagemule.MobArena.MobArenaHandler;
import com.garbagemule.MobArena.events.ArenaPlayerJoinEvent;
import de.Keyle.MyPet.MyPetApi;
import de.Keyle.MyPet.api.Configuration;
import de.Keyle.MyPet.api.entity.MyPet;
import de.Keyle.MyPet.api.entity.MyPetBukkitEntity;
import de.Keyle.MyPet.api.event.MyPetCallEvent;
import de.Keyle.MyPet.api.player.MyPetPlayer;
import de.Keyle.MyPet.api.util.hooks.PluginHookName;
import de.Keyle.MyPet.api.util.hooks.types.ArenaHook;
import de.Keyle.MyPet.api.util.hooks.types.PlayerVersusPlayerHook;
import de.Keyle.MyPet.api.util.locale.Translation;
import de.Keyle.MyPet.util.PluginHook;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
@PluginHookName(value = "MobArena", classPath = "com.garbagemule.MobArena.MobArena")
public class MobArenaHook extends PluginHook implements PlayerVersusPlayerHook, ArenaHook {
protected MobArenaHandler mobArenaHandler;
@Override
public boolean onEnable() {
if (Configuration.Hooks.USE_MobArena) {
Bukkit.getPluginManager().registerEvents(this, MyPetApi.getPlugin());
mobArenaHandler = new MobArenaHandler();
return true;
}
return false;
}
@Override
public void onDisable() {
HandlerList.unregisterAll(this);
}
@Override
public boolean isInArena(MyPetPlayer owner) {
try {
return mobArenaHandler.isPlayerInArena(owner.getPlayer());
} catch (Exception ignored) {
}
return false;
}
@Override
public boolean canHurt(Player attacker, Player defender) {
try {
if (mobArenaHandler == null) {
mobArenaHandler = new MobArenaHandler();
}
if (mobArenaHandler.isPlayerInArena(defender)) {
return mobArenaHandler.getArenaWithPlayer(defender).getSettings().getBoolean("pvp-enabled", true);
}
} catch (Throwable ignored) {
}
return true;
}
@EventHandler
public void onJoinPvPArena(ArenaPlayerJoinEvent event) {
if (MyPetApi.getPlayerManager().isMyPetPlayer(event.getPlayer())) {
MyPetPlayer player = MyPetApi.getPlayerManager().getMyPetPlayer(event.getPlayer());
if (player.hasMyPet() && player.getMyPet().getStatus() == MyPet.PetState.Here) {
player.getMyPet().removePet();
player.getPlayer().sendMessage(Translation.getString("Message.No.AllowedHere", player.getPlayer()));
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onMyPetDamageInArena(EntityDamageByEntityEvent event) {
MyPetBukkitEntity damager;
if (event.getDamager() instanceof MyPetBukkitEntity) {
damager = (MyPetBukkitEntity) event.getDamager();
} else if (event.getDamager() instanceof Projectile && ((Projectile) event.getDamager()).getShooter() instanceof MyPetBukkitEntity) {
damager = (MyPetBukkitEntity) ((Projectile) event.getDamager()).getShooter();
} else {
return;
}
if (isInArena(damager.getOwner())) {
event.setCancelled(false);
}
}
@EventHandler
public void onMyPetCall(MyPetCallEvent event) {
if (isInArena(event.getOwner())) {
event.setCancelled(true);
}
}
}