[trunk] change the way we prevent jailed players teleporting, should fix conflict with nocheat

git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1197 e251c2fe-e539-e718-e476-b85c1f46cddb
This commit is contained in:
ementalo 2011-04-15 20:13:16 +00:00
parent 4bef593e2f
commit 77ad27a6ff

View file

@ -1,6 +1,7 @@
package com.earth2me.essentials; package com.earth2me.essentials;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import net.minecraft.server.InventoryPlayer; import net.minecraft.server.InventoryPlayer;
import org.bukkit.*; import org.bukkit.*;
@ -8,6 +9,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer; import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.*; import org.bukkit.event.player.*;
import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.player.PlayerLoginEvent.Result;
@ -21,7 +23,6 @@ public class EssentialsPlayerListener extends PlayerListener
private final Essentials parent; private final Essentials parent;
private EssentialsBlockListener essBlockListener = null; private EssentialsBlockListener essBlockListener = null;
public EssentialsPlayerListener(Essentials parent) public EssentialsPlayerListener(Essentials parent)
{ {
this.parent = parent; this.parent = parent;
@ -229,10 +230,18 @@ public class EssentialsPlayerListener extends PlayerListener
@Override @Override
public void onPlayerTeleport(PlayerTeleportEvent event) public void onPlayerTeleport(PlayerTeleportEvent event)
{ {
if (event.isCancelled()) return;
User user = User.get(event.getPlayer()); User user = User.get(event.getPlayer());
if (user.currentJail == null || user.currentJail.isEmpty()) if (user.currentJail == null || user.currentJail.isEmpty())
return; return;
event.setCancelled(true); try
{
event.setTo(Essentials.getJail().getJail(user.currentJail));
}
catch (Exception ex)
{
logger.log(Level.WARNING, "Error occured when trying to return player to jail.", ex);
}
user.sendMessage(ChatColor.RED + "You do the crime, you do the time."); user.sendMessage(ChatColor.RED + "You do the crime, you do the time.");
} }
@ -295,16 +304,19 @@ public class EssentialsPlayerListener extends PlayerListener
} }
if (sign.getLine(0).equals("§1[Heal]") && user.isAuthorized("essentials.signs.heal.use")) if (sign.getLine(0).equals("§1[Heal]") && user.isAuthorized("essentials.signs.heal.use"))
{ {
if (!sign.getLine(1).isEmpty()) { if (!sign.getLine(1).isEmpty())
{
String[] l1 = sign.getLine(1).split("[ :-]+"); String[] l1 = sign.getLine(1).split("[ :-]+");
boolean m1 = l1[0].matches("\\$[0-9]+"); boolean m1 = l1[0].matches("\\$[0-9]+");
int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]); int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]);
if (q1 < 1) { if (q1 < 1)
{
throw new Exception("Quantities must be greater than 0."); throw new Exception("Quantities must be greater than 0.");
} }
if (m1) if (m1)
{ {
if (user.getMoney() < q1) { if (user.getMoney() < q1)
{
throw new Exception("You do not have sufficient funds."); throw new Exception("You do not have sufficient funds.");
} }
user.takeMoney(q1); user.takeMoney(q1);
@ -313,7 +325,8 @@ public class EssentialsPlayerListener extends PlayerListener
else else
{ {
ItemStack i = ItemDb.get(l1[1], q1); ItemStack i = ItemDb.get(l1[1], q1);
if (!InventoryWorkaround.containsItem(user.getInventory(), true, i)) { if (!InventoryWorkaround.containsItem(user.getInventory(), true, i))
{
throw new Exception("You do not have " + q1 + "x " + l1[1] + "."); throw new Exception("You do not have " + q1 + "x " + l1[1] + ".");
} }
InventoryWorkaround.removeItem(user.getInventory(), true, i); InventoryWorkaround.removeItem(user.getInventory(), true, i);
@ -341,18 +354,21 @@ public class EssentialsPlayerListener extends PlayerListener
user.sendMessage("§7Balance: $" + user.getMoney()); user.sendMessage("§7Balance: $" + user.getMoney());
return; return;
} }
if (sign.getLine(0).equals("§1[Warp]")) if (sign.getLine(0).equals("§1[Warp]"))
{ {
if (!sign.getLine(3).isEmpty()) { if (!sign.getLine(3).isEmpty())
{
String[] l1 = sign.getLine(3).split("[ :-]+"); String[] l1 = sign.getLine(3).split("[ :-]+");
boolean m1 = l1[0].matches("\\$[0-9]+"); boolean m1 = l1[0].matches("\\$[0-9]+");
int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]); int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]);
if (q1 < 1) { if (q1 < 1)
{
throw new Exception("Quantities must be greater than 0."); throw new Exception("Quantities must be greater than 0.");
} }
if (m1) if (m1)
{ {
if (user.getMoney() < q1) { if (user.getMoney() < q1)
{
throw new Exception("You do not have sufficient funds."); throw new Exception("You do not have sufficient funds.");
} }
user.takeMoney(q1); user.takeMoney(q1);
@ -361,32 +377,37 @@ public class EssentialsPlayerListener extends PlayerListener
else else
{ {
ItemStack i = ItemDb.get(l1[1], q1); ItemStack i = ItemDb.get(l1[1], q1);
if (!InventoryWorkaround.containsItem(user.getInventory(), true, i)) { if (!InventoryWorkaround.containsItem(user.getInventory(), true, i))
{
throw new Exception("You do not have " + q1 + "x " + l1[1] + "."); throw new Exception("You do not have " + q1 + "x " + l1[1] + ".");
} }
InventoryWorkaround.removeItem(user.getInventory(), true, i); InventoryWorkaround.removeItem(user.getInventory(), true, i);
user.updateInventory(); user.updateInventory();
} }
} }
if (!sign.getLine(2).isEmpty()) { if (!sign.getLine(2).isEmpty())
if (sign.getLine(2).equals("§2Everyone")) { {
if (sign.getLine(2).equals("§2Everyone"))
{
user.teleportCooldown(); user.teleportCooldown();
user.warpTo(sign.getLine(1)); user.warpTo(sign.getLine(1));
return; return;
} }
if (user.getGroup().equalsIgnoreCase(sign.getLine(2))) { if (user.getGroup().equalsIgnoreCase(sign.getLine(2)))
{
user.teleportCooldown(); user.teleportCooldown();
user.warpTo(sign.getLine(1)); user.warpTo(sign.getLine(1));
return; return;
} }
} }
if (user.isAuthorized("essentials.signs.warp.use") && if (user.isAuthorized("essentials.signs.warp.use")
(!Essentials.getSettings().getPerWarpPermission() || user.isAuthorized("essentials.warp." + sign.getLine(1)))) { && (!Essentials.getSettings().getPerWarpPermission() || user.isAuthorized("essentials.warp." + sign.getLine(1))))
{
user.teleportCooldown(); user.teleportCooldown();
user.warpTo(sign.getLine(1)); user.warpTo(sign.getLine(1));
} }
return; return;
} }
} }
catch (Throwable ex) catch (Throwable ex)
{ {
@ -395,24 +416,29 @@ public class EssentialsPlayerListener extends PlayerListener
} }
@Override @Override
public void onPlayerEggThrow(PlayerEggThrowEvent event) { public void onPlayerEggThrow(PlayerEggThrowEvent event)
{
User user = User.get(event.getPlayer()); User user = User.get(event.getPlayer());
ItemStack is = new ItemStack(Material.EGG, 1); ItemStack is = new ItemStack(Material.EGG, 1);
if (user.hasUnlimited(is)) { if (user.hasUnlimited(is))
{
user.getInventory().addItem(is); user.getInventory().addItem(is);
user.updateInventory(); user.updateInventory();
} }
} }
@Override @Override
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
{
final User user = User.get(event.getPlayer()); final User user = User.get(event.getPlayer());
if (user.hasUnlimited(new ItemStack(event.getBucket()))) { if (user.hasUnlimited(new ItemStack(event.getBucket())))
{
event.getItemStack().setType(event.getBucket()); event.getItemStack().setType(event.getBucket());
Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(), Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(),
new Runnable() { new Runnable()
{
public void run() { public void run()
{
user.updateInventory(); user.updateInventory();
} }
}); });
@ -420,27 +446,43 @@ public class EssentialsPlayerListener extends PlayerListener
} }
@Override @Override
public void onPlayerAnimation(PlayerAnimationEvent event) { public void onPlayerAnimation(PlayerAnimationEvent event)
{
usePowertools(event); usePowertools(event);
} }
private void usePowertools(PlayerAnimationEvent event) { private void usePowertools(PlayerAnimationEvent event)
if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) { {
if (event.getAnimationType() != PlayerAnimationType.ARM_SWING)
{
return; return;
} }
User user = User.get(event.getPlayer()); User user = User.get(event.getPlayer());
ItemStack is = user.getItemInHand(); ItemStack is = user.getItemInHand();
if (is == null || is.getType() == Material.AIR) { if (is == null || is.getType() == Material.AIR)
{
return; return;
} }
String command = user.getPowertool(is); String command = user.getPowertool(is);
if (command == null || command.isEmpty()) { if (command == null || command.isEmpty())
{
return; return;
} }
if (command.matches(".*\\{player\\}.*")) { if (command.matches(".*\\{player\\}.*"))
{
//user.sendMessage("Click a player to use this command"); //user.sendMessage("Click a player to use this command");
return; return;
} }
user.getServer().dispatchCommand(user, command); if (command.startsWith("c:"))
{
for (Player p : server.getOnlinePlayers())
{
p.sendMessage(user.getDisplayName() + ":" + command.substring(2));
}
}
else
{
user.getServer().dispatchCommand(user, command);
}
} }
} }