forked from LogBlock/LogBlock
Added world change listener to avoid tool smuggle
This commit is contained in:
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user