Prevent commands from being executed, except those whitelisted

This commit is contained in:
graywolf336 2014-01-20 14:40:03 -06:00
parent af58eea360
commit 392b1d94cc
6 changed files with 57 additions and 7 deletions

View File

@ -10,7 +10,6 @@ With this being version 3 of this plugin, a couple things have changed but the c
* Time can now be entered different formats, 3hours or 15mins or 4days * Time can now be entered different formats, 3hours or 15mins or 4days
* New language system * New language system
* New config system (per jail configs are going to make a come back) * New config system (per jail configs are going to make a come back)
* Only prisoners will be able to place/break blocks on the whitelist
* Items in the config use item names now, **not** the ids * Items in the config use item names now, **not** the ids
ToDo ToDo

View File

@ -7,6 +7,8 @@ public enum LangString {
BLOCKBREAKING ("actions"), BLOCKBREAKING ("actions"),
/** Section for when they place a block. */ /** Section for when they place a block. */
BLOCKPLACING ("actions"), BLOCKPLACING ("actions"),
/** Section for when they try to do a command that isn't whitelisted. */
COMMAND ("actions"),
//Jailing section //Jailing section

View File

@ -10,6 +10,9 @@ public enum Settings {
BLOCKPLACEWHITELIST("jailing.during.blockPlaceWhiteList"), BLOCKPLACEWHITELIST("jailing.during.blockPlaceWhiteList"),
COMMANDSONJAIL("jailing.jail.commands"), COMMANDSONJAIL("jailing.jail.commands"),
COMMANDSONRELEASE("jailing.release.commands"), COMMANDSONRELEASE("jailing.release.commands"),
COMMANDPENALTY("jailing.during.commandPenalty"),
COMMANDPROTECTION("jailing.during.commandProtection"),
COMMANDWHITELIST("jailing.during.commandWhitelist"),
COUNTDOWNTIMEOFFLINE("jailing.during.countDownTimeWhileOffline"), COUNTDOWNTIMEOFFLINE("jailing.during.countDownTimeWhileOffline"),
DEBUG("system.debug"), DEBUG("system.debug"),
DEFAULTJAIL("jailing.jail.defaultJail"), DEFAULTJAIL("jailing.jail.defaultJail"),

View File

@ -6,6 +6,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import com.graywolf336.jail.JailMain; import com.graywolf336.jail.JailMain;
import com.graywolf336.jail.Util; import com.graywolf336.jail.Util;
@ -45,13 +46,14 @@ public class ProtectionListener implements Listener {
new String[] { String.valueOf(TimeUnit.MINUTES.convert(add, TimeUnit.MILLISECONDS)), new String[] { String.valueOf(TimeUnit.MINUTES.convert(add, TimeUnit.MILLISECONDS)),
pl.getJailIO().getLanguageString(LangString.BLOCKBREAKING) }); pl.getJailIO().getLanguageString(LangString.BLOCKBREAKING) });
//Send the message and then stop the event from happening //Send the message
event.getPlayer().sendMessage(msg); event.getPlayer().sendMessage(msg);
event.setCancelled(true);
}catch (Exception e) { }catch (Exception e) {
pl.getLogger().severe("Block break penalty's time is in the wrong format, please fix."); pl.getLogger().severe("Block break penalty's time is in the wrong format, please fix.");
event.setCancelled(true);
} }
//Stop the event from happening, as the block wasn't in the whitelist
event.setCancelled(true);
} }
} }
} }
@ -83,15 +85,55 @@ public class ProtectionListener implements Listener {
new String[] { String.valueOf(TimeUnit.MINUTES.convert(add, TimeUnit.MILLISECONDS)), new String[] { String.valueOf(TimeUnit.MINUTES.convert(add, TimeUnit.MILLISECONDS)),
pl.getJailIO().getLanguageString(LangString.BLOCKPLACING) }); pl.getJailIO().getLanguageString(LangString.BLOCKPLACING) });
//Send the message and then stop the event from happening //Send the message
event.getPlayer().sendMessage(msg); event.getPlayer().sendMessage(msg);
event.setCancelled(true);
}catch (Exception e) { }catch (Exception e) {
pl.getLogger().severe("Block place penalty's time is in the wrong format, please fix."); pl.getLogger().severe("Block place penalty's time is in the wrong format, please fix.");
}
//Stop the event from happening, as the block wasn't in the whitelist
event.setCancelled(true);
}
}
}
}
@EventHandler(ignoreCancelled=true)
public void commandProtection(PlayerCommandPreprocessEvent event) {
//Before we check if the player is jailed, let's save a
//tiny bit of resources and check if this protection is enabled
if(pl.getConfig().getBoolean(Settings.COMMANDPROTECTION.getPath())) {
//Let's check if this player is jailed, if so then we continue
//otherwise we don't care about commands in here
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getName())) {
boolean match = false;
for(String whited : pl.getConfig().getStringList(Settings.COMMANDWHITELIST.getPath()))
if(event.getMessage().toLowerCase().startsWith(whited.toLowerCase()))
match = true;
//If no match found in the whitelist, then let's block this command.
if(!match) {
try {
long add = Util.getTime(pl.getConfig().getString(Settings.COMMANDPENALTY.getPath()));
pl.getJailManager().getPrisoner(event.getPlayer().getName()).addTime(add);
//Generate the protection message, provide the method with two arguments
//First is the time in minutes and second is the thing we are protecting against
String msg = pl.getJailIO().getLanguageString(LangString.PROTECTIONMESSAGE,
new String[] { String.valueOf(TimeUnit.MINUTES.convert(add, TimeUnit.MILLISECONDS)),
pl.getJailIO().getLanguageString(LangString.COMMAND) });
//Send the message
event.getPlayer().sendMessage(msg);
}catch (Exception e) {
pl.getLogger().severe("Command Protection penalty's time is in the wrong format, please fix.");
}
//Stop the command from happening, as it wasn't whitelisted
event.setCancelled(true); event.setCancelled(true);
} }
} }
} }
} }
} }
}

View File

@ -19,6 +19,9 @@ jailing:
blockPlacePenalty: 5m blockPlacePenalty: 5m
blockPlaceProtection: true blockPlaceProtection: true
blockPlaceWhiteList: ['crops', 'carrot', 'potato'] # these blocks can be placed at any time by prisoners blockPlaceWhiteList: ['crops', 'carrot', 'potato'] # these blocks can be placed at any time by prisoners
commandPenalty: 5m
commandProtection: true
commandWhitelist: ['/ping', '/list']
countDownTimeWhileOffline: false countDownTimeWhileOffline: false
explosionProtection: true explosionProtection: true
ignoreSleeping: true ignoreSleeping: true

View File

@ -2,6 +2,7 @@ language:
actions: actions:
blockbreaking: 'breaking a block' blockbreaking: 'breaking a block'
blockplacing: 'placing a block' blockplacing: 'placing a block'
command: 'trying to use a command'
general: general:
unknowncommand: '&cNo commands registered by the name of %0%.' unknowncommand: '&cNo commands registered by the name of %0%.'
nopermission: '&cInsufficient permission.' nopermission: '&cInsufficient permission.'