mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-01-01 05:18:00 +01:00
+ Added the Knockback check
+ Added an "opbyconsoleonly" option = Fixed an issue with the RunFly check and vines = Fixed an issue with the WaterWalk check and blocks above the player - Removed the fly tracker because of all its issues
This commit is contained in:
parent
8546a649ed
commit
44f4da5080
@ -301,6 +301,10 @@
|
||||
- nocheatplus.checks.fight.instantheal
|
||||
Don't prevent the player from accellerating their health generation by
|
||||
food saturation
|
||||
|
||||
- nocheatplus.checks.fight.knockback
|
||||
Don't prevent the player from doing knockbacks when it's not technically
|
||||
possible
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -409,18 +413,6 @@
|
||||
config.yml file. It is further split into logical sections
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
----------------------------- CLIENT MODS Section ------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Everything that in has to do with the client mods can be found at this part of
|
||||
the config.yml.
|
||||
|
||||
allow:
|
||||
|
||||
Allow all your players to use all the client mods (Zombe, CJB, Rei's Minimap,
|
||||
Minecraft AutoMap and Smart Moving).
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-------------------------------- LOGGING Section -------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
@ -476,6 +468,22 @@
|
||||
version to version. This is deactivated by default.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
---------------------------- MISCELLANEOUS Section -----------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Everything that in has nothing to do with the other categories
|
||||
|
||||
allowclientmods:
|
||||
|
||||
Allow all your players to use all the client mods (Zombe, CJB, Rei's Minimap,
|
||||
Minecraft AutoMap and Smart Moving).
|
||||
|
||||
opbyconsoleonly:
|
||||
|
||||
Only allow the commands /op and /deop to be executed by the console.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-------------------------------- CHECKS Section --------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
@ -641,21 +649,6 @@
|
||||
fall distance in blocks that the player tried to avoid. It gets
|
||||
increased every time that the player fails the check, and decreased
|
||||
over time if the player doesn't fail the check.
|
||||
|
||||
TRACKER:
|
||||
This is an entire subsection dedicated to a recently introduced check
|
||||
specially designed to prevent players from staying in the air longer
|
||||
than a defined value.
|
||||
|
||||
active:
|
||||
Should players get checked for this type of movement related hacks at
|
||||
all. If deactivated, player may stay in the air without being noticed
|
||||
by NoCheat+.
|
||||
|
||||
actions:
|
||||
What should happen if a player tries to stay too much time in the air.
|
||||
Default is to kick the player. The Violation Level is the time the
|
||||
player has spent in the air minus the maximum time allowed (6 seconds).
|
||||
|
||||
FLYING:
|
||||
This is an entire subsection dedicated to the "moving.flying" check.
|
||||
@ -1240,10 +1233,30 @@
|
||||
actions:
|
||||
What should happen if the player fails this check. Default is to not
|
||||
allow the health regeneration ("cancel" the regeneration) and log a
|
||||
message. The Violation LEvel (VL) for this check is the number of
|
||||
message. The Violation Level (VL) for this check is the number of
|
||||
seconds that the player tried to skip while regenerating health. It
|
||||
gets reduced whenever the player regenerates health while obeying the
|
||||
normal regeneration times.
|
||||
|
||||
|
||||
7) KNOCKBACK:
|
||||
|
||||
Players may send sprint packets to the server just before attacking an
|
||||
entity in order to do a knockback on this entity. This check will try to
|
||||
identify players doing this.
|
||||
|
||||
active:
|
||||
Should players be checked for this behavior.
|
||||
|
||||
interval:
|
||||
The minimal interval in milliseconds to enable sprinting before
|
||||
attacking an entity (50 milliseconds is a good default value).
|
||||
|
||||
actions:
|
||||
What should happen if the player fails this check. Default is to not
|
||||
allow the player to attack the entity ("cancel" the attack) and log a
|
||||
message. The Violation Level (VL) for this check is difference between
|
||||
the interval defined in the configuration file and the real interval.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -103,6 +103,8 @@ permissions:
|
||||
description: Allow a player to not take damage by exploiting a design flaw in Minecraft
|
||||
nocheatplus.checks.fight.instantheal:
|
||||
description: Allow a player to artificially speed up his health regeneration
|
||||
nocheatplus.checks.fight.knockback:
|
||||
description: Allow a player to do knockbacks when it's not technically possible
|
||||
nocheatplus.checks.inventory:
|
||||
description: Allow the player to bypass all inventory checks
|
||||
children:
|
||||
|
2
pom.xml
2
pom.xml
@ -4,7 +4,7 @@
|
||||
|
||||
<!-- Informations -->
|
||||
<name>NoCheatPlus</name>
|
||||
<version>3.5.6</version>
|
||||
<version>3.5.7</version>
|
||||
<description>Detect and fight the exploitation of various flaws/bugs in Minecraft.</description>
|
||||
<url>http://dev.bukkit.org/server-mods/nocheatplus</url>
|
||||
|
||||
|
@ -188,8 +188,7 @@ public class NoCheatPlus extends JavaPlugin implements Listener {
|
||||
ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
public void onPlayerJoin(final PlayerJoinEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
if (conf.getConfigurationCacheForWorld(player.getWorld().getName()).getConfiguration()
|
||||
.getBoolean(ConfPaths.CLIENT_MODS_ALLOW))
|
||||
if (getConfig(player).getConfiguration().getBoolean(ConfPaths.MISCELLANEOUS_ALLOWCLIENTMODS))
|
||||
return;
|
||||
String message = "";
|
||||
// Disable Zombe's fly mod
|
||||
|
@ -7,6 +7,7 @@ import net.minecraft.server.Block;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -170,8 +171,8 @@ public class CheckUtil {
|
||||
|
||||
if (!isInGround(result))
|
||||
// Original location: X, Z (allow standing in walls this time)
|
||||
if (isSolid(types[world.getBlockTypeIdAt(Location.locToBlock(location.x), Location.locToBlock(location.y),
|
||||
Location.locToBlock(location.z))]))
|
||||
if (isSolid(getType(world, Location.locToBlock(location.x), Location.locToBlock(location.y),
|
||||
Location.locToBlock(location.z))))
|
||||
result |= INGROUND;
|
||||
|
||||
return result;
|
||||
@ -192,16 +193,16 @@ public class CheckUtil {
|
||||
|
||||
// First we need to know about the block itself, the block
|
||||
// below it and the block above it
|
||||
final int top = types[world.getBlockTypeIdAt(x, y + 1, z)];
|
||||
final int base = types[world.getBlockTypeIdAt(x, y, z)];
|
||||
final int below = types[world.getBlockTypeIdAt(x, y - 1, z)];
|
||||
final int top = getType(world, x, y + 1, z);
|
||||
final int base = getType(world, x, y, z);
|
||||
final int below = getType(world, x, y - 1, z);
|
||||
|
||||
int type = 0;
|
||||
// Special case: Standing on a fence
|
||||
// Behave as if there is a block on top of the fence
|
||||
if (below == FENCE && base != FENCE && isNonSolid(top))
|
||||
type = INGROUND;
|
||||
else if (below != FENCE && isNonSolid(base) && types[world.getBlockTypeIdAt(x, y - 2, z)] == FENCE)
|
||||
else if (below != FENCE && isNonSolid(base) && getType(world, x, y - 2, z) == FENCE)
|
||||
type = ONGROUND;
|
||||
else if (isNonSolid(top))
|
||||
// Simplest (and most likely) case:
|
||||
@ -224,6 +225,28 @@ public class CheckUtil {
|
||||
return types[typeId];
|
||||
}
|
||||
|
||||
private static int getType(final World world, final int x, final int y, final int z) {
|
||||
return types[world.getBlockAt(x, y, z).getType() == Material.VINE && !isClimbable(world, x, y, z) ? 0 : world
|
||||
.getBlockTypeIdAt(x, y, z)];
|
||||
}
|
||||
|
||||
public static boolean isClimbable(final World world, final int x, final int y, final int z) {
|
||||
BlockFace attachedFace = null;
|
||||
if (world.getBlockAt(x, y, z).getData() == 0x1)
|
||||
attachedFace = BlockFace.WEST;
|
||||
else if (world.getBlockAt(x, y, z).getData() == 0x2)
|
||||
attachedFace = BlockFace.NORTH;
|
||||
else if (world.getBlockAt(x, y, z).getData() == 0x4)
|
||||
attachedFace = BlockFace.EAST;
|
||||
else if (world.getBlockAt(x, y, z).getData() == 0x8)
|
||||
attachedFace = BlockFace.SOUTH;
|
||||
if (attachedFace == null)
|
||||
return true;
|
||||
return isSolid(getType(world, world.getBlockAt(x, y, z).getRelative(attachedFace).getX(),
|
||||
world.getBlockAt(x, y, z).getRelative(attachedFace).getY(),
|
||||
world.getBlockAt(x, y, z).getRelative(attachedFace).getZ()));
|
||||
}
|
||||
|
||||
public static boolean isFood(final ItemStack item) {
|
||||
if (item == null)
|
||||
return false;
|
||||
@ -308,5 +331,4 @@ public class CheckUtil {
|
||||
else
|
||||
return (int) floor;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,6 +9,10 @@ import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
|
||||
/**
|
||||
* A check used to verify if the player isn't placing his blocks too quickly
|
||||
*
|
||||
*/
|
||||
public class FastBreakCheck extends BlockBreakCheck {
|
||||
|
||||
public FastBreakCheck(final NoCheatPlus plugin) {
|
||||
|
@ -7,6 +7,10 @@ import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.actions.ParameterName;
|
||||
import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
/**
|
||||
* A check used to verify if the player isn't breaking his blocks too quickly
|
||||
*
|
||||
*/
|
||||
public class FastPlaceCheck extends BlockPlaceCheck {
|
||||
|
||||
public FastPlaceCheck(final NoCheatPlus plugin) {
|
||||
|
@ -7,6 +7,10 @@ import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.actions.ParameterName;
|
||||
import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
/**
|
||||
* A check used to verify if the player isn't throwing projectiles too quickly
|
||||
*
|
||||
*/
|
||||
public class ProjectileCheck extends BlockPlaceCheck {
|
||||
|
||||
public ProjectileCheck(final NoCheatPlus plugin) {
|
||||
|
@ -5,6 +5,10 @@ import java.util.Arrays;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlus;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
|
||||
/**
|
||||
* A check used to limit the number of new players allowed to join in a specified time frame
|
||||
*
|
||||
*/
|
||||
public class ArrivalsLimitCheck extends ChatCheck {
|
||||
|
||||
// Used to know if the cooldown is enabled and since when
|
||||
|
@ -7,9 +7,11 @@ import java.util.List;
|
||||
import me.neatmonster.nocheatplus.EventManager;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlus;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.config.ConfPaths;
|
||||
import me.neatmonster.nocheatplus.config.ConfigurationCacheStore;
|
||||
import me.neatmonster.nocheatplus.config.Permissions;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -96,6 +98,19 @@ public class ChatCheckListener implements Listener, EventManager {
|
||||
@EventHandler(
|
||||
priority = EventPriority.LOWEST)
|
||||
public void commandPreprocess(final PlayerCommandPreprocessEvent event) {
|
||||
|
||||
// If OP by console only is enabled, prevent the op/deop commands
|
||||
// to be used by a player who is OP or has the required permissions
|
||||
if (plugin.getConfig(event.getPlayer()).getConfiguration().getBoolean(ConfPaths.MISCELLANEOUS_OPBYCONSOLEONLY)
|
||||
&& (event.getMessage().startsWith("/op")
|
||||
&& (event.getPlayer().isOp() || event.getPlayer().hasPermission("bukkit.command.op.give")) || event
|
||||
.getMessage().startsWith("/deop")
|
||||
&& (event.getPlayer().isOp() || event.getPlayer().hasPermission("bukkit.command.op.take")))) {
|
||||
event.getPlayer().sendMessage(ChatColor.RED + "This command can be executed from the console!");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// This type of event is derived from PlayerChatEvent, therefore
|
||||
// just treat it like that
|
||||
chat(event);
|
||||
@ -115,6 +130,12 @@ public class ChatCheckListener implements Listener, EventManager {
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* We listen to PlayerJoin events for the nopwnage check
|
||||
*
|
||||
* @param event
|
||||
* The PlayerJoin Event
|
||||
*/
|
||||
@EventHandler(
|
||||
priority = EventPriority.LOWEST)
|
||||
public void join(final PlayerJoinEvent event) {
|
||||
@ -128,6 +149,12 @@ public class ChatCheckListener implements Listener, EventManager {
|
||||
noPwnageCheck.handleJoin(player, data, cc);
|
||||
}
|
||||
|
||||
/**
|
||||
* We listen to PlayerLogin events for the arrivalslimit check
|
||||
*
|
||||
* @param event
|
||||
* The PlayerLogin Event
|
||||
*/
|
||||
@EventHandler(
|
||||
ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
public void login(final PlayerLoginEvent event) {
|
||||
|
@ -13,6 +13,10 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* A check used to verify if players aren't spam bots
|
||||
*
|
||||
*/
|
||||
public class NoPwnageCheck extends ChatCheck {
|
||||
private String lastBanCausingMessage;
|
||||
private long lastBanCausingMessageTime;
|
||||
@ -163,6 +167,14 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
return cancel;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to generate a captcha
|
||||
*
|
||||
* @param cc
|
||||
* The ChatConfig
|
||||
* @return
|
||||
* The captcha generated
|
||||
*/
|
||||
private String generateCaptcha(final ChatConfig cc) {
|
||||
|
||||
final StringBuilder b = new StringBuilder();
|
||||
@ -213,6 +225,18 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
data.commandsHaveBeenRun = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function return the minimum between the 3 Integers
|
||||
*
|
||||
* @param a
|
||||
* The first Integer
|
||||
* @param b
|
||||
* The second Integer
|
||||
* @param c
|
||||
* The third Integer
|
||||
* @return
|
||||
* The minimum
|
||||
*/
|
||||
private int minimum(final int a, final int b, final int c) {
|
||||
int mi;
|
||||
|
||||
@ -224,6 +248,18 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
return mi;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function executes the commands defined in the configuration
|
||||
*
|
||||
* @param player
|
||||
* The Player
|
||||
* @param reason
|
||||
* The reason
|
||||
* @param data
|
||||
* The ChatData
|
||||
* @param cc
|
||||
* The ChatConfig
|
||||
*/
|
||||
private void runCommands(final NoCheatPlusPlayer player, final String reason, final ChatData data,
|
||||
final ChatConfig cc) {
|
||||
data.reason = reason;
|
||||
@ -235,6 +271,16 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to know if two messages are similar
|
||||
*
|
||||
* @param message1
|
||||
* The first message
|
||||
* @param message2
|
||||
* The second message
|
||||
* @return
|
||||
* true if the messages are similar, false otherwise
|
||||
*/
|
||||
private boolean similar(final String message1, final String message2) {
|
||||
return message1 != null && message2 != null
|
||||
&& stringDifference(message1, message2) < 1 + message1.length() / 10;
|
||||
@ -283,6 +329,12 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
return d[n][m];
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to warn the other player
|
||||
*
|
||||
* @param player
|
||||
* The Player
|
||||
*/
|
||||
private void warnOthers(final NoCheatPlusPlayer player) {
|
||||
plugin.getServer().broadcastMessage(
|
||||
ChatColor.YELLOW + player.getName() + ChatColor.DARK_RED + " has set off the autoban!");
|
||||
@ -290,6 +342,12 @@ public class NoPwnageCheck extends ChatCheck {
|
||||
ChatColor.DARK_RED + " Please do not say anything similar to what the user said!");
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is used to warn the player
|
||||
*
|
||||
* @param player
|
||||
* The Player
|
||||
*/
|
||||
private void warnPlayer(final NoCheatPlusPlayer player) {
|
||||
player.sendMessage(player.getConfigurationStore().getConfiguration().getString(ConfPaths.LOGGING_PREFIX)
|
||||
+ ChatColor.DARK_RED + "Our system has detected unusual bot activities coming from you.");
|
||||
|
@ -8,6 +8,7 @@ import me.neatmonster.nocheatplus.EventManager;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlus;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.config.ConfigurationCacheStore;
|
||||
import me.neatmonster.nocheatplus.config.Permissions;
|
||||
|
||||
import org.bukkit.craftbukkit.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
@ -23,6 +24,7 @@ import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
|
||||
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
import org.bukkit.event.player.PlayerToggleSprintEvent;
|
||||
|
||||
/**
|
||||
* Central location to listen to events that are
|
||||
@ -31,7 +33,7 @@ import org.bukkit.event.player.PlayerAnimationEvent;
|
||||
*/
|
||||
public class FightCheckListener implements Listener, EventManager {
|
||||
|
||||
private final List<FightCheck> checks = new ArrayList<FightCheck>(4);
|
||||
private final List<FightCheck> checks = new ArrayList<FightCheck>(5);
|
||||
|
||||
private final GodmodeCheck godmodeCheck;
|
||||
private final InstanthealCheck instanthealCheck;
|
||||
@ -44,6 +46,7 @@ public class FightCheckListener implements Listener, EventManager {
|
||||
checks.add(new NoswingCheck(plugin));
|
||||
checks.add(new DirectionCheck(plugin));
|
||||
checks.add(new ReachCheck(plugin));
|
||||
checks.add(new KnockbackCheck(plugin));
|
||||
|
||||
godmodeCheck = new GodmodeCheck(plugin);
|
||||
instanthealCheck = new InstanthealCheck(plugin);
|
||||
@ -177,6 +180,8 @@ public class FightCheckListener implements Listener, EventManager {
|
||||
s.add("fight.godmode");
|
||||
if (f.instanthealCheck)
|
||||
s.add("fight.instantHeal");
|
||||
if (f.knockbackCheck)
|
||||
s.add("fight.knockback");
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -249,4 +254,26 @@ public class FightCheckListener implements Listener, EventManager {
|
||||
if (cancelled)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* We listen to the PlayerToggleSprint event for the
|
||||
* knockback check
|
||||
*
|
||||
* @param event
|
||||
* The PlayerToggleSprintEvent
|
||||
*/
|
||||
@EventHandler(
|
||||
ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
public void sprint(final PlayerToggleSprintEvent event) {
|
||||
|
||||
final NoCheatPlusPlayer player = plugin.getPlayer(event.getPlayer());
|
||||
final FightConfig cc = FightCheck.getConfig(player);
|
||||
|
||||
if (!cc.knockbackCheck || player.hasPermission(Permissions.FIGHT_KNOCKBACK))
|
||||
return;
|
||||
|
||||
// Store when the player has started sprinting
|
||||
final FightData data = FightCheck.getData(player);
|
||||
data.sprint = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,10 @@ public class FightConfig implements ConfigItem {
|
||||
public final boolean instanthealCheck;
|
||||
public final ActionList instanthealActions;
|
||||
|
||||
public final boolean knockbackCheck;
|
||||
public final long knockbackInterval;
|
||||
public final ActionList knockbackActions;
|
||||
|
||||
public FightConfig(final NoCheatPlusConfiguration data) {
|
||||
|
||||
directionCheck = data.getBoolean(ConfPaths.FIGHT_DIRECTION_CHECK);
|
||||
@ -58,5 +62,9 @@ public class FightConfig implements ConfigItem {
|
||||
|
||||
instanthealCheck = data.getBoolean(ConfPaths.FIGHT_INSTANTHEAL_CHECK);
|
||||
instanthealActions = data.getActionList(ConfPaths.FIGHT_INSTANTHEAL_ACTIONS, Permissions.FIGHT_INSTANTHEAL);
|
||||
|
||||
knockbackCheck = data.getBoolean(ConfPaths.FIGHT_KNOCKBACK_CHECK);
|
||||
knockbackInterval = data.getLong(ConfPaths.FIGHT_KNOCKBACK_INTERVAL);
|
||||
knockbackActions = data.getActionList(ConfPaths.FIGHT_KNOCKBACK_ACTIONS, Permissions.FIGHT_KNOCKBACK);
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ public class FightData implements DataItem {
|
||||
public int speedVL;
|
||||
public double godmodeVL;
|
||||
public double instanthealVL;
|
||||
public double knockbackVL;
|
||||
|
||||
// For checks that have penalty time
|
||||
public long directionLastViolationTime;
|
||||
@ -45,4 +46,7 @@ public class FightData implements DataItem {
|
||||
public long speedTime;
|
||||
public int speedAttackCount;
|
||||
|
||||
// Remember when the player has toggled his sprint mode
|
||||
public long sprint = 0L;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,61 @@
|
||||
package me.neatmonster.nocheatplus.checks.fight;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import me.neatmonster.nocheatplus.NoCheatPlus;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.actions.ParameterName;
|
||||
import me.neatmonster.nocheatplus.config.Permissions;
|
||||
import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
/**
|
||||
* A check used to verify if players aren't knockbacking other players when it's not technically possible
|
||||
*
|
||||
*/
|
||||
public class KnockbackCheck extends FightCheck {
|
||||
|
||||
public KnockbackCheck(final NoCheatPlus plugin) {
|
||||
super(plugin, "fight.knockback", Permissions.FIGHT_KNOCKBACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean check(final NoCheatPlusPlayer player, final FightData data, final FightConfig cc) {
|
||||
|
||||
boolean cancel = false;
|
||||
|
||||
// Check how long ago has the player started sprinting
|
||||
if (data.sprint > 0L && System.currentTimeMillis() - data.sprint < cc.knockbackInterval) {
|
||||
|
||||
// Player failed the check, but this is influenced by lag,
|
||||
// so don't do it if there was lag
|
||||
if (!plugin.skipCheck()) {
|
||||
// The violation level if the difference between the regular and the elapsed time
|
||||
final long delta = cc.knockbackInterval - System.currentTimeMillis() + data.sprint;
|
||||
// Increment the violation level
|
||||
data.knockbackVL += delta;
|
||||
// Increment the statisctics of the player
|
||||
incrementStatistics(player, Id.FI_KNOCKBACK, delta);
|
||||
}
|
||||
|
||||
// Execute whatever actions are associated with this check and the
|
||||
// violation level and find out if we should cancel the event
|
||||
cancel = executeActions(player, cc.knockbackActions, data.knockbackVL);
|
||||
}
|
||||
|
||||
return cancel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getParameter(final ParameterName wildcard, final NoCheatPlusPlayer player) {
|
||||
|
||||
if (wildcard == ParameterName.VIOLATIONS)
|
||||
return String.format(Locale.US, "%d", (int) getData(player).knockbackVL);
|
||||
else
|
||||
return super.getParameter(wildcard, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(final FightConfig cc) {
|
||||
return cc.knockbackCheck;
|
||||
}
|
||||
}
|
@ -7,6 +7,15 @@ import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.actions.ParameterName;
|
||||
import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
/**
|
||||
* The morePacketsVehiculeCheck will try to identify players that send more than
|
||||
* the usual amount of vehicule-move-packets to the server to be able to move
|
||||
* faster than normal, without getting caught by the other checks (flying/running).
|
||||
*
|
||||
* It monitors the number of packets sent to the server within 1 second and
|
||||
* compares it to the "legal" number of packets for that timeframe (22).
|
||||
*
|
||||
*/
|
||||
public class MorePacketsVehicleCheck extends MovingCheck {
|
||||
|
||||
// 20 would be for perfect internet connections, 22 is good enough
|
||||
|
@ -11,7 +11,6 @@ import me.neatmonster.nocheatplus.config.ConfigurationCacheStore;
|
||||
import me.neatmonster.nocheatplus.config.Permissions;
|
||||
import me.neatmonster.nocheatplus.data.PreciseLocation;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -45,7 +44,6 @@ public class MovingCheckListener implements Listener, EventManager {
|
||||
private final MorePacketsVehicleCheck morePacketsVehicleCheck;
|
||||
private final FlyingCheck flyingCheck;
|
||||
private final RunningCheck runningCheck;
|
||||
private final TrackerCheck trackerCheck;
|
||||
private final WaterWalkCheck waterWalkCheck;
|
||||
|
||||
private final NoCheatPlus plugin;
|
||||
@ -54,31 +52,10 @@ public class MovingCheckListener implements Listener, EventManager {
|
||||
|
||||
flyingCheck = new FlyingCheck(plugin);
|
||||
runningCheck = new RunningCheck(plugin);
|
||||
trackerCheck = new TrackerCheck(plugin);
|
||||
morePacketsCheck = new MorePacketsCheck(plugin);
|
||||
morePacketsVehicleCheck = new MorePacketsVehicleCheck(plugin);
|
||||
waterWalkCheck = new WaterWalkCheck(plugin);
|
||||
|
||||
// Schedule a new synchronized repeating task repeated 20 times/s.
|
||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
// Loop through all players
|
||||
for (final Player bukkitPlayer : Bukkit.getOnlinePlayers()) {
|
||||
|
||||
// Get some data about the player/config
|
||||
final NoCheatPlusPlayer player = plugin.getPlayer(bukkitPlayer);
|
||||
final MovingConfig cc = MovingCheck.getConfig(player);
|
||||
final MovingData data = MovingCheck.getData(player);
|
||||
|
||||
// Execute the check
|
||||
trackerCheck.check(player, data, cc);
|
||||
}
|
||||
}
|
||||
}, 1L, 1L);
|
||||
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@ -169,8 +146,6 @@ public class MovingCheckListener implements Listener, EventManager {
|
||||
s.add("moving.sneaking");
|
||||
if (m.nofallCheck)
|
||||
s.add("moving.nofall");
|
||||
if (m.trackerCheck)
|
||||
s.add("moving.tracker");
|
||||
if (m.waterWalkCheck)
|
||||
s.add("moving.waterwalk");
|
||||
} else
|
||||
@ -321,12 +296,8 @@ public class MovingCheckListener implements Listener, EventManager {
|
||||
@EventHandler
|
||||
public void quit(final PlayerQuitEvent event) {
|
||||
|
||||
final NoCheatPlusPlayer player = plugin.getPlayer(event.getPlayer());
|
||||
final MovingData data = MovingCheck.getData(player);
|
||||
|
||||
// Reset the variable
|
||||
data.fallingSince = 0L;
|
||||
|
||||
// If the player has buried himself, remove the blocks to prevent
|
||||
// him from respawning at the surface
|
||||
if (!event.getPlayer().hasPermission(Permissions.MOVING_RESPAWNTRICK)
|
||||
&& (event.getPlayer().getLocation().getBlock().getType() == Material.GRAVEL || event.getPlayer()
|
||||
.getLocation().getBlock().getType() == Material.SAND)) {
|
||||
|
@ -24,9 +24,6 @@ public class MovingConfig implements ConfigItem {
|
||||
public final int maxCooldown;
|
||||
public final ActionList actions;
|
||||
|
||||
public final boolean trackerCheck;
|
||||
public final ActionList trackerActions;
|
||||
|
||||
public final boolean allowFlying;
|
||||
public final double flyingSpeedLimitVertical;
|
||||
public final double flyingSpeedLimitHorizontal;
|
||||
@ -68,9 +65,6 @@ public class MovingConfig implements ConfigItem {
|
||||
maxCooldown = data.getInt(ConfPaths.MOVING_RUNFLY_MAXCOOLDOWN);
|
||||
actions = data.getActionList(ConfPaths.MOVING_RUNFLY_ACTIONS, Permissions.MOVING_RUNFLY);
|
||||
|
||||
trackerCheck = data.getBoolean(ConfPaths.MOVING_RUNFLY_TRACKER_CHECK);
|
||||
trackerActions = data.getActionList(ConfPaths.MOVING_RUNFLY_TRACKER_ACTIONS, Permissions.MOVING_FLYING);
|
||||
|
||||
allowFlying = data.getBoolean(ConfPaths.MOVING_RUNFLY_FLYING_ALLOWALWAYS);
|
||||
flyingSpeedLimitVertical = data.getInt(ConfPaths.MOVING_RUNFLY_FLYING_SPEEDLIMITVERTICAL) / 100D;
|
||||
flyingSpeedLimitHorizontal = data.getInt(ConfPaths.MOVING_RUNFLY_FLYING_SPEEDLIMITHORIZONTAL) / 100D;
|
||||
|
@ -45,9 +45,6 @@ public class MovingData implements DataItem {
|
||||
public float fallDistance;
|
||||
public float lastAddedFallDistance;
|
||||
|
||||
// Keep in mind since when the player in falling/jumping
|
||||
public long fallingSince = 0L;
|
||||
|
||||
// Is the player flying because of a plugin has modified his velocity
|
||||
public boolean velocityChanged = false;
|
||||
|
||||
@ -90,6 +87,9 @@ public class MovingData implements DataItem {
|
||||
public boolean fromOnOrInGround;
|
||||
public boolean toOnOrInGround;
|
||||
|
||||
// Store if the player had blocks above his head when he moved previously
|
||||
public boolean[] hadBlocksAbove = new boolean[5];
|
||||
|
||||
public Id statisticCategory = Id.MOV_RUNNING;
|
||||
|
||||
public void clearMorePacketsData() {
|
||||
@ -102,6 +102,11 @@ public class MovingData implements DataItem {
|
||||
fallDistance = 0;
|
||||
lastAddedFallDistance = 0;
|
||||
bunnyhopdelay = 0;
|
||||
fallingSince = 0;
|
||||
}
|
||||
|
||||
public void rotateWaterWalkData(final boolean aboveSolid) {
|
||||
for (int i = 0; i < hadBlocksAbove.length - 1; i++)
|
||||
hadBlocksAbove[i] = hadBlocksAbove[i + 1];
|
||||
hadBlocksAbove[hadBlocksAbove.length - 1] = aboveSolid;
|
||||
}
|
||||
}
|
||||
|
@ -1,86 +0,0 @@
|
||||
package me.neatmonster.nocheatplus.checks.moving;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import me.neatmonster.nocheatplus.NoCheatPlus;
|
||||
import me.neatmonster.nocheatplus.NoCheatPlusPlayer;
|
||||
import me.neatmonster.nocheatplus.actions.ParameterName;
|
||||
import me.neatmonster.nocheatplus.checks.CheckUtil;
|
||||
import me.neatmonster.nocheatplus.config.Permissions;
|
||||
import me.neatmonster.nocheatplus.data.PreciseLocation;
|
||||
import me.neatmonster.nocheatplus.data.Statistics.Id;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class TrackerCheck extends MovingCheck {
|
||||
|
||||
public TrackerCheck(final NoCheatPlus plugin) {
|
||||
super(plugin, "moving.tracker");
|
||||
}
|
||||
|
||||
public void check(final NoCheatPlusPlayer player, final MovingData data, final MovingConfig cc) {
|
||||
|
||||
final PreciseLocation location = new PreciseLocation();
|
||||
location.x = player.getPlayer().getLocation().getX();
|
||||
location.y = player.getPlayer().getLocation().getY();
|
||||
location.z = player.getPlayer().getLocation().getZ();
|
||||
final int type = CheckUtil.evaluateLocation(player.getPlayer().getWorld(), location);
|
||||
final boolean isLiquid = CheckUtil.isLiquid(type);
|
||||
|
||||
// Check if the player is on the ground
|
||||
if (player.getPlayer().getLocation().add(0, -1, 0).getBlock().getType() != Material.AIR)
|
||||
data.hasAlreadyBeenOnTheGround = true;
|
||||
|
||||
// Do not do the check if it's disabled, if flying is allowed, if the player is
|
||||
// allowed to fly because of its game mode, if he has the required permission,
|
||||
// if he is in water, on a ladder or in vines.
|
||||
if (!cc.trackerCheck || cc.allowFlying || player.getPlayer().getGameMode() == GameMode.CREATIVE
|
||||
|| player.getPlayer().getAllowFlight() || player.getPlayer().hasPermission(Permissions.MOVING_RUNFLY)
|
||||
|| player.getPlayer().hasPermission(Permissions.MOVING_FLYING) || isLiquid
|
||||
|| player.getPlayer().getLocation().getBlock().getType() == Material.LADDER
|
||||
|| player.getPlayer().getLocation().getBlock().getType() == Material.VINE
|
||||
|| player.getPlayer().getLocation().getY() < 0D) {
|
||||
data.fallingSince = 0L;
|
||||
return;
|
||||
}
|
||||
|
||||
// If the player isn't static or jumping
|
||||
if (Math.abs(player.getPlayer().getVelocity().getY()) > 0.1D && !data.velocityChanged) {
|
||||
|
||||
// Only do something if the player has already been on the ground
|
||||
if (!data.hasAlreadyBeenOnTheGround)
|
||||
return;
|
||||
|
||||
// The player is static/jumping, check if he was previously on the ground
|
||||
if (data.fallingSince == 0L)
|
||||
data.fallingSince = System.currentTimeMillis();
|
||||
|
||||
// Check if he has stayed too much time in the air (more than 6 seconds)
|
||||
else if (System.currentTimeMillis() - data.fallingSince > 6000L) {
|
||||
// He has, so increment the violation level and the statistics
|
||||
data.trackerVL += System.currentTimeMillis() - data.fallDistance - 6000L;
|
||||
incrementStatistics(player, Id.MOV_TRACKER, data.trackerVL);
|
||||
|
||||
// Execute whatever actions are associated with this check and the
|
||||
// violation level and find out if we should cancel the event
|
||||
executeActions(player, cc.trackerActions, data.trackerVL);
|
||||
}
|
||||
} else {
|
||||
// Reset the timer
|
||||
data.fallingSince = 0L;
|
||||
|
||||
// Reduce the violation level
|
||||
data.trackerVL *= 0.95;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getParameter(final ParameterName wildcard, final NoCheatPlusPlayer player) {
|
||||
|
||||
if (wildcard == ParameterName.VIOLATIONS)
|
||||
return String.format(Locale.US, "%d", (int) getData(player).trackerVL);
|
||||
else
|
||||
return super.getParameter(wildcard, player);
|
||||
}
|
||||
}
|
@ -13,6 +13,10 @@ import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
|
||||
/**
|
||||
* This check is used to verify that players aren't walking on water
|
||||
*
|
||||
*/
|
||||
public class WaterWalkCheck extends MovingCheck {
|
||||
|
||||
public WaterWalkCheck(final NoCheatPlus plugin) {
|
||||
@ -28,6 +32,15 @@ public class WaterWalkCheck extends MovingCheck {
|
||||
up.y = to.y + 1;
|
||||
up.z = to.z;
|
||||
|
||||
final PreciseLocation toAbove = new PreciseLocation();
|
||||
toAbove.x = to.x;
|
||||
toAbove.y = to.y + 2;
|
||||
toAbove.z = to.z;
|
||||
final PreciseLocation fromAbove = new PreciseLocation();
|
||||
fromAbove.x = from.x;
|
||||
fromAbove.y = from.y + 2;
|
||||
fromAbove.z = from.z;
|
||||
|
||||
// To know if a player "is in water" is useful
|
||||
final int fromType = CheckUtil.evaluateLocation(player.getPlayer().getWorld(), from);
|
||||
final int toType = CheckUtil.evaluateLocation(player.getPlayer().getWorld(), to);
|
||||
@ -37,6 +50,17 @@ public class WaterWalkCheck extends MovingCheck {
|
||||
final boolean toLiquid = CheckUtil.isLiquid(toType);
|
||||
final boolean upLiquid = CheckUtil.isLiquid(upType);
|
||||
|
||||
final boolean toAboveSolid = CheckUtil.isSolid(CheckUtil.getType(new Location(player.getPlayer().getWorld(),
|
||||
toAbove.x, toAbove.y, toAbove.z).getBlock().getTypeId()));
|
||||
final boolean fromAboveSolid = CheckUtil.isSolid(CheckUtil.getType(new Location(player.getPlayer().getWorld(),
|
||||
fromAbove.x, fromAbove.y, fromAbove.z).getBlock().getTypeId()));
|
||||
boolean aboveSolid = toAboveSolid || fromAboveSolid;
|
||||
final boolean save = aboveSolid;
|
||||
for (final boolean hadBlocksAbove : data.hadBlocksAbove)
|
||||
if (hadBlocksAbove)
|
||||
aboveSolid = true;
|
||||
data.rotateWaterWalkData(save);
|
||||
|
||||
final Block fromBlock = new Location(player.getPlayer().getWorld(), from.x, from.y, from.z).getBlock();
|
||||
|
||||
// Handle the issue with water streams
|
||||
@ -69,7 +93,8 @@ public class WaterWalkCheck extends MovingCheck {
|
||||
// Slowly reduce the level with each event
|
||||
data.waterWalkVL *= 0.95;
|
||||
|
||||
if (!slabsStairsFix && fromLiquid && toLiquid && !upLiquid && deltaY == 0D && deltaWithSurface < 0.8D) {
|
||||
if (!slabsStairsFix && fromLiquid && toLiquid && !upLiquid && !aboveSolid && deltaY == 0D
|
||||
&& deltaWithSurface < 0.8D) {
|
||||
// If the player is trying to move while being in water
|
||||
// Increment violation counter
|
||||
data.waterWalkVL += resultY;
|
||||
@ -81,7 +106,7 @@ public class WaterWalkCheck extends MovingCheck {
|
||||
// Was one of the actions a cancel? Then do it
|
||||
if (cancel)
|
||||
newToLocation = from;
|
||||
} else if (waterStreamsFix && fromLiquid && !toLiquid && (deltaX < 0.28D || deltaX > 0.31D)
|
||||
} else if (waterStreamsFix && fromLiquid && !toLiquid && !aboveSolid && (deltaX < 0.28D || deltaX > 0.31D)
|
||||
&& (deltaZ < 0.28D || deltaZ > 0.31D)) {
|
||||
// If the player is trying to jump while being in water
|
||||
// Increment violation counter
|
||||
|
@ -8,227 +8,229 @@ package me.neatmonster.nocheatplus.config;
|
||||
*/
|
||||
public abstract class ConfPaths {
|
||||
|
||||
private final static String CLIENT_MODS = "clientmods.";
|
||||
public final static String CLIENT_MODS_ALLOW = CLIENT_MODS + "allow";
|
||||
private static final String LOGGING = "logging.";
|
||||
public static final String LOGGING_ACTIVE = LOGGING + "active";
|
||||
public static final String LOGGING_PREFIX = LOGGING + "prefix";
|
||||
public static final String LOGGING_FILENAME = LOGGING + "filename";
|
||||
public static final String LOGGING_LOGTOFILE = LOGGING + "file";
|
||||
public static final String LOGGING_LOGTOCONSOLE = LOGGING + "console";
|
||||
public static final String LOGGING_LOGTOINGAMECHAT = LOGGING + "ingamechat";
|
||||
public static final String LOGGING_SHOWACTIVECHECKS = LOGGING + "showactivechecks";
|
||||
public static final String LOGGING_DEBUGMESSAGES = LOGGING + "debugmessages";
|
||||
|
||||
private final static String LOGGING = "logging.";
|
||||
public final static String LOGGING_ACTIVE = LOGGING + "active";
|
||||
public final static String LOGGING_PREFIX = LOGGING + "prefix";
|
||||
public final static String LOGGING_FILENAME = LOGGING + "filename";
|
||||
public final static String LOGGING_LOGTOFILE = LOGGING + "file";
|
||||
public final static String LOGGING_LOGTOCONSOLE = LOGGING + "console";
|
||||
public final static String LOGGING_LOGTOINGAMECHAT = LOGGING + "ingamechat";
|
||||
public final static String LOGGING_SHOWACTIVECHECKS = LOGGING + "showactivechecks";
|
||||
public final static String LOGGING_DEBUGMESSAGES = LOGGING + "debugmessages";
|
||||
private static final String MISCELLANEOUS = "miscellaneous.";
|
||||
public static final String MISCELLANEOUS_ALLOWCLIENTMODS = MISCELLANEOUS + "allowclientmods";
|
||||
public static final String MISCELLANEOUS_OPBYCONSOLEONLY = MISCELLANEOUS + "opbyconsoleonly";
|
||||
|
||||
private final static String CHECKS = "checks.";
|
||||
private static final String CHECKS = "checks.";
|
||||
|
||||
private final static String INVENTORY = CHECKS + "inventory.";
|
||||
private static final String INVENTORY = CHECKS + "inventory.";
|
||||
|
||||
private final static String INVENTORY_DROP = INVENTORY + "drop.";
|
||||
public final static String INVENTORY_DROP_CHECK = INVENTORY_DROP + "active";
|
||||
public final static String INVENTORY_DROP_TIMEFRAME = INVENTORY_DROP + "time";
|
||||
public final static String INVENTORY_DROP_LIMIT = INVENTORY_DROP + "limit";
|
||||
public final static String INVENTORY_DROP_ACTIONS = INVENTORY_DROP + "actions";
|
||||
private static final String INVENTORY_DROP = INVENTORY + "drop.";
|
||||
public static final String INVENTORY_DROP_CHECK = INVENTORY_DROP + "active";
|
||||
public static final String INVENTORY_DROP_TIMEFRAME = INVENTORY_DROP + "time";
|
||||
public static final String INVENTORY_DROP_LIMIT = INVENTORY_DROP + "limit";
|
||||
public static final String INVENTORY_DROP_ACTIONS = INVENTORY_DROP + "actions";
|
||||
|
||||
private static final String INVENTORY_INSTANTBOW = INVENTORY + "instantbow.";
|
||||
public final static String INVENTORY_INSTANTBOW_CHECK = INVENTORY_INSTANTBOW + "active";
|
||||
public static final String INVENTORY_INSTANTBOW_CHECK = INVENTORY_INSTANTBOW + "active";
|
||||
public static final String INVENTORY_INSTANTBOW_ACTIONS = INVENTORY_INSTANTBOW + "actions";
|
||||
|
||||
private static final String INVENTORY_INSTANTEAT = INVENTORY + "instanteat.";
|
||||
public final static String INVENTORY_INSTANTEAT_CHECK = INVENTORY_INSTANTEAT + "active";
|
||||
public static final String INVENTORY_INSTANTEAT_CHECK = INVENTORY_INSTANTEAT + "active";
|
||||
public static final String INVENTORY_INSTANTEAT_ACTIONS = INVENTORY_INSTANTEAT + "actions";
|
||||
|
||||
private final static String MOVING = CHECKS + "moving.";
|
||||
private static final String MOVING = CHECKS + "moving.";
|
||||
|
||||
private final static String MOVING_RUNFLY = MOVING + "runfly.";
|
||||
public final static String MOVING_RUNFLY_CHECK = MOVING_RUNFLY + "active";
|
||||
private static final String MOVING_RUNFLY = MOVING + "runfly.";
|
||||
public static final String MOVING_RUNFLY_CHECK = MOVING_RUNFLY + "active";
|
||||
|
||||
// These four are not automatically shown in the config
|
||||
public final static String MOVING_RUNFLY_WALKSPEED = MOVING_RUNFLY + "walkspeed";
|
||||
public final static String MOVING_RUNFLY_SNEAKSPEED = MOVING_RUNFLY + "sneakspeed";
|
||||
public final static String MOVING_RUNFLY_SWIMSPEED = MOVING_RUNFLY + "swimspeed";
|
||||
public final static String MOVING_RUNFLY_SPRINTSPEED = MOVING_RUNFLY + "sprintspeed";
|
||||
public static final String MOVING_RUNFLY_WALKSPEED = MOVING_RUNFLY + "walkspeed";
|
||||
public static final String MOVING_RUNFLY_SNEAKSPEED = MOVING_RUNFLY + "sneakspeed";
|
||||
public static final String MOVING_RUNFLY_SWIMSPEED = MOVING_RUNFLY + "swimspeed";
|
||||
public static final String MOVING_RUNFLY_SPRINTSPEED = MOVING_RUNFLY + "sprintspeed";
|
||||
|
||||
public final static String MOVING_RUNFLY_ALLOWFASTSNEAKING = MOVING_RUNFLY + "allowfastsneaking";
|
||||
public final static String MOVING_RUNFLY_MAXCOOLDOWN = MOVING_RUNFLY + "maxcooldown";
|
||||
public final static String MOVING_RUNFLY_ACTIONS = MOVING_RUNFLY + "actions";
|
||||
public static final String MOVING_RUNFLY_ALLOWFASTSNEAKING = MOVING_RUNFLY + "allowfastsneaking";
|
||||
public static final String MOVING_RUNFLY_MAXCOOLDOWN = MOVING_RUNFLY + "maxcooldown";
|
||||
public static final String MOVING_RUNFLY_ACTIONS = MOVING_RUNFLY + "actions";
|
||||
|
||||
public final static String MOVING_RUNFLY_CHECKNOFALL = MOVING_RUNFLY + "checknofall";
|
||||
public final static String MOVING_RUNFLY_NOFALLAGGRESSIVE = MOVING_RUNFLY + "nofallaggressivemode";
|
||||
public final static String MOVING_RUNFLY_NOFALLACTIONS = MOVING_RUNFLY + "nofallactions";
|
||||
public static final String MOVING_RUNFLY_CHECKNOFALL = MOVING_RUNFLY + "checknofall";
|
||||
public static final String MOVING_RUNFLY_NOFALLAGGRESSIVE = MOVING_RUNFLY + "nofallaggressivemode";
|
||||
public static final String MOVING_RUNFLY_NOFALLACTIONS = MOVING_RUNFLY + "nofallactions";
|
||||
|
||||
private final static String MOVING_RUNFLY_TRACKER = MOVING_RUNFLY + "tracker.";
|
||||
public final static String MOVING_RUNFLY_TRACKER_CHECK = MOVING_RUNFLY_TRACKER + "active";
|
||||
public final static String MOVING_RUNFLY_TRACKER_ACTIONS = MOVING_RUNFLY_TRACKER + "actions";
|
||||
|
||||
private final static String MOVING_RUNFLY_FLYING = MOVING_RUNFLY + "flying.";
|
||||
public final static String MOVING_RUNFLY_FLYING_ALLOWALWAYS = MOVING_RUNFLY_FLYING + "allowflyingalways";
|
||||
public final static String MOVING_RUNFLY_FLYING_ALLOWINCREATIVE = MOVING_RUNFLY_FLYING
|
||||
private static final String MOVING_RUNFLY_FLYING = MOVING_RUNFLY + "flying.";
|
||||
public static final String MOVING_RUNFLY_FLYING_ALLOWALWAYS = MOVING_RUNFLY_FLYING + "allowflyingalways";
|
||||
public static final String MOVING_RUNFLY_FLYING_ALLOWINCREATIVE = MOVING_RUNFLY_FLYING
|
||||
+ "allowflyingincreative";
|
||||
public final static String MOVING_RUNFLY_FLYING_SPEEDLIMITVERTICAL = MOVING_RUNFLY_FLYING
|
||||
public static final String MOVING_RUNFLY_FLYING_SPEEDLIMITVERTICAL = MOVING_RUNFLY_FLYING
|
||||
+ "flyingspeedlimitvertical";
|
||||
public final static String MOVING_RUNFLY_FLYING_SPEEDLIMITHORIZONTAL = MOVING_RUNFLY_FLYING
|
||||
public static final String MOVING_RUNFLY_FLYING_SPEEDLIMITHORIZONTAL = MOVING_RUNFLY_FLYING
|
||||
+ "flyingspeedlimithorizontal";
|
||||
public final static String MOVING_RUNFLY_FLYING_HEIGHTLIMIT = MOVING_RUNFLY_FLYING + "flyingheightlimit";
|
||||
public final static String MOVING_RUNFLY_FLYING_ACTIONS = MOVING_RUNFLY_FLYING + "actions";
|
||||
public static final String MOVING_RUNFLY_FLYING_HEIGHTLIMIT = MOVING_RUNFLY_FLYING + "flyingheightlimit";
|
||||
public static final String MOVING_RUNFLY_FLYING_ACTIONS = MOVING_RUNFLY_FLYING + "actions";
|
||||
|
||||
private final static String MOVING_MOREPACKETS = MOVING + "morepackets.";
|
||||
public final static String MOVING_MOREPACKETS_CHECK = MOVING_MOREPACKETS + "active";
|
||||
public final static String MOVING_MOREPACKETS_ACTIONS = MOVING_MOREPACKETS + "actions";
|
||||
private static final String MOVING_MOREPACKETS = MOVING + "morepackets.";
|
||||
public static final String MOVING_MOREPACKETS_CHECK = MOVING_MOREPACKETS + "active";
|
||||
public static final String MOVING_MOREPACKETS_ACTIONS = MOVING_MOREPACKETS + "actions";
|
||||
|
||||
private final static String MOVING_MOREPACKETSVEHICLE = MOVING + "morepacketsvehicle.";
|
||||
public final static String MOVING_MOREPACKETSVEHICLE_CHECK = MOVING_MOREPACKETSVEHICLE + "active";
|
||||
public final static String MOVING_MOREPACKETSVEHICLE_ACTIONS = MOVING_MOREPACKETSVEHICLE + "actions";
|
||||
private static final String MOVING_MOREPACKETSVEHICLE = MOVING + "morepacketsvehicle.";
|
||||
public static final String MOVING_MOREPACKETSVEHICLE_CHECK = MOVING_MOREPACKETSVEHICLE + "active";
|
||||
public static final String MOVING_MOREPACKETSVEHICLE_ACTIONS = MOVING_MOREPACKETSVEHICLE + "actions";
|
||||
|
||||
private final static String MOVING_WATERWALK = MOVING + "waterwalk.";
|
||||
public final static String MOVING_WATERWALK_CHECK = MOVING_WATERWALK + "active";
|
||||
public final static String MOVING_WATERWALK_ACTIONS = MOVING_WATERWALK + "actions";
|
||||
private static final String MOVING_WATERWALK = MOVING + "waterwalk.";
|
||||
public static final String MOVING_WATERWALK_CHECK = MOVING_WATERWALK + "active";
|
||||
public static final String MOVING_WATERWALK_ACTIONS = MOVING_WATERWALK + "actions";
|
||||
|
||||
private final static String BLOCKBREAK = CHECKS + "blockbreak.";
|
||||
private static final String BLOCKBREAK = CHECKS + "blockbreak.";
|
||||
|
||||
private final static String BLOCKBREAK_FASTBREAK = BLOCKBREAK + "fastbreak.";
|
||||
public final static String BLOCKBREAK_FASTBREAK_CHECK = BLOCKBREAK_FASTBREAK + "active";
|
||||
public final static String BLOCKBREAK_FASTBREAK_INTERVALSURVIVAL = BLOCKBREAK_FASTBREAK + "intervalsurvival";
|
||||
public final static String BLOCKBREAK_FASTBREAK_INTERVALCREATIVE = BLOCKBREAK_FASTBREAK + "intervalcreative";
|
||||
public final static String BLOCKBREAK_FASTBREAK_ACTIONS = BLOCKBREAK_FASTBREAK + "actions";
|
||||
private static final String BLOCKBREAK_FASTBREAK = BLOCKBREAK + "fastbreak.";
|
||||
public static final String BLOCKBREAK_FASTBREAK_CHECK = BLOCKBREAK_FASTBREAK + "active";
|
||||
public static final String BLOCKBREAK_FASTBREAK_INTERVALSURVIVAL = BLOCKBREAK_FASTBREAK + "intervalsurvival";
|
||||
public static final String BLOCKBREAK_FASTBREAK_INTERVALCREATIVE = BLOCKBREAK_FASTBREAK + "intervalcreative";
|
||||
public static final String BLOCKBREAK_FASTBREAK_ACTIONS = BLOCKBREAK_FASTBREAK + "actions";
|
||||
|
||||
private final static String BLOCKBREAK_REACH = BLOCKBREAK + "reach.";
|
||||
public final static String BLOCKBREAK_REACH_CHECK = BLOCKBREAK_REACH + "active";
|
||||
public final static String BLOCKBREAK_REACH_ACTIONS = BLOCKBREAK_REACH + "actions";
|
||||
private static final String BLOCKBREAK_REACH = BLOCKBREAK + "reach.";
|
||||
public static final String BLOCKBREAK_REACH_CHECK = BLOCKBREAK_REACH + "active";
|
||||
public static final String BLOCKBREAK_REACH_ACTIONS = BLOCKBREAK_REACH + "actions";
|
||||
|
||||
private final static String BLOCKBREAK_DIRECTION = BLOCKBREAK + "direction.";
|
||||
public final static String BLOCKBREAK_DIRECTION_CHECK = BLOCKBREAK_DIRECTION + "active";
|
||||
public final static String BLOCKBREAK_DIRECTION_PRECISION = BLOCKBREAK_DIRECTION + "precision";
|
||||
public final static String BLOCKBREAK_DIRECTION_PENALTYTIME = BLOCKBREAK_DIRECTION + "penaltytime";
|
||||
public final static String BLOCKBREAK_DIRECTION_ACTIONS = BLOCKBREAK_DIRECTION + "actions";
|
||||
private static final String BLOCKBREAK_DIRECTION = BLOCKBREAK + "direction.";
|
||||
public static final String BLOCKBREAK_DIRECTION_CHECK = BLOCKBREAK_DIRECTION + "active";
|
||||
public static final String BLOCKBREAK_DIRECTION_PRECISION = BLOCKBREAK_DIRECTION + "precision";
|
||||
public static final String BLOCKBREAK_DIRECTION_PENALTYTIME = BLOCKBREAK_DIRECTION + "penaltytime";
|
||||
public static final String BLOCKBREAK_DIRECTION_ACTIONS = BLOCKBREAK_DIRECTION + "actions";
|
||||
|
||||
private final static String BLOCKBREAK_NOSWING = BLOCKBREAK + "noswing.";
|
||||
private static final String BLOCKBREAK_NOSWING = BLOCKBREAK + "noswing.";
|
||||
public static final String BLOCKBREAK_NOSWING_CHECK = BLOCKBREAK_NOSWING + "active";
|
||||
public static final String BLOCKBREAK_NOSWING_ACTIONS = BLOCKBREAK_NOSWING + "actions";
|
||||
|
||||
private final static String BLOCKPLACE = CHECKS + "blockplace.";
|
||||
private static final String BLOCKPLACE = CHECKS + "blockplace.";
|
||||
|
||||
private final static String BLOCKPLACE_FASTPLACE = BLOCKPLACE + "fastplace.";
|
||||
public final static String BLOCKPLACE_FASTPLACE_CHECK = BLOCKPLACE_FASTPLACE + "active";
|
||||
public final static String BLOCKPLACE_FASTPLACE_INTERVAL = BLOCKPLACE_FASTPLACE + "interval";
|
||||
public final static String BLOCKPLACE_FASTPLACE_ACTIONS = BLOCKPLACE_FASTPLACE + "actions";
|
||||
private static final String BLOCKPLACE_FASTPLACE = BLOCKPLACE + "fastplace.";
|
||||
public static final String BLOCKPLACE_FASTPLACE_CHECK = BLOCKPLACE_FASTPLACE + "active";
|
||||
public static final String BLOCKPLACE_FASTPLACE_INTERVAL = BLOCKPLACE_FASTPLACE + "interval";
|
||||
public static final String BLOCKPLACE_FASTPLACE_ACTIONS = BLOCKPLACE_FASTPLACE + "actions";
|
||||
|
||||
private final static String BLOCKPLACE_REACH = BLOCKPLACE + "reach.";
|
||||
public final static String BLOCKPLACE_REACH_CHECK = BLOCKPLACE_REACH + "active";
|
||||
public final static String BLOCKPLACE_REACH_ACTIONS = BLOCKPLACE_REACH + "actions";
|
||||
private static final String BLOCKPLACE_REACH = BLOCKPLACE + "reach.";
|
||||
public static final String BLOCKPLACE_REACH_CHECK = BLOCKPLACE_REACH + "active";
|
||||
public static final String BLOCKPLACE_REACH_ACTIONS = BLOCKPLACE_REACH + "actions";
|
||||
|
||||
private final static String BLOCKPLACE_DIRECTION = BLOCKPLACE + "direction.";
|
||||
public final static String BLOCKPLACE_DIRECTION_CHECK = BLOCKPLACE_DIRECTION + "active";
|
||||
public final static String BLOCKPLACE_DIRECTION_PRECISION = BLOCKPLACE_DIRECTION + "precision";
|
||||
public final static String BLOCKPLACE_DIRECTION_PENALTYTIME = BLOCKPLACE_DIRECTION + "penaltytime";
|
||||
public final static String BLOCKPLACE_DIRECTION_ACTIONS = BLOCKPLACE_DIRECTION + "actions";
|
||||
private static final String BLOCKPLACE_DIRECTION = BLOCKPLACE + "direction.";
|
||||
public static final String BLOCKPLACE_DIRECTION_CHECK = BLOCKPLACE_DIRECTION + "active";
|
||||
public static final String BLOCKPLACE_DIRECTION_PRECISION = BLOCKPLACE_DIRECTION + "precision";
|
||||
public static final String BLOCKPLACE_DIRECTION_PENALTYTIME = BLOCKPLACE_DIRECTION + "penaltytime";
|
||||
public static final String BLOCKPLACE_DIRECTION_ACTIONS = BLOCKPLACE_DIRECTION + "actions";
|
||||
|
||||
private final static String BLOCKPLACE_PROJECTILE = BLOCKPLACE + "projectile.";
|
||||
public final static String BLOCKPLACE_PROJECTILE_CHECK = BLOCKPLACE_PROJECTILE + "active";
|
||||
public final static String BLOCKPLACE_PROJECTILE_INTERVAL = BLOCKPLACE_PROJECTILE + "interval";
|
||||
public final static String BLOCKPLACE_PROJECTILE_ACTIONS = BLOCKPLACE_PROJECTILE + "actions";
|
||||
private static final String BLOCKPLACE_PROJECTILE = BLOCKPLACE + "projectile.";
|
||||
public static final String BLOCKPLACE_PROJECTILE_CHECK = BLOCKPLACE_PROJECTILE + "active";
|
||||
public static final String BLOCKPLACE_PROJECTILE_INTERVAL = BLOCKPLACE_PROJECTILE + "interval";
|
||||
public static final String BLOCKPLACE_PROJECTILE_ACTIONS = BLOCKPLACE_PROJECTILE + "actions";
|
||||
|
||||
private final static String CHAT = CHECKS + "chat.";
|
||||
private static final String CHAT = CHECKS + "chat.";
|
||||
|
||||
public final static String CHAT_HIDECOMMANDS = CHAT + "hidecommands";
|
||||
public static final String CHAT_HIDECOMMANDS = CHAT + "hidecommands";
|
||||
|
||||
private final static String CHAT_NOPWNAGE = CHAT + "nopwnage.";
|
||||
public final static String CHAT_NOPWNAGE_CHECK = CHAT_NOPWNAGE + "active";
|
||||
public final static String CHAT_NOPWNAGE_WARNPLAYERS = CHAT_NOPWNAGE + "warnplayers";
|
||||
public final static String CHAT_NOPWNAGE_WARNOTHERS = CHAT_NOPWNAGE + "warnothers";
|
||||
public final static String CHAT_NOPWNAGE_WARNLEVEL = CHAT_NOPWNAGE + "warnlevel";
|
||||
public final static String CHAT_NOPWNAGE_WARNTIMEOUT = CHAT_NOPWNAGE + "warntimeout";
|
||||
public final static String CHAT_NOPWNAGE_BANLEVEL = CHAT_NOPWNAGE + "banlevel";
|
||||
public final static String CHAT_NOPWNAGE_ACTIONS = CHAT_NOPWNAGE + "actions";
|
||||
private static final String CHAT_NOPWNAGE = CHAT + "nopwnage.";
|
||||
public static final String CHAT_NOPWNAGE_CHECK = CHAT_NOPWNAGE + "active";
|
||||
public static final String CHAT_NOPWNAGE_WARNPLAYERS = CHAT_NOPWNAGE + "warnplayers";
|
||||
public static final String CHAT_NOPWNAGE_WARNOTHERS = CHAT_NOPWNAGE + "warnothers";
|
||||
public static final String CHAT_NOPWNAGE_WARNLEVEL = CHAT_NOPWNAGE + "warnlevel";
|
||||
public static final String CHAT_NOPWNAGE_WARNTIMEOUT = CHAT_NOPWNAGE + "warntimeout";
|
||||
public static final String CHAT_NOPWNAGE_BANLEVEL = CHAT_NOPWNAGE + "banlevel";
|
||||
public static final String CHAT_NOPWNAGE_ACTIONS = CHAT_NOPWNAGE + "actions";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_MOVE = CHAT_NOPWNAGE + "move.";
|
||||
public final static String CHAT_NOPWNAGE_MOVE_CHECK = CHAT_NOPWNAGE_MOVE + "active";
|
||||
public final static String CHAT_NOPWNAGE_MOVE_WEIGHTBONUS = CHAT_NOPWNAGE_MOVE + "weightbonus";
|
||||
public final static String CHAT_NOPWNAGE_MOVE_WEIGHTMALUS = CHAT_NOPWNAGE_MOVE + "weightmalus";
|
||||
public final static String CHAT_NOPWNAGE_MOVE_TIMEOUT = CHAT_NOPWNAGE_MOVE + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_MOVE = CHAT_NOPWNAGE + "move.";
|
||||
public static final String CHAT_NOPWNAGE_MOVE_CHECK = CHAT_NOPWNAGE_MOVE + "active";
|
||||
public static final String CHAT_NOPWNAGE_MOVE_WEIGHTBONUS = CHAT_NOPWNAGE_MOVE + "weightbonus";
|
||||
public static final String CHAT_NOPWNAGE_MOVE_WEIGHTMALUS = CHAT_NOPWNAGE_MOVE + "weightmalus";
|
||||
public static final String CHAT_NOPWNAGE_MOVE_TIMEOUT = CHAT_NOPWNAGE_MOVE + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_REPEAT = CHAT_NOPWNAGE + "repeat.";
|
||||
public final static String CHAT_NOPWNAGE_REPEAT_CHECK = CHAT_NOPWNAGE_REPEAT + "active";
|
||||
public final static String CHAT_NOPWNAGE_REPEAT_WEIGHT = CHAT_NOPWNAGE_REPEAT + "weight";
|
||||
public final static String CHAT_NOPWNAGE_REPEAT_TIMEOUT = CHAT_NOPWNAGE_REPEAT + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_REPEAT = CHAT_NOPWNAGE + "repeat.";
|
||||
public static final String CHAT_NOPWNAGE_REPEAT_CHECK = CHAT_NOPWNAGE_REPEAT + "active";
|
||||
public static final String CHAT_NOPWNAGE_REPEAT_WEIGHT = CHAT_NOPWNAGE_REPEAT + "weight";
|
||||
public static final String CHAT_NOPWNAGE_REPEAT_TIMEOUT = CHAT_NOPWNAGE_REPEAT + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_SPEED = CHAT_NOPWNAGE + "speed.";
|
||||
public final static String CHAT_NOPWNAGE_SPEED_CHECK = CHAT_NOPWNAGE_SPEED + "active";
|
||||
public final static String CHAT_NOPWNAGE_SPEED_WEIGHT = CHAT_NOPWNAGE_SPEED + "weight";
|
||||
public final static String CHAT_NOPWNAGE_SPEED_TIMEOUT = CHAT_NOPWNAGE_SPEED + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_SPEED = CHAT_NOPWNAGE + "speed.";
|
||||
public static final String CHAT_NOPWNAGE_SPEED_CHECK = CHAT_NOPWNAGE_SPEED + "active";
|
||||
public static final String CHAT_NOPWNAGE_SPEED_WEIGHT = CHAT_NOPWNAGE_SPEED + "weight";
|
||||
public static final String CHAT_NOPWNAGE_SPEED_TIMEOUT = CHAT_NOPWNAGE_SPEED + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_FIRST = CHAT_NOPWNAGE + "first.";
|
||||
public final static String CHAT_NOPWNAGE_FIRST_CHECK = CHAT_NOPWNAGE_FIRST + "active";
|
||||
public final static String CHAT_NOPWNAGE_FIRST_WEIGHT = CHAT_NOPWNAGE_FIRST + "weight";
|
||||
public final static String CHAT_NOPWNAGE_FIRST_TIMEOUT = CHAT_NOPWNAGE_FIRST + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_FIRST = CHAT_NOPWNAGE + "first.";
|
||||
public static final String CHAT_NOPWNAGE_FIRST_CHECK = CHAT_NOPWNAGE_FIRST + "active";
|
||||
public static final String CHAT_NOPWNAGE_FIRST_WEIGHT = CHAT_NOPWNAGE_FIRST + "weight";
|
||||
public static final String CHAT_NOPWNAGE_FIRST_TIMEOUT = CHAT_NOPWNAGE_FIRST + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_GLOBAL = CHAT_NOPWNAGE + "global.";
|
||||
public final static String CHAT_NOPWNAGE_GLOBAL_CHECK = CHAT_NOPWNAGE_GLOBAL + "active";
|
||||
public final static String CHAT_NOPWNAGE_GLOBAL_WEIGHT = CHAT_NOPWNAGE_GLOBAL + "weight";
|
||||
public final static String CHAT_NOPWNAGE_GLOBAL_TIMEOUT = CHAT_NOPWNAGE_GLOBAL + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_GLOBAL = CHAT_NOPWNAGE + "global.";
|
||||
public static final String CHAT_NOPWNAGE_GLOBAL_CHECK = CHAT_NOPWNAGE_GLOBAL + "active";
|
||||
public static final String CHAT_NOPWNAGE_GLOBAL_WEIGHT = CHAT_NOPWNAGE_GLOBAL + "weight";
|
||||
public static final String CHAT_NOPWNAGE_GLOBAL_TIMEOUT = CHAT_NOPWNAGE_GLOBAL + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_BANNED = CHAT_NOPWNAGE + "banned.";
|
||||
public final static String CHAT_NOPWNAGE_BANNED_CHECK = CHAT_NOPWNAGE_BANNED + "active";
|
||||
public final static String CHAT_NOPWNAGE_BANNED_WEIGHT = CHAT_NOPWNAGE_BANNED + "weight";
|
||||
public final static String CHAT_NOPWNAGE_BANNED_TIMEOUT = CHAT_NOPWNAGE_BANNED + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_BANNED = CHAT_NOPWNAGE + "banned.";
|
||||
public static final String CHAT_NOPWNAGE_BANNED_CHECK = CHAT_NOPWNAGE_BANNED + "active";
|
||||
public static final String CHAT_NOPWNAGE_BANNED_WEIGHT = CHAT_NOPWNAGE_BANNED + "weight";
|
||||
public static final String CHAT_NOPWNAGE_BANNED_TIMEOUT = CHAT_NOPWNAGE_BANNED + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_RELOG = CHAT_NOPWNAGE + "relog.";
|
||||
public final static String CHAT_NOPWNAGE_RELOG_CHECK = CHAT_NOPWNAGE_RELOG + "active";
|
||||
public final static String CHAT_NOPWNAGE_RELOG_TIME = CHAT_NOPWNAGE_RELOG + "time";
|
||||
public final static String CHAT_NOPWNAGE_RELOG_WARNINGS = CHAT_NOPWNAGE_RELOG + "warnings";
|
||||
public final static String CHAT_NOPWNAGE_RELOG_TIMEOUT = CHAT_NOPWNAGE_RELOG + "timeout";
|
||||
private static final String CHAT_NOPWNAGE_RELOG = CHAT_NOPWNAGE + "relog.";
|
||||
public static final String CHAT_NOPWNAGE_RELOG_CHECK = CHAT_NOPWNAGE_RELOG + "active";
|
||||
public static final String CHAT_NOPWNAGE_RELOG_TIME = CHAT_NOPWNAGE_RELOG + "time";
|
||||
public static final String CHAT_NOPWNAGE_RELOG_WARNINGS = CHAT_NOPWNAGE_RELOG + "warnings";
|
||||
public static final String CHAT_NOPWNAGE_RELOG_TIMEOUT = CHAT_NOPWNAGE_RELOG + "timeout";
|
||||
|
||||
private final static String CHAT_NOPWNAGE_CAPTCHA = CHAT_NOPWNAGE + "captcha.";
|
||||
public final static String CHAT_NOPWNAGE_CAPTCHA_CHECK = CHAT_NOPWNAGE_CAPTCHA + "active";
|
||||
public final static String CHAT_NOPWNAGE_CAPTCHA_TRIES = CHAT_NOPWNAGE_CAPTCHA + "tries";
|
||||
public final static String CHAT_NOPWNAGE_CAPTCHA_LENGTH = CHAT_NOPWNAGE_CAPTCHA + "length";
|
||||
public final static String CHAT_NOPWNAGE_CAPTCHA_CHARACTERS = CHAT_NOPWNAGE_CAPTCHA + "characters";
|
||||
private static final String CHAT_NOPWNAGE_CAPTCHA = CHAT_NOPWNAGE + "captcha.";
|
||||
public static final String CHAT_NOPWNAGE_CAPTCHA_CHECK = CHAT_NOPWNAGE_CAPTCHA + "active";
|
||||
public static final String CHAT_NOPWNAGE_CAPTCHA_TRIES = CHAT_NOPWNAGE_CAPTCHA + "tries";
|
||||
public static final String CHAT_NOPWNAGE_CAPTCHA_LENGTH = CHAT_NOPWNAGE_CAPTCHA + "length";
|
||||
public static final String CHAT_NOPWNAGE_CAPTCHA_CHARACTERS = CHAT_NOPWNAGE_CAPTCHA + "characters";
|
||||
|
||||
private final static String CHAT_ARRIVALSLIMIT = CHAT + "arrivalslimit.";
|
||||
public final static String CHAT_ARRIVALSLIMIT_CHECK = CHAT_ARRIVALSLIMIT + "active";
|
||||
public final static String CHAT_ARRIVALSLIMIT_PLAYERSLIMIT = CHAT_ARRIVALSLIMIT + "playerslimit";
|
||||
public final static String CHAT_ARRIVALSLIMIT_TIMEFRAME = CHAT_ARRIVALSLIMIT + "timeframe";
|
||||
public final static String CHAT_ARRIVALSLIMIT_COOLDOWNDELAY = CHAT_ARRIVALSLIMIT + "cooldowndelay";
|
||||
public final static String CHAT_ARRIVALSLIMIT_KICKMESSAGE = CHAT_ARRIVALSLIMIT + "kickmessage";
|
||||
public final static String CHAT_ARRIVALSLIMIT_NEWTIME = CHAT_ARRIVALSLIMIT + "newtime";
|
||||
public final static String CHAT_ARRIVALSLIMIT_ACTIONS = CHAT_ARRIVALSLIMIT + "actions";
|
||||
private static final String CHAT_ARRIVALSLIMIT = CHAT + "arrivalslimit.";
|
||||
public static final String CHAT_ARRIVALSLIMIT_CHECK = CHAT_ARRIVALSLIMIT + "active";
|
||||
public static final String CHAT_ARRIVALSLIMIT_PLAYERSLIMIT = CHAT_ARRIVALSLIMIT + "playerslimit";
|
||||
public static final String CHAT_ARRIVALSLIMIT_TIMEFRAME = CHAT_ARRIVALSLIMIT + "timeframe";
|
||||
public static final String CHAT_ARRIVALSLIMIT_COOLDOWNDELAY = CHAT_ARRIVALSLIMIT + "cooldowndelay";
|
||||
public static final String CHAT_ARRIVALSLIMIT_KICKMESSAGE = CHAT_ARRIVALSLIMIT + "kickmessage";
|
||||
public static final String CHAT_ARRIVALSLIMIT_NEWTIME = CHAT_ARRIVALSLIMIT + "newtime";
|
||||
public static final String CHAT_ARRIVALSLIMIT_ACTIONS = CHAT_ARRIVALSLIMIT + "actions";
|
||||
|
||||
private final static String CHAT_COLOR = CHAT + "color.";
|
||||
public final static String CHAT_COLOR_CHECK = CHAT_COLOR + "active";
|
||||
public final static String CHAT_COLOR_ACTIONS = CHAT_COLOR + "actions";
|
||||
private static final String CHAT_COLOR = CHAT + "color.";
|
||||
public static final String CHAT_COLOR_CHECK = CHAT_COLOR + "active";
|
||||
public static final String CHAT_COLOR_ACTIONS = CHAT_COLOR + "actions";
|
||||
|
||||
private final static String FIGHT = CHECKS + "fight.";
|
||||
private static final String FIGHT = CHECKS + "fight.";
|
||||
|
||||
private final static String FIGHT_DIRECTION = FIGHT + "direction.";
|
||||
public final static String FIGHT_DIRECTION_CHECK = FIGHT_DIRECTION + "active";
|
||||
public final static String FIGHT_DIRECTION_PRECISION = FIGHT_DIRECTION + "precision";
|
||||
public final static String FIGHT_DIRECTION_PENALTYTIME = FIGHT_DIRECTION + "penaltytime";
|
||||
public final static String FIGHT_DIRECTION_ACTIONS = FIGHT_DIRECTION + "actions";
|
||||
private static final String FIGHT_DIRECTION = FIGHT + "direction.";
|
||||
public static final String FIGHT_DIRECTION_CHECK = FIGHT_DIRECTION + "active";
|
||||
public static final String FIGHT_DIRECTION_PRECISION = FIGHT_DIRECTION + "precision";
|
||||
public static final String FIGHT_DIRECTION_PENALTYTIME = FIGHT_DIRECTION + "penaltytime";
|
||||
public static final String FIGHT_DIRECTION_ACTIONS = FIGHT_DIRECTION + "actions";
|
||||
|
||||
private final static String FIGHT_NOSWING = FIGHT + "noswing.";
|
||||
public final static String FIGHT_NOSWING_CHECK = FIGHT_NOSWING + "active";
|
||||
public final static String FIGHT_NOSWING_ACTIONS = FIGHT_NOSWING + "actions";
|
||||
private static final String FIGHT_NOSWING = FIGHT + "noswing.";
|
||||
public static final String FIGHT_NOSWING_CHECK = FIGHT_NOSWING + "active";
|
||||
public static final String FIGHT_NOSWING_ACTIONS = FIGHT_NOSWING + "actions";
|
||||
|
||||
private final static String FIGHT_REACH = FIGHT + "reach.";
|
||||
private static final String FIGHT_REACH = FIGHT + "reach.";
|
||||
public static final String FIGHT_REACH_CHECK = FIGHT_REACH + "active";
|
||||
public static final String FIGHT_REACH_LIMIT = FIGHT_REACH + "distance";
|
||||
public static final String FIGHT_REACH_PENALTYTIME = FIGHT_REACH + "penaltytime";
|
||||
public static final String FIGHT_REACH_ACTIONS = FIGHT_REACH + "actions";
|
||||
|
||||
private final static String FIGHT_SPEED = FIGHT + "speed.";
|
||||
public final static String FIGHT_SPEED_CHECK = FIGHT_SPEED + "active";
|
||||
public final static String FIGHT_SPEED_ATTACKLIMIT = FIGHT_SPEED + "attacklimit";
|
||||
public final static String FIGHT_SPEED_ACTIONS = FIGHT_SPEED + "actions";
|
||||
private static final String FIGHT_SPEED = FIGHT + "speed.";
|
||||
public static final String FIGHT_SPEED_CHECK = FIGHT_SPEED + "active";
|
||||
public static final String FIGHT_SPEED_ATTACKLIMIT = FIGHT_SPEED + "attacklimit";
|
||||
public static final String FIGHT_SPEED_ACTIONS = FIGHT_SPEED + "actions";
|
||||
|
||||
private final static String FIGHT_GODMODE = FIGHT + "godmode.";
|
||||
private static final String FIGHT_GODMODE = FIGHT + "godmode.";
|
||||
public static final String FIGHT_GODMODE_CHECK = FIGHT_GODMODE + "active";
|
||||
public final static String FIGHT_GODMODE_ACTIONS = FIGHT_GODMODE + "actions";
|
||||
public static final String FIGHT_GODMODE_ACTIONS = FIGHT_GODMODE + "actions";
|
||||
|
||||
private final static String FIGHT_INSTANTHEAL = FIGHT + "instantheal.";
|
||||
private static final String FIGHT_INSTANTHEAL = FIGHT + "instantheal.";
|
||||
public static final String FIGHT_INSTANTHEAL_CHECK = FIGHT_INSTANTHEAL + "active";
|
||||
public final static String FIGHT_INSTANTHEAL_ACTIONS = FIGHT_INSTANTHEAL + "actions";
|
||||
public static final String FIGHT_INSTANTHEAL_ACTIONS = FIGHT_INSTANTHEAL + "actions";
|
||||
|
||||
public final static String STRINGS = "strings";
|
||||
private static final String FIGHT_KNOCKBACK = FIGHT + "knockback.";
|
||||
public static final String FIGHT_KNOCKBACK_CHECK = FIGHT_KNOCKBACK + "active";
|
||||
public static final String FIGHT_KNOCKBACK_INTERVAL = FIGHT_KNOCKBACK + "interval";
|
||||
public static final String FIGHT_KNOCKBACK_ACTIONS = FIGHT_KNOCKBACK + "actions";
|
||||
|
||||
public static final String STRINGS = "strings";
|
||||
|
||||
}
|
||||
|
@ -14,11 +14,7 @@ public class DefaultConfiguration extends NoCheatPlusConfiguration {
|
||||
|
||||
options().header("Main configuration file for NoCheatPlus. Read \"Instructions.txt\"");
|
||||
|
||||
/** CLIENT MODS **/
|
||||
|
||||
set(ConfPaths.CLIENT_MODS_ALLOW, false);
|
||||
|
||||
/** LOGGING **/
|
||||
/*** LOGGING ***/
|
||||
|
||||
set(ConfPaths.LOGGING_ACTIVE, true);
|
||||
set(ConfPaths.LOGGING_SHOWACTIVECHECKS, false);
|
||||
@ -29,6 +25,11 @@ public class DefaultConfiguration extends NoCheatPlusConfiguration {
|
||||
set(ConfPaths.LOGGING_LOGTOCONSOLE, true);
|
||||
set(ConfPaths.LOGGING_LOGTOINGAMECHAT, true);
|
||||
|
||||
/*** MISCELLANEOUS ***/
|
||||
|
||||
set(ConfPaths.MISCELLANEOUS_ALLOWCLIENTMODS, false);
|
||||
set(ConfPaths.MISCELLANEOUS_OPBYCONSOLEONLY, true);
|
||||
|
||||
/*** INVENTORY ***/
|
||||
|
||||
set(ConfPaths.INVENTORY_DROP_CHECK, true);
|
||||
@ -54,9 +55,6 @@ public class DefaultConfiguration extends NoCheatPlusConfiguration {
|
||||
set(ConfPaths.MOVING_RUNFLY_NOFALLAGGRESSIVE, true);
|
||||
set(ConfPaths.MOVING_RUNFLY_NOFALLACTIONS, "log:nofall:0:5:cif cancel");
|
||||
|
||||
set(ConfPaths.MOVING_RUNFLY_TRACKER_CHECK, true);
|
||||
set(ConfPaths.MOVING_RUNFLY_TRACKER_ACTIONS, "cmd:kick");
|
||||
|
||||
set(ConfPaths.MOVING_RUNFLY_FLYING_ALLOWALWAYS, false);
|
||||
set(ConfPaths.MOVING_RUNFLY_FLYING_ALLOWINCREATIVE, true);
|
||||
set(ConfPaths.MOVING_RUNFLY_FLYING_SPEEDLIMITHORIZONTAL, 60);
|
||||
@ -199,6 +197,10 @@ public class DefaultConfiguration extends NoCheatPlusConfiguration {
|
||||
set(ConfPaths.FIGHT_INSTANTHEAL_CHECK, true);
|
||||
set(ConfPaths.FIGHT_INSTANTHEAL_ACTIONS, "log:fheal:1:1:if cancel");
|
||||
|
||||
set(ConfPaths.FIGHT_KNOCKBACK_CHECK, true);
|
||||
set(ConfPaths.FIGHT_KNOCKBACK_INTERVAL, 50);
|
||||
set(ConfPaths.FIGHT_KNOCKBACK_ACTIONS, "cancel vl>50 log:fknock:0:5:cif cancel");
|
||||
|
||||
set(ConfPaths.STRINGS + ".drop",
|
||||
"[player] failed [check]: Tried to drop more items than allowed. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".moveshort", "[player] failed [check]. VL [violations]");
|
||||
@ -238,6 +240,8 @@ public class DefaultConfiguration extends NoCheatPlusConfiguration {
|
||||
set(ConfPaths.STRINGS + ".fgod", "[player] failed [check]: Avoided taking damage or lagging. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".fheal",
|
||||
"[player] failed [check]: Tried to regenerate health faster than normal. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".fknock",
|
||||
"[player] failed [check]: Tried to do a knockback but wasn't really sprinting. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".ibow", "[player] failed [check]: Fires bow to fast. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".ieat", "[player] failed [check]: Eats food [food] too fast. VL [violations]");
|
||||
set(ConfPaths.STRINGS + ".kick", "kick [player]");
|
||||
|
@ -42,6 +42,7 @@ public class Permissions {
|
||||
public static final String FIGHT_SPEED = FIGHT + ".speed";
|
||||
public static final String FIGHT_GODMODE = FIGHT + ".godmode";
|
||||
public static final String FIGHT_INSTANTHEAL = FIGHT + ".instantheal";
|
||||
public static final String FIGHT_KNOCKBACK = FIGHT + ".knockback";
|
||||
|
||||
private static final String INVENTORY = CHECKS + ".inventory";
|
||||
public static final String INVENTORY_DROP = INVENTORY + ".drop";
|
||||
|
@ -22,11 +22,11 @@ public class Statistics {
|
||||
FI_NOSWING("fight.noswing"),
|
||||
FI_REACH("fight.reach"),
|
||||
FI_SPEED("fight.speed"),
|
||||
FI_KNOCKBACK("fight.knockback"),
|
||||
INV_DROP("inventory.drop"),
|
||||
INV_BOW("inventory.instantbow"),
|
||||
INV_EAT("inventory.instanteat"),
|
||||
MOV_RUNNING("moving.running"),
|
||||
MOV_TRACKER("moving.tracker"),
|
||||
MOV_FLYING("moving.flying"),
|
||||
MOV_MOREPACKETS("moving.morepackets"),
|
||||
MOV_MOREPACKETSVEHICLE("moving.morepacketsvehicle"),
|
||||
|
Loading…
Reference in New Issue
Block a user