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

777 lines
21 KiB
Java
Raw Normal View History

2011-09-28 23:38:56 +00:00
package com.earth2me.essentials;
import static com.earth2me.essentials.I18n.tl;
import com.earth2me.essentials.textreader.IText;
import com.earth2me.essentials.textreader.KeywordReplacer;
import com.earth2me.essentials.textreader.TextInput;
import com.earth2me.essentials.textreader.TextPager;
2013-06-08 21:31:19 +00:00
import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.LocationUtil;
import java.io.IOException;
2011-09-28 23:38:56 +00:00
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
2011-09-28 23:38:56 +00:00
import java.util.logging.Level;
import java.util.logging.Logger;
2013-10-11 02:44:41 +00:00
import net.ess3.api.IEssentials;
import org.bukkit.GameMode;
2011-09-28 23:38:56 +00:00
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
2011-09-28 23:38:56 +00:00
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
2013-03-16 09:16:33 +00:00
import org.bukkit.event.player.*;
2013-10-11 02:44:41 +00:00
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
2013-01-01 18:39:23 +00:00
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
2011-09-28 23:38:56 +00:00
import org.bukkit.inventory.ItemStack;
public class EssentialsPlayerListener implements Listener
2011-09-28 23:38:56 +00:00
{
2013-12-07 20:03:05 +00:00
private static final Logger LOGGER = Logger.getLogger("Essentials");
2011-09-28 23:38:56 +00:00
private final transient IEssentials ess;
2011-09-28 23:38:56 +00:00
public EssentialsPlayerListener(final IEssentials parent)
{
this.ess = parent;
}
@EventHandler(priority = EventPriority.NORMAL)
2011-09-28 23:38:56 +00:00
public void onPlayerRespawn(final PlayerRespawnEvent event)
{
final User user = ess.getUser(event.getPlayer());
updateCompass(user);
2012-03-21 23:54:57 +00:00
user.setDisplayNick();
if (ess.getSettings().isTeleportInvulnerability())
{
user.enableInvulnerabilityAfterTeleport();
}
2011-09-28 23:38:56 +00:00
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChat(final AsyncPlayerChatEvent event)
2011-09-28 23:38:56 +00:00
{
final User user = ess.getUser(event.getPlayer());
if (user.isMuted())
{
event.setCancelled(true);
user.sendMessage(tl("voiceSilenced"));
LOGGER.info(tl("mutedUserSpeaks", user.getName()));
2011-09-28 23:38:56 +00:00
}
try
{
final Iterator<Player> it = event.getRecipients().iterator();
while (it.hasNext())
{
final User u = ess.getUser(it.next());
if (u.isIgnoredPlayer(user))
{
it.remove();
}
}
}
catch (UnsupportedOperationException ex)
2011-09-28 23:38:56 +00:00
{
if (ess.getSettings().isDebug())
2011-09-28 23:38:56 +00:00
{
ess.getLogger().log(Level.INFO, "Ignore could not block chat due to custom chat plugin event.", ex);
}
else
{
ess.getLogger().info("Ignore could not block chat due to custom chat plugin event.");
2011-09-28 23:38:56 +00:00
}
}
2011-09-28 23:38:56 +00:00
user.updateActivity(true);
2012-03-21 23:54:57 +00:00
user.setDisplayNick();
2011-09-28 23:38:56 +00:00
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
2011-09-28 23:38:56 +00:00
public void onPlayerMove(final PlayerMoveEvent event)
{
2013-05-12 19:41:40 +00:00
if (event.getFrom().getBlockX() == event.getTo().getBlockX()
&& event.getFrom().getBlockZ() == event.getTo().getBlockZ()
&& event.getFrom().getBlockY() == event.getTo().getBlockY())
{
return;
}
2012-12-31 05:44:20 +00:00
if (!ess.getSettings().cancelAfkOnMove() && !ess.getSettings().getFreezeAfkPlayers())
{
2012-12-31 12:15:51 +00:00
event.getHandlers().unregister(this);
2012-12-31 05:44:20 +00:00
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.INFO, "Unregistering move listener");
}
2012-12-31 05:44:20 +00:00
return;
}
2011-09-28 23:38:56 +00:00
final User user = ess.getUser(event.getPlayer());
if (user.isAfk() && ess.getSettings().getFreezeAfkPlayers())
2011-09-28 23:38:56 +00:00
{
final Location from = event.getFrom();
final Location origTo = event.getTo();
final Location to = origTo.clone();
if (ess.getSettings().cancelAfkOnMove() && origTo.getY() >= from.getBlockY() + 1)
{
user.updateActivity(true);
return;
}
to.setX(from.getX());
to.setY(from.getY());
to.setZ(from.getZ());
try
{
2013-06-08 21:31:19 +00:00
event.setTo(LocationUtil.getSafeDestination(to));
}
catch (Exception ex)
{
event.setTo(to);
}
return;
}
final Location afk = user.getAfkPosition();
if (afk == null || !event.getTo().getWorld().equals(afk.getWorld()) || afk.distanceSquared(event.getTo()) > 9)
{
user.updateActivity(true);
2011-09-28 23:38:56 +00:00
}
}
@EventHandler(priority = EventPriority.HIGHEST)
2013-12-03 14:41:08 +00:00
public void onPlayerQuit(final PlayerQuitEvent event)
{
2013-12-03 14:41:08 +00:00
final User user = ess.getUser(event.getPlayer());
2013-12-03 14:41:08 +00:00
if (ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentquit"))
{
event.setQuitMessage(null);
}
2013-12-03 14:41:08 +00:00
else if (ess.getSettings().isCustomQuitMessage() && event.getQuitMessage() != null)
{
final Player player = event.getPlayer();
event.setQuitMessage(
ess.getSettings().getCustomQuitMessage()
.replace("{PLAYER}", player.getDisplayName())
.replace("{USERNAME}", player.getName()));
}
2011-09-28 23:38:56 +00:00
if (ess.getSettings().removeGodOnDisconnect() && user.isGodModeEnabled())
{
2012-06-10 18:20:24 +00:00
user.setGodModeEnabled(false);
2011-09-28 23:38:56 +00:00
}
2012-06-10 23:17:19 +00:00
if (user.isVanished())
{
2013-06-02 16:45:56 +00:00
user.setVanished(false);
2012-06-10 23:17:19 +00:00
}
user.setLogoutLocation();
if (user.isRecipeSee())
{
2013-07-07 11:11:57 +00:00
user.getBase().getOpenInventory().getTopInventory().clear();
}
2011-09-28 23:38:56 +00:00
user.updateActivity(false);
user.dispose();
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(final PlayerJoinEvent event)
{
final String joinMessage = event.getJoinMessage();
ess.runTaskAsynchronously(new Runnable()
{
@Override
public void run()
{
delayedJoin(event.getPlayer(), joinMessage);
}
});
if (ess.getSettings().allowSilentJoinQuit() || ess.getSettings().isCustomJoinMessage())
{
event.setJoinMessage(null);
}
}
public void delayedJoin(final Player player, final String message)
{
if (!player.isOnline())
{
return;
}
ess.getBackup().onPlayerJoin();
final User user = ess.getUser(player);
if (user.isNPC())
{
user.setNPC(false);
}
final long currentTime = System.currentTimeMillis();
user.checkMuteTimeout(currentTime);
2011-09-28 23:38:56 +00:00
user.updateActivity(false);
ess.scheduleSyncDelayedTask(new Runnable()
{
@Override
public void run()
{
if (!user.isOnline())
{
return;
}
2014-02-02 17:05:41 +00:00
user.trackUUID();
user.setLastLogin(currentTime);
2013-01-29 23:51:42 +00:00
user.setDisplayNick();
updateCompass(user);
if (!ess.getVanishedPlayers().isEmpty() && !user.isAuthorized("essentials.vanish.see"))
{
for (String p : ess.getVanishedPlayers())
{
Player toVanish = ess.getServer().getPlayerExact(p);
if (toVanish != null && toVanish.isOnline())
{
user.hidePlayer(toVanish);
}
}
2012-09-09 19:13:03 +00:00
}
if (user.isAuthorized("essentials.sleepingignored"))
{
user.setSleepingIgnored(true);
}
2013-12-07 02:44:41 +00:00
if ((ess.getSettings().allowSilentJoinQuit() && user.isAuthorized("essentials.silentjoin")) || message == null)
{
// Do nothing - silently join
}
else if (ess.getSettings().isCustomJoinMessage())
{
ess.getServer().broadcastMessage(
ess.getSettings().getCustomJoinMessage()
.replace("{PLAYER}", player.getDisplayName())
.replace("{USERNAME}", player.getName()));
}
else if (ess.getSettings().allowSilentJoinQuit())
{
ess.getServer().broadcastMessage(message);
}
if (!ess.getSettings().isCommandDisabled("motd") && user.isAuthorized("essentials.motd"))
{
try
{
final IText input = new TextInput(user.getSource(), "motd", true, ess);
final IText output = new KeywordReplacer(input, user.getSource(), ess);
final TextPager pager = new TextPager(output, true);
pager.showPage("1", null, "motd", user.getSource());
}
catch (IOException ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
else
{
LOGGER.log(Level.WARNING, ex.getMessage());
}
}
}
if (!ess.getSettings().isCommandDisabled("mail") && user.isAuthorized("essentials.mail"))
{
final List<String> mail = user.getMails();
if (mail.isEmpty())
{
user.sendMessage(tl("noNewMail"));
}
else
{
user.sendMessage(tl("youHaveNewMail", mail.size()));
}
}
if (user.isAuthorized("essentials.fly.safelogin"))
{
user.setFallDistance(0);
if (LocationUtil.shouldFly(user.getLocation()))
{
user.setAllowFlight(true);
user.setFlying(true);
user.sendMessage(tl("flyMode", tl("enabled"), user.getDisplayName()));
}
}
user.setFlySpeed(0.1f);
user.setWalkSpeed(0.2f);
}
});
2011-09-28 23:38:56 +00:00
}
2012-10-22 10:27:01 +00:00
// Makes the compass item ingame always point to the first essentials home. #EasterEgg
private void updateCompass(final User user)
{
Location loc = user.getHome(user.getLocation());
if (loc == null)
{
loc = user.getBedSpawnLocation();
}
if (loc != null)
{
final Location updateLoc = loc;
2013-01-29 23:51:42 +00:00
user.setCompassTarget(updateLoc);
}
}
2013-09-04 06:19:30 +00:00
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin2(final PlayerLoginEvent event)
{
switch (event.getResult())
{
case KICK_BANNED:
break;
default:
return;
}
final String banReason = tl("banFormat", tl("defaultBanReason"), "Console");
2013-09-04 06:19:30 +00:00
event.disallow(Result.KICK_BANNED, banReason);
}
@EventHandler(priority = EventPriority.HIGH)
2011-09-28 23:38:56 +00:00
public void onPlayerLogin(final PlayerLoginEvent event)
{
switch (event.getResult())
{
2012-03-03 05:09:03 +00:00
case KICK_FULL:
case KICK_BANNED:
2012-03-03 05:09:03 +00:00
break;
default:
return;
2011-09-28 23:38:56 +00:00
}
final User user = ess.getUser(event.getPlayer());
if (event.getResult() == Result.KICK_BANNED || user.isBanned())
2011-09-28 23:38:56 +00:00
{
final boolean banExpired = user.checkBanTimeout(System.currentTimeMillis());
if (!banExpired)
{
String banReason = user.getBanReason();
if (banReason == null || banReason.isEmpty() || banReason.equalsIgnoreCase("ban"))
{
2013-09-04 06:19:30 +00:00
banReason = event.getKickMessage();
}
if (user.getBanTimeout() > 0)
{
//TODO: TL This
2013-06-08 21:31:19 +00:00
banReason += "\n\n" + "Expires in " + DateUtil.formatDateDiff(user.getBanTimeout());
}
event.disallow(Result.KICK_BANNED, banReason);
return;
}
2011-09-28 23:38:56 +00:00
}
if (event.getResult() == Result.KICK_FULL && !user.isAuthorized("essentials.joinfullserver"))
2011-09-28 23:38:56 +00:00
{
event.disallow(Result.KICK_FULL, tl("serverFull"));
2011-09-28 23:38:56 +00:00
return;
}
event.allow();
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event)
{
final boolean backListener = ess.getSettings().registerBackInListener();
final boolean teleportInvulnerability = ess.getSettings().isTeleportInvulnerability();
2012-03-30 20:44:14 +00:00
if (backListener || teleportInvulnerability)
{
2012-03-30 20:44:14 +00:00
final User user = ess.getUser(event.getPlayer());
//There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports.
if (backListener && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND))
{
user.setLastLocation();
}
if (teleportInvulnerability && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND))
2012-03-30 20:44:14 +00:00
{
user.enableInvulnerabilityAfterTeleport();
}
}
2011-09-28 23:38:56 +00:00
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
2011-09-28 23:38:56 +00:00
public void onPlayerEggThrow(final PlayerEggThrowEvent event)
{
final User user = ess.getUser(event.getPlayer());
final ItemStack stack = new ItemStack(Material.EGG, 1);
if (user.hasUnlimited(stack))
2011-09-28 23:38:56 +00:00
{
user.getInventory().addItem(stack);
2011-09-28 23:38:56 +00:00
user.updateInventory();
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
2011-09-28 23:38:56 +00:00
public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.hasUnlimited(new ItemStack(event.getBucket())))
{
event.getItemStack().setType(event.getBucket());
ess.scheduleSyncDelayedTask(new Runnable()
{
2011-11-18 18:07:28 +00:00
@Override
2011-09-28 23:38:56 +00:00
public void run()
{
user.updateInventory();
}
});
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
2011-09-28 23:38:56 +00:00
public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event)
{
final Player player = event.getPlayer();
final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
2014-03-26 15:14:20 +00:00
if (ess.getSettings().getSocialSpyCommands().contains(cmd) || ess.getSettings().getSocialSpyCommands().contains("*"))
2011-09-28 23:38:56 +00:00
{
for (Player onlinePlayer : ess.getServer().getOnlinePlayers())
2011-09-28 23:38:56 +00:00
{
final User spyer = ess.getUser(onlinePlayer);
if (spyer.isSocialSpyEnabled() && !player.equals(onlinePlayer))
2011-09-28 23:38:56 +00:00
{
spyer.sendMessage(player.getDisplayName() + " : " + event.getMessage());
2011-09-28 23:38:56 +00:00
}
}
}
else if (!cmd.equalsIgnoreCase("afk"))
2011-09-28 23:38:56 +00:00
{
final User user = ess.getUser(player);
2011-09-28 23:38:56 +00:00
user.updateActivity(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChangedWorldFlyReset(final PlayerChangedWorldEvent event)
{
final User user = ess.getUser(event.getPlayer());
if (user.getGameMode() != GameMode.CREATIVE && !user.isAuthorized("essentials.fly"))
{
user.setFallDistance(0f);
user.setAllowFlight(false);
}
if (!user.isAuthorized("essentials.speed"))
{
user.setFlySpeed(0.1f);
user.setWalkSpeed(0.2f);
}
else
{
if (user.getFlySpeed() > ess.getSettings().getMaxFlySpeed() && !user.isAuthorized("essentials.speed.bypass"))
{
user.setFlySpeed((float)ess.getSettings().getMaxFlySpeed());
}
else
{
user.setFlySpeed(user.getFlySpeed() * 0.99999f);
}
if (user.getWalkSpeed() > ess.getSettings().getMaxWalkSpeed() && !user.isAuthorized("essentials.speed.bypass"))
{
user.setWalkSpeed((float)ess.getSettings().getMaxWalkSpeed());
}
else
{
user.setWalkSpeed(user.getWalkSpeed() * 0.99999f);
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangedWorld(final PlayerChangedWorldEvent event)
{
final User user = ess.getUser(event.getPlayer());
final String newWorld = event.getPlayer().getLocation().getWorld().getName();
2012-03-21 23:54:57 +00:00
user.setDisplayNick();
updateCompass(user);
if (ess.getSettings().getNoGodWorlds().contains(newWorld) && user.isGodModeEnabledRaw())
{
user.sendMessage(tl("noGodWorldWarning"));
}
if (!user.getWorld().getName().equals(newWorld))
{
user.sendMessage(tl("currentWorld", newWorld));
}
if (user.isVanished())
{
user.setVanished(user.isAuthorized("essentials.vanish"));
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerInteract(final PlayerInteractEvent event)
{
switch (event.getAction())
{
case RIGHT_CLICK_BLOCK:
if (!event.isCancelled() && event.getClickedBlock().getType() == Material.BED_BLOCK && ess.getSettings().getUpdateBedAtDaytime())
{
User player = ess.getUser(event.getPlayer());
if (player.isAuthorized("essentials.sethome.bed"))
{
player.setBedSpawnLocation(event.getClickedBlock().getLocation());
player.sendMessage(tl("bedSet", player.getLocation().getWorld().getName(), player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()));
}
}
break;
2012-03-29 02:06:52 +00:00
case LEFT_CLICK_AIR:
2012-09-09 19:13:03 +00:00
if (event.getPlayer().isFlying())
{
final User user = ess.getUser(event.getPlayer());
if (user.isFlyClickJump())
{
useFlyClickJump(user);
return;
}
}
2012-03-30 20:44:14 +00:00
case LEFT_CLICK_BLOCK:
if (event.getItem() != null && event.getItem().getType() != Material.AIR)
{
2012-03-30 20:44:14 +00:00
final User user = ess.getUser(event.getPlayer());
2012-12-03 09:08:56 +00:00
user.updateActivity(true);
2012-03-30 20:44:14 +00:00
if (user.hasPowerTools() && user.arePowerToolsEnabled() && usePowertools(user, event.getItem().getTypeId()))
{
event.setCancelled(true);
}
}
break;
default:
break;
}
}
2012-10-06 02:31:34 +00:00
// This method allows the /jump lock feature to work, allows teleporting while flying #EasterEgg
private void useFlyClickJump(final User user)
{
try
{
2013-07-07 11:11:57 +00:00
final Location otarget = LocationUtil.getTarget(user.getBase());
ess.scheduleSyncDelayedTask(
new Runnable()
{
@Override
public void run()
{
Location loc = user.getLocation();
loc.setX(otarget.getX());
loc.setZ(otarget.getZ());
while (LocationUtil.isBlockDamaging(loc.getWorld(), loc.getBlockX(), loc.getBlockY() - 1, loc.getBlockZ()))
{
loc.setY(loc.getY() + 1d);
}
user.getBase().teleport(loc, TeleportCause.PLUGIN);
}
});
}
catch (Exception ex)
{
if (ess.getSettings().isDebug())
{
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
2012-03-30 20:44:14 +00:00
private boolean usePowertools(final User user, final int id)
{
final List<String> commandList = user.getPowertool(id);
if (commandList == null || commandList.isEmpty())
{
return false;
}
boolean used = false;
// We need to loop through each command and execute
for (final String command : commandList)
{
2012-03-30 20:44:14 +00:00
if (command.contains("{player}"))
{
continue;
}
else if (command.startsWith("c:"))
{
used = true;
user.chat(command.substring(2));
}
else
{
used = true;
ess.scheduleSyncDelayedTask(
new Runnable()
{
@Override
public void run()
{
user.getServer().dispatchCommand(user.getBase(), command);
LOGGER.log(Level.INFO, String.format("[PT] %s issued server command: /%s", user.getName(), command));
}
});
}
}
return used;
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerPickupItem(final PlayerPickupItemEvent event)
{
if (ess.getSettings().getDisableItemPickupWhileAfk())
{
if (ess.getUser(event.getPlayer()).isAfk())
{
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onInventoryClickEvent(final InventoryClickEvent event)
{
2014-02-09 21:51:18 +00:00
Player refreshPlayer = null;
2013-01-01 18:39:23 +00:00
final Inventory top = event.getView().getTopInventory();
final InventoryType type = top.getType();
2013-01-01 18:39:23 +00:00
if (type == InventoryType.PLAYER)
{
final User user = ess.getUser((Player)event.getWhoClicked());
2013-01-01 18:39:23 +00:00
final InventoryHolder invHolder = top.getHolder();
if (invHolder != null && invHolder instanceof HumanEntity)
{
final User invOwner = ess.getUser((Player)invHolder);
if (user.isInvSee() && (!user.isAuthorized("essentials.invsee.modify")
|| invOwner.isAuthorized("essentials.invsee.preventmodify")
|| !invOwner.isOnline()))
{
event.setCancelled(true);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
}
}
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.ENDER_CHEST)
{
final User user = ess.getUser((Player)event.getWhoClicked());
if (user.isEnderSee() && (!user.isAuthorized("essentials.enderchest.modify")))
{
event.setCancelled(true);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
}
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.WORKBENCH)
2012-12-19 03:57:12 +00:00
{
User user = ess.getUser((Player)event.getWhoClicked());
2012-12-19 03:57:12 +00:00
if (user.isRecipeSee())
{
event.setCancelled(true);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
2012-12-19 03:57:12 +00:00
}
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.CHEST && top.getSize() == 9)
{
final User user = ess.getUser((Player)event.getWhoClicked());
2013-01-01 19:34:32 +00:00
final InventoryHolder invHolder = top.getHolder();
2013-01-01 19:48:08 +00:00
if (invHolder != null && invHolder instanceof HumanEntity && user.isInvSee())
2013-01-01 18:39:23 +00:00
{
2013-01-01 19:48:08 +00:00
event.setCancelled(true);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
2013-01-01 18:39:23 +00:00
}
}
2014-02-09 21:51:18 +00:00
if (refreshPlayer != null)
{
final Player player = refreshPlayer;
ess.scheduleSyncDelayedTask(new Runnable()
{
@Override
public void run()
{
player.updateInventory();
}
}, 1);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onInventoryCloseEvent(final InventoryCloseEvent event)
{
2014-02-09 21:51:18 +00:00
Player refreshPlayer = null;
2013-01-01 18:39:23 +00:00
final Inventory top = event.getView().getTopInventory();
final InventoryType type = top.getType();
if (type == InventoryType.PLAYER)
{
final User user = ess.getUser((Player)event.getPlayer());
user.setInvSee(false);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.ENDER_CHEST)
{
final User user = ess.getUser((Player)event.getPlayer());
user.setEnderSee(false);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.WORKBENCH)
2012-12-19 03:57:12 +00:00
{
final User user = ess.getUser((Player)event.getPlayer());
if (user.isRecipeSee())
2012-12-19 03:57:12 +00:00
{
user.setRecipeSee(false);
event.getView().getTopInventory().clear();
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
2012-12-19 03:57:12 +00:00
}
}
2013-01-01 18:39:23 +00:00
else if (type == InventoryType.CHEST && top.getSize() == 9)
{
2013-01-01 19:34:32 +00:00
final InventoryHolder invHolder = top.getHolder();
if (invHolder != null && invHolder instanceof HumanEntity)
{
final User user = ess.getUser((Player)event.getPlayer());
2013-01-01 19:34:32 +00:00
user.setInvSee(false);
2014-02-09 21:51:18 +00:00
refreshPlayer = user.getBase();
2013-01-01 19:34:32 +00:00
}
2013-01-01 18:39:23 +00:00
}
2014-02-09 21:51:18 +00:00
if (refreshPlayer != null)
{
final Player player = refreshPlayer;
ess.scheduleSyncDelayedTask(new Runnable()
{
@Override
public void run()
{
player.updateInventory();
}
}, 1);
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerFishEvent(final PlayerFishEvent event)
{
final User user = ess.getUser(event.getPlayer());
user.updateActivity(true);
}
2012-12-16 16:03:04 +00:00
}