Clean up the denyCommands logic.
This commit is contained in:
parent
3ac432ac3d
commit
5f18ef6d0c
@ -1,5 +1,6 @@
|
||||
package com.massivecraft.factions.listeners;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@ -33,6 +34,7 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
@ -45,10 +47,13 @@ import com.massivecraft.factions.Const;
|
||||
import com.massivecraft.factions.FFlag;
|
||||
import com.massivecraft.factions.FPerm;
|
||||
import com.massivecraft.factions.FPlayer;
|
||||
import com.massivecraft.factions.FPlayerColl;
|
||||
import com.massivecraft.factions.Faction;
|
||||
import com.massivecraft.factions.Factions;
|
||||
import com.massivecraft.factions.Rel;
|
||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||
import com.massivecraft.mcore.ps.PS;
|
||||
import com.massivecraft.mcore.util.Txt;
|
||||
|
||||
public class FactionsListenerMain implements Listener
|
||||
{
|
||||
@ -69,6 +74,69 @@ public class FactionsListenerMain implements Listener
|
||||
Bukkit.getPluginManager().registerEvents(this, Factions.get());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// DENY COMMANDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void denyCommands(PlayerCommandPreprocessEvent event)
|
||||
{
|
||||
// If a player is trying to run a command ...
|
||||
Player player = event.getPlayer();
|
||||
FPlayer fplayer = FPlayerColl.get().get(player);
|
||||
|
||||
// ... and the player does not have adminmode ...
|
||||
if (fplayer.isUsingAdminMode()) return;
|
||||
|
||||
// ... clean up the command ...
|
||||
String command = event.getMessage();
|
||||
command = Txt.removeLeadingCommandDust(command);
|
||||
command = command.toLowerCase();
|
||||
command = command.trim();
|
||||
|
||||
if (fplayer.hasFaction() && fplayer.getFaction().getFlag(FFlag.PERMANENT) && containsCommand(command, ConfServer.permanentFactionMemberDenyCommands))
|
||||
{
|
||||
fplayer.msg("<b>You can't use \"<h>%s<b>\" as member of a permanent faction.", command);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
Rel rel = fplayer.getRelationToLocation();
|
||||
if (BoardColl.get().getFactionAt(fplayer.getCurrentChunk()).isNone()) return;
|
||||
|
||||
if (rel == Rel.NEUTRAL && containsCommand(command, ConfServer.territoryNeutralDenyCommands))
|
||||
{
|
||||
fplayer.msg("<b>You can't use \"<h>%s<b>\" in neutral territory.", command);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (rel == Rel.ENEMY && containsCommand(command, ConfServer.territoryEnemyDenyCommands))
|
||||
{
|
||||
fplayer.msg("<b>You can't use \"<h>%s<b>\" in enemy territory.", command);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean containsCommand(String needle, Collection<String> haystack)
|
||||
{
|
||||
if (needle == null) return false;
|
||||
needle = Txt.removeLeadingCommandDust(needle);
|
||||
needle = needle.toLowerCase();
|
||||
|
||||
for (String string : haystack)
|
||||
{
|
||||
if (string == null) continue;
|
||||
string = Txt.removeLeadingCommandDust(string);
|
||||
string = string.toLowerCase();
|
||||
|
||||
if (needle.startsWith(string)) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FLAG: MONSTERS
|
||||
// -------------------------------------------- //
|
||||
|
@ -88,6 +88,12 @@ public class TodoFactionsEntityListener implements Listener
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// PVP STUFF??
|
||||
// -------------------------------------------- //
|
||||
|
||||
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onEntityDamage(EntityDamageEvent event)
|
||||
{
|
||||
|
@ -1,8 +1,5 @@
|
||||
package com.massivecraft.factions.listeners;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -13,7 +10,6 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerKickEvent;
|
||||
@ -22,7 +18,6 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import com.massivecraft.factions.BoardColl;
|
||||
import com.massivecraft.factions.ConfServer;
|
||||
import com.massivecraft.factions.Const;
|
||||
import com.massivecraft.factions.FFlag;
|
||||
import com.massivecraft.factions.FPerm;
|
||||
import com.massivecraft.factions.FPlayer;
|
||||
import com.massivecraft.factions.FPlayerColl;
|
||||
@ -204,64 +199,7 @@ public class TodoFactionsPlayerListener implements Listener
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
||||
{
|
||||
// Get the player
|
||||
Player player = event.getPlayer();
|
||||
FPlayer me = FPlayerColl.get().get(player);
|
||||
|
||||
// With adminmode no commands are denied.
|
||||
if (me.isUsingAdminMode()) return;
|
||||
|
||||
// The full command is converted to lowercase and does include the slash in the front
|
||||
String fullCmd = event.getMessage().toLowerCase();
|
||||
|
||||
if (me.hasFaction() && me.getFaction().getFlag(FFlag.PERMANENT) && isCommandInList(fullCmd, ConfServer.permanentFactionMemberDenyCommands))
|
||||
{
|
||||
me.msg("<b>You can't use the command \""+fullCmd+"\" because you are in a permanent faction.");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
Rel rel = me.getRelationToLocation();
|
||||
if (BoardColl.get().getFactionAt(me.getCurrentChunk()).isNone()) return;
|
||||
|
||||
if (rel == Rel.NEUTRAL && isCommandInList(fullCmd, ConfServer.territoryNeutralDenyCommands))
|
||||
{
|
||||
me.msg("<b>You can't use the command \""+fullCmd+"\" in neutral territory.");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (rel == Rel.ENEMY && isCommandInList(fullCmd, ConfServer.territoryEnemyDenyCommands))
|
||||
{
|
||||
me.msg("<b>You can't use the command \""+fullCmd+"\" in enemy territory.");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
private static boolean isCommandInList(String fullCmd, Collection<String> strings)
|
||||
{
|
||||
String shortCmd = fullCmd.substring(1);
|
||||
Iterator<String> iter = strings.iterator();
|
||||
while (iter.hasNext())
|
||||
{
|
||||
String cmdCheck = iter.next();
|
||||
if (cmdCheck == null)
|
||||
{
|
||||
iter.remove();
|
||||
continue;
|
||||
}
|
||||
cmdCheck = cmdCheck.toLowerCase();
|
||||
if (fullCmd.startsWith(cmdCheck)) return true;
|
||||
if (shortCmd.startsWith(cmdCheck)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onPlayerKick(PlayerKickEvent event)
|
||||
|
Loading…
Reference in New Issue
Block a user