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.Listener;
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.*;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
@ -107,11 +110,6 @@ public class EssentialsPlayerListener implements Listener
{
user.toggleGodModeEnabled();
}
if (user.getSavedInventory() != null)
{
user.getInventory().setContents(user.getSavedInventory());
user.setSavedInventory(null);
}
user.updateActivity(false);
user.dispose();
}
@ -388,4 +386,26 @@ public class EssentialsPlayerListener implements Listener
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();
jail = _getJail();
mails = _getMails();
savedInventory = _getSavedInventory();
teleportEnabled = getTeleportEnabled();
ignoredPlayers = getIgnoredPlayers();
godmode = _getGodModeEnabled();
@ -407,50 +406,17 @@ public abstract class UserData extends PlayerExtension implements IConf
mails.add(mail);
setMails(mails);
}
private ItemStack[] savedInventory;
public ItemStack[] getSavedInventory()
{
return savedInventory;
private boolean invSee;
public boolean isInvSee() {
return invSee;
}
private ItemStack[] _getSavedInventory()
{
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();
public void setInvSee(boolean set) {
invSee = set;
}
private boolean teleportEnabled;
private boolean getTeleportEnabled()

View File

@ -17,41 +17,12 @@ public class Commandinvsee extends EssentialsCommand
@Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
if (args.length < 1 && user.getSavedInventory() == null)
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
User invUser = user;
if (args.length == 1)
{
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();
final User invUser = getPlayer(server, args, 0);
user.setInvSee(true);
user.openInventory(invUser.getInventory());
}
}

View File

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