Added world change listener to avoid tool smuggle

This commit is contained in:
Robin Kupper
2011-10-04 18:11:46 +02:00
parent d2fa5f684d
commit a4cc39622d
3 changed files with 30 additions and 5 deletions
@@ -1,15 +1,18 @@
package de.diddiz.LogBlock;
import java.util.Map;
import java.util.Map.Entry;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.inventory.ItemStack;
import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
class LBToolListener extends PlayerListener
@@ -94,4 +97,20 @@ class LBToolListener extends PlayerListener
});
}
}
@Override
public void onPlayerChangedWorld(PlayerChangedWorldEvent event) {
final Player player = event.getPlayer();
final Session session = logblock.getSessions().get(player.getName().hashCode());
if (session != null)
for (final Entry<Tool, ToolData> entry : session.toolData.entrySet()) {
final Tool tool = entry.getKey();
final ToolData toolData = entry.getValue();
if (toolData.enabled && !logblock.hasPermission(player, "logblock.tools." + tool.name)) {
toolData.enabled = false;
player.getInventory().removeItem(new ItemStack(tool.item, 1));
player.sendMessage(ChatColor.GREEN + "Tool disabled.");
}
}
}
}
+6 -1
View File
@@ -181,6 +181,7 @@ public class LogBlock extends JavaPlugin
final LBEntityListener lbEntityListener = new LBEntityListener(this);
final LBToolListener lbToolListener = new LBToolListener(this);
pm.registerEvent(Type.PLAYER_INTERACT, lbToolListener, Priority.Normal, this);
pm.registerEvent(Type.PLAYER_CHANGED_WORLD, lbToolListener, Priority.Normal, this);
if (config.askRollbackAfterBan)
pm.registerEvent(Type.PLAYER_COMMAND_PREPROCESS, lbToolListener, Priority.Normal, this);
if (config.logBlockPlacings) {
@@ -298,10 +299,14 @@ public class LogBlock extends JavaPlugin
}
}
public Map<Integer, Session> getSessions() {
return sessions;
}
public Session getSession(String playerName) {
Session session = sessions.get(playerName.hashCode());
if (session == null) {
session = new Session(this);
session = new Session(this, getServer().getPlayer(playerName));
sessions.put(playerName.hashCode(), session);
}
return session;
+5 -4
View File
@@ -2,6 +2,7 @@ package de.diddiz.LogBlock;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.entity.Player;
public class Session
{
@@ -10,10 +11,10 @@ public class Session
public int page = 1;
public Map<Tool, ToolData> toolData;
Session(LogBlock logblock) {
Session(LogBlock logblock, Player player) {
toolData = new HashMap<Tool, ToolData>();
for (final Tool tool : logblock.getConfig().toolsByType.values())
toolData.put(tool, new ToolData(tool));
toolData.put(tool, new ToolData(tool, logblock, player));
}
}
@@ -23,8 +24,8 @@ class ToolData
QueryParams params;
ToolMode mode;
ToolData(Tool tool) {
enabled = tool.defaultEnabled;
ToolData(Tool tool, LogBlock logblock, Player player) {
enabled = tool.defaultEnabled && logblock.hasPermission(player, "logblock.tools." + tool.name);
params = tool.params.clone();
mode = tool.mode;
}