Invsee now shows a live player inventory in a window, rather than cloning players inventory.

New Permission: essentials.invsee.modify - Player with this permission will be able to add/remove items from the other players inventory.
This commit is contained in:
KHobbits 2012-03-25 02:33:52 +01:00
parent 160c3f428c
commit b7221516dc
4 changed files with 41 additions and 84 deletions

View File

@ -20,6 +20,9 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.*; import org.bukkit.event.player.*;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@ -107,11 +110,6 @@ public class EssentialsPlayerListener implements Listener
{ {
user.toggleGodModeEnabled(); user.toggleGodModeEnabled();
} }
if (user.getSavedInventory() != null)
{
user.getInventory().setContents(user.getSavedInventory());
user.setSavedInventory(null);
}
user.updateActivity(false); user.updateActivity(false);
user.dispose(); user.dispose();
} }
@ -388,4 +386,26 @@ public class EssentialsPlayerListener implements Listener
event.setCancelled(true); event.setCancelled(true);
} }
} }
@EventHandler(priority = EventPriority.LOW)
public void onInventoryClickEvent(final InventoryClickEvent event)
{
if (event.getView().getTopInventory().getType() == InventoryType.PLAYER)
{
final User user = ess.getUser(event.getWhoClicked());
if (user.isInvSee() && !user.isAuthorized("essentials.invsee.modify"))
{
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onInventoryCloseEvent(final InventoryCloseEvent event)
{
if (event.getView().getTopInventory().getType() == InventoryType.PLAYER)
{
final User user = ess.getUser(event.getPlayer());
user.setInvSee(false);
}
}
} }

View File

@ -42,7 +42,6 @@ public abstract class UserData extends PlayerExtension implements IConf
lastHealTimestamp = _getLastHealTimestamp(); lastHealTimestamp = _getLastHealTimestamp();
jail = _getJail(); jail = _getJail();
mails = _getMails(); mails = _getMails();
savedInventory = _getSavedInventory();
teleportEnabled = getTeleportEnabled(); teleportEnabled = getTeleportEnabled();
ignoredPlayers = getIgnoredPlayers(); ignoredPlayers = getIgnoredPlayers();
godmode = _getGodModeEnabled(); godmode = _getGodModeEnabled();
@ -407,50 +406,17 @@ public abstract class UserData extends PlayerExtension implements IConf
mails.add(mail); mails.add(mail);
setMails(mails); setMails(mails);
} }
private ItemStack[] savedInventory;
private boolean invSee;
public ItemStack[] getSavedInventory()
{ public boolean isInvSee() {
return savedInventory; return invSee;
} }
private ItemStack[] _getSavedInventory() public void setInvSee(boolean set) {
{ invSee = set;
int size = config.getInt("inventory.size", 0);
if (size < 1 || (getInventory() != null && size > getInventory().getSize()))
{
return null;
}
ItemStack[] is = new ItemStack[size];
for (int i = 0; i < size; i++)
{
is[i] = config.getItemStack("inventory." + i);
}
return is;
}
public void setSavedInventory(ItemStack[] is)
{
if (is == null || is.length == 0)
{
savedInventory = null;
config.removeProperty("inventory");
}
else
{
savedInventory = is;
config.setProperty("inventory.size", is.length);
for (int i = 0; i < is.length; i++)
{
if (is[i] == null || is[i].getType() == Material.AIR)
{
continue;
}
config.setProperty("inventory." + i, is[i]);
}
}
config.save();
} }
private boolean teleportEnabled; private boolean teleportEnabled;
private boolean getTeleportEnabled() private boolean getTeleportEnabled()

View File

@ -17,41 +17,12 @@ public class Commandinvsee extends EssentialsCommand
@Override @Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length < 1)
if (args.length < 1 && user.getSavedInventory() == null)
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
User invUser = user; final User invUser = getPlayer(server, args, 0);
if (args.length == 1) user.setInvSee(true);
{ user.openInventory(invUser.getInventory());
invUser = getPlayer(server, args, 0);
}
if (invUser == user && user.getSavedInventory() != null)
{
invUser.getInventory().setContents(user.getSavedInventory());
user.setSavedInventory(null);
user.sendMessage(_("invRestored"));
throw new NoChargeException();
}
if (user.getSavedInventory() == null)
{
user.setSavedInventory(user.getInventory().getContents());
}
ItemStack[] invUserStack = invUser.getInventory().getContents();
final int userStackLength = user.getInventory().getContents().length;
if (invUserStack.length < userStackLength)
{
invUserStack = Arrays.copyOf(invUserStack, userStackLength);
}
if (invUserStack.length > userStackLength)
{
throw new Exception(_("invBigger"));
}
user.getInventory().setContents(invUserStack);
user.sendMessage(_("invSee", invUser.getDisplayName()));
user.sendMessage(_("invSeeHelp"));
throw new NoChargeException();
} }
} }

View File

@ -189,7 +189,7 @@ commands:
killall: killall:
description: Kill all mobs in a world. description: Kill all mobs in a world.
usage: /<command> [mobType] [radius] usage: /<command> [mobType] [radius]
aliases: [ekillall,butcher,ebutcher] aliases: [ekillall,butcher,ebutcher,mobkill,emobkill]
kittycannon: kittycannon:
description: Throw an exploding kitten at your opponent description: Throw an exploding kitten at your opponent
usage: /<command> usage: /<command>
@ -308,11 +308,11 @@ commands:
spawner: spawner:
description: Change the mob type of a spawner description: Change the mob type of a spawner
usage: /<command> <mob> usage: /<command> <mob>
aliases: [espawner] aliases: [espawner,changems,echangems]
spawnmob: spawnmob:
description: Spawns a mob. description: Spawns a mob.
usage: /<command> <mob>[:data][,<mount>[:data]] [amount] [player] usage: /<command> <mob>[:data][,<mount>[:data]] [amount] [player]
aliases: [espawnmob] aliases: [espawnmob,mob,emob]
sudo: sudo:
description: Make another user perform a command. description: Make another user perform a command.
usage: /<command> <player> <command [args]> usage: /<command> <player> <command [args]>