TF-EssentialsX/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java

184 lines
5.3 KiB
Java
Raw Normal View History

package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
2011-08-21 18:02:01 +00:00
import java.util.List;
2012-08-31 17:52:40 +00:00
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Material;
2012-04-24 10:30:31 +00:00
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class EssentialsEntityListener implements Listener
{
2012-08-31 17:52:40 +00:00
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private final IEssentials ess;
public EssentialsEntityListener(IEssentials ess)
{
this.ess = ess;
}
2012-06-10 17:33:07 +00:00
@EventHandler(priority = EventPriority.LOW)
2012-03-02 16:54:12 +00:00
public void onEntityDamage(final EntityDamageByEntityEvent event)
{
2012-03-02 16:54:12 +00:00
final Entity eAttack = event.getDamager();
final Entity eDefend = event.getEntity();
if (eDefend instanceof Player && eAttack instanceof Player)
{
2012-03-02 16:54:12 +00:00
final User defender = ess.getUser(eDefend);
final User attacker = ess.getUser(eAttack);
2012-05-22 20:02:28 +00:00
if (ess.getSettings().getLoginAttackDelay() > 0 && !attacker.isAuthorized("essentials.pvpdelay.exempt")
&& (System.currentTimeMillis() < (attacker.getLastLogin() + ess.getSettings().getLoginAttackDelay())))
{
event.setCancelled(true);
}
2012-05-22 20:02:28 +00:00
if (attacker.hasInvulnerabilityAfterTeleport() || defender.hasInvulnerabilityAfterTeleport())
{
2012-03-27 19:14:38 +00:00
event.setCancelled(true);
}
if (attacker.isGodModeEnabled() && !attacker.isAuthorized("essentials.god.pvp"))
{
event.setCancelled(true);
}
2012-05-22 20:02:28 +00:00
2012-03-02 16:54:12 +00:00
attacker.updateActivity(true);
final List<String> commandList = attacker.getPowertool(attacker.getItemInHand());
if (commandList != null && !commandList.isEmpty())
{
for (final String command : commandList)
{
2012-03-02 16:54:12 +00:00
if (command != null && !command.isEmpty())
2011-08-21 18:02:01 +00:00
{
ess.scheduleSyncDelayedTask(
new Runnable()
{
@Override
public void run()
{
attacker.getServer().dispatchCommand(attacker.getBase(), command.replaceAll("\\{player\\}", defender.getName()));
2012-08-31 17:52:40 +00:00
LOGGER.log(Level.INFO, String.format("[PT] %s issued server command: /%s", attacker.getName(), command));
}
});
2012-03-02 16:54:12 +00:00
event.setCancelled(true);
return;
2011-08-21 18:02:01 +00:00
}
}
}
2012-03-02 16:54:12 +00:00
}
else if (eAttack instanceof Player)
2012-03-02 16:54:12 +00:00
{
final User player = ess.getUser(eAttack);
player.updateActivity(true);
if (eDefend instanceof Ageable)
{
final ItemStack hand = player.getItemInHand();
if (hand != null && hand.getType() == Material.MILK_BUCKET)
{
((Ageable)eDefend).setBaby();
hand.setType(Material.BUCKET);
player.setItemInHand(hand);
player.updateInventory();
event.setCancelled(true);
}
}
}
2012-03-02 16:54:12 +00:00
}
2012-06-10 17:33:07 +00:00
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
2012-03-02 16:54:12 +00:00
public void onEntityDamage(final EntityDamageEvent event)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
final Player player = (Player)event.getEntity();
player.setFireTicks(0);
player.setRemainingAir(player.getMaximumAir());
event.setCancelled(true);
}
}
2012-06-10 17:33:07 +00:00
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
2012-03-02 16:54:12 +00:00
public void onEntityCombust(final EntityCombustEvent event)
{
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST)
2012-03-02 16:54:12 +00:00
public void onPlayerDeathEvent(final PlayerDeathEvent event)
{
2012-03-02 16:54:12 +00:00
final User user = ess.getUser(event.getEntity());
if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back"))
{
2012-03-02 16:54:12 +00:00
user.setLastLocation();
user.sendMessage(_("backAfterDeath"));
}
if (!ess.getSettings().areDeathMessagesEnabled())
{
event.setDeathMessage("");
}
}
@EventHandler(priority = EventPriority.LOW)
public void onPlayerDeathExpEvent(final PlayerDeathEvent event)
{
final User user = ess.getUser(event.getEntity());
if (user.isAuthorized("essentials.keepxp"))
{
event.setKeepLevel(true);
event.setDroppedExp(0);
}
}
2012-06-10 17:33:07 +00:00
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
2012-03-02 16:54:12 +00:00
public void onFoodLevelChange(final FoodLevelChangeEvent event)
{
2011-09-22 08:47:39 +00:00
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{
2011-10-04 08:05:04 +00:00
event.setCancelled(true);
2011-09-22 08:47:39 +00:00
}
}
2012-06-10 17:33:07 +00:00
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
2012-03-02 16:54:12 +00:00
public void onEntityRegainHealth(final EntityRegainHealthEvent event)
{
if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player
&& ess.getUser(event.getEntity()).isAfk() && ess.getSettings().getFreezeAfkPlayers())
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPotionSplashEvent(final PotionSplashEvent event)
{
for (LivingEntity entity : event.getAffectedEntities())
{
if (entity instanceof Player)
{
User user = ess.getUser(entity);
if (user.isGodModeEnabled())
{
event.setIntensity(entity, 0d);
}
}
}
}
}