mirror of
https://github.com/Updated-NoCheatPlus/NoCheatPlus.git
synced 2026-11-08 09:35:18 -05:00
Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3141a08a5e | ||
|
|
82fd3226a4 | ||
|
|
040e7bc73a | ||
|
|
0a9f832a06 | ||
|
|
8a45246d2c | ||
|
|
5ae32be309 | ||
|
|
47cf9d9833 | ||
|
|
391a8af30b | ||
|
|
853ce8dba4 | ||
|
|
ea3b11a435 | ||
|
|
2ffa0c726c | ||
|
|
3de05e27c4 | ||
|
|
5a42e3fc37 | ||
|
|
612b073824 | ||
|
|
fec7f4bcbc | ||
|
|
a00921fafc | ||
|
|
73ed92e299 |
No files matched your search
+1
@@ -134,6 +134,7 @@ public class UseEntityAdapter extends BaseAdapter {
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
// Always set last received time.
|
||||
data.lastKeepAliveTime = time;
|
||||
data.lastHitLocation = player.getLocation();
|
||||
|
||||
// Quick return, if no checks are active.
|
||||
if (!pData.isCheckActive(CheckType.NET_ATTACKFREQUENCY, player)) {
|
||||
|
||||
@@ -51,6 +51,7 @@ public enum CheckType {
|
||||
BLOCKPLACE_FASTPLACE(CheckTypeType.CHECK, BLOCKPLACE, Permissions.BLOCKPLACE_FASTPLACE),
|
||||
BLOCKPLACE_NOSWING(CheckTypeType.CHECK, BLOCKPLACE, Permissions.BLOCKPLACE_NOSWING),
|
||||
BLOCKPLACE_REACH(CheckTypeType.CHECK, BLOCKPLACE, Permissions.BLOCKBREAK_REACH),
|
||||
BLOCKPLACE_SCAFFOLD(CheckTypeType.CHECK, BLOCKPLACE, Permissions.BLOCKBREAK_REACH),
|
||||
BLOCKPLACE_SPEED(CheckTypeType.CHECK, BLOCKPLACE, Permissions.BLOCKPLACE_SPEED),
|
||||
|
||||
CHAT(CheckTypeType.GROUP, CheckType.ALL, Permissions.CHAT),
|
||||
@@ -104,6 +105,7 @@ public enum CheckType {
|
||||
|
||||
NET(CheckTypeType.GROUP, CheckType.ALL, Permissions.NET),
|
||||
NET_ATTACKFREQUENCY(CheckTypeType.CHECK, NET, Permissions.NET_ATTACKFREQUENCY),
|
||||
NET_FIGHTSYNC(CheckTypeType.CHECK, NET, Permissions.NET_FLYINGFREQUENCY),
|
||||
NET_FLYINGFREQUENCY(CheckTypeType.CHECK, NET, Permissions.NET_FLYINGFREQUENCY),
|
||||
NET_KEEPALIVEFREQUENCY(CheckTypeType.CHECK, NET, Permissions.NET_KEEPALIVEFREQUENCY),
|
||||
NET_PACKETFREQUENCY(CheckTypeType.CHECK, NET, Permissions.NET_PACKETFREQUENCY),
|
||||
|
||||
+4
@@ -48,6 +48,8 @@ public class BlockPlaceConfig extends ACheckConfig {
|
||||
public final ActionList noSwingActions;
|
||||
|
||||
public final ActionList reachActions;
|
||||
|
||||
public final ActionList scaffoldActions;
|
||||
|
||||
public final long speedInterval;
|
||||
public final ActionList speedActions;
|
||||
@@ -82,6 +84,8 @@ public class BlockPlaceConfig extends ACheckConfig {
|
||||
noSwingActions = config.getOptimizedActionList(ConfPaths.BLOCKPLACE_NOSWING_ACTIONS, Permissions.BLOCKPLACE_NOSWING);
|
||||
|
||||
reachActions = config.getOptimizedActionList(ConfPaths.BLOCKPLACE_REACH_ACTIONS, Permissions.BLOCKPLACE_REACH);
|
||||
|
||||
scaffoldActions = config.getOptimizedActionList(ConfPaths.BLOCKPLACE_SCAFFOLD_ACTIONS, Permissions.BLOCKPLACE_REACH);
|
||||
|
||||
speedInterval = config.getLong(ConfPaths.BLOCKPLACE_SPEED_INTERVAL);
|
||||
speedActions = config.getOptimizedActionList(ConfPaths.BLOCKPLACE_SPEED_ACTIONS, Permissions.BLOCKPLACE_SPEED);
|
||||
|
||||
@@ -29,6 +29,7 @@ public class BlockPlaceData extends ACheckData {
|
||||
public double fastPlaceVL = 0;
|
||||
public double noSwingVL = 0;
|
||||
public double reachVL = 0;
|
||||
public double scaffoldVL = 0;
|
||||
public double speedVL = 0;
|
||||
|
||||
// AutoSign.
|
||||
|
||||
+32
-1
@@ -14,6 +14,9 @@
|
||||
*/
|
||||
package fr.neatmonster.nocheatplus.checks.blockplace;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@@ -108,7 +111,10 @@ public class BlockPlaceListener extends CheckListener {
|
||||
/** The reach check. */
|
||||
private final Reach reach = addCheck(new Reach());
|
||||
|
||||
/** The speed check. */
|
||||
/** The scaffold check. */
|
||||
private final Scaffold Scaffold = addCheck(new Scaffold());
|
||||
|
||||
/** The speed check. */
|
||||
private final Speed speed = addCheck(new Speed());
|
||||
|
||||
/** For temporary use: LocUtil.clone before passing deeply, call setWorld(null) after use. */
|
||||
@@ -394,6 +400,31 @@ public class BlockPlaceListener extends CheckListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for PlayerInteract events to check for their target block face vs their
|
||||
* attempted block face. This is used for the scaffold check.
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void placeBlock(PlayerInteractEvent event) {
|
||||
if (!Scaffold.isEnabled(event.getPlayer())) return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
Block targetBlock = player.getTargetBlock((Set<Material>) null, 7);
|
||||
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || !event.isBlockInHand() || player.isFlying() && player.getAllowFlight() || targetBlock.isLiquid() || player.isSneaking()) return;
|
||||
|
||||
List<Block> lastTarget = player.getLastTwoTargetBlocks((Set<Material>) null, 7);
|
||||
BlockFace blockFace = event.getBlockFace();
|
||||
|
||||
if (targetBlock.getY() != player.getLocation().subtract(0, 1, 0).getY()) return;
|
||||
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final BlockPlaceData data = pData.getGenericInstance(BlockPlaceData.class);
|
||||
if (Scaffold.check(player, targetBlock, lastTarget, blockFace, pData, data)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBoatsAnywhere(final Player player, final PlayerInteractEvent event,
|
||||
final BlockPlaceConfig cc, final IPlayerData pData) {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package fr.neatmonster.nocheatplus.checks.blockplace;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import fr.neatmonster.nocheatplus.checks.Check;
|
||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
||||
import fr.neatmonster.nocheatplus.players.IPlayerData;
|
||||
|
||||
public class Scaffold extends Check {
|
||||
|
||||
public Scaffold() {
|
||||
super(CheckType.BLOCKPLACE_SCAFFOLD);
|
||||
}
|
||||
|
||||
public boolean check(Player player, Block targetBlock, List<Block> lastTarget, BlockFace blockFace, final IPlayerData pData, final BlockPlaceData data) {
|
||||
BlockFace face = null;
|
||||
boolean cancel = false;
|
||||
|
||||
if (lastTarget.size() > 1) {
|
||||
face = lastTarget.get(1).getFace(lastTarget.get(0));
|
||||
}
|
||||
|
||||
if (blockFace != face) {
|
||||
cancel = executeActions(player, data.scaffoldVL, 1D, pData.getGenericInstance(BlockPlaceConfig.class).scaffoldActions).willCancel();
|
||||
data.scaffoldVL += 1D;
|
||||
}
|
||||
return cancel;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -52,6 +52,8 @@ import fr.neatmonster.nocheatplus.checks.moving.player.UnusedVelocity;
|
||||
import fr.neatmonster.nocheatplus.checks.moving.util.AuxMoving;
|
||||
import fr.neatmonster.nocheatplus.checks.moving.util.MovingUtil;
|
||||
import fr.neatmonster.nocheatplus.checks.moving.velocity.VelocityFlags;
|
||||
import fr.neatmonster.nocheatplus.checks.net.NetConfig;
|
||||
import fr.neatmonster.nocheatplus.checks.net.NetData;
|
||||
import fr.neatmonster.nocheatplus.compat.Bridge1_9;
|
||||
import fr.neatmonster.nocheatplus.compat.BridgeEnchant;
|
||||
import fr.neatmonster.nocheatplus.compat.BridgeHealth;
|
||||
@@ -101,6 +103,8 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
|
||||
/** The no swing check. */
|
||||
private final NoSwing noSwing = addCheck(new NoSwing());
|
||||
|
||||
private final FightSync FightSync = addCheck(new FightSync());
|
||||
|
||||
/** The reach check. */
|
||||
private final Reach reach = addCheck(new Reach());
|
||||
@@ -827,6 +831,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
*/
|
||||
DataManager.getGenericInstance(event.getPlayer(),
|
||||
FightData.class).noSwingArmSwung = true;
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
@@ -871,10 +876,9 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
final double health = Math.min(BridgeHealth.getHealth(player) + BridgeHealth.getAmount(event), BridgeHealth.getMaxHealth(player));
|
||||
data.godModeHealth = Math.max(data.godModeHealth, health);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = false)
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = false)
|
||||
public void entityInteract(PlayerInteractEntityEvent e) {
|
||||
|
||||
Entity entity = e.getRightClicked();
|
||||
final Player player = e.getPlayer();
|
||||
final FightData data = DataManager.getGenericInstance(player, FightData.class);
|
||||
@@ -883,7 +887,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
data.exemptArmSwing = true;
|
||||
} else {
|
||||
data.exemptArmSwing = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -905,5 +909,28 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
pData.getGenericInstance(FightData.class).attackPenalty.applyPenalty(penalty);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityDamage(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player)) return;
|
||||
Player player = (Player) event.getDamager();
|
||||
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
final NetConfig cc = pData.getGenericInstance(NetConfig.class);
|
||||
if (data.fightSyncCount >= cc.fightSyncResetCount) {
|
||||
data.fightSyncCount = 0;
|
||||
data.fightSyncReset = 0;
|
||||
data.fightSyncVL *= 0.99D;
|
||||
}
|
||||
data.fightSyncReset += 1;
|
||||
Location packet = data.lastHitLocation, eventLoc = player.getLocation();
|
||||
|
||||
if (FightSync.check(player, pData, data, packet, eventLoc, cc)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package fr.neatmonster.nocheatplus.checks.fight;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import fr.neatmonster.nocheatplus.checks.Check;
|
||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
||||
import fr.neatmonster.nocheatplus.checks.net.NetConfig;
|
||||
import fr.neatmonster.nocheatplus.checks.net.NetData;
|
||||
import fr.neatmonster.nocheatplus.players.IPlayerData;
|
||||
|
||||
public class FightSync extends Check {
|
||||
|
||||
public FightSync() {
|
||||
super(CheckType.NET_FIGHTSYNC);
|
||||
}
|
||||
|
||||
public boolean check(Player player, IPlayerData pData, NetData data, Location packet, Location eventLoc, final NetConfig cc) {
|
||||
boolean cancel = false;
|
||||
double diff = Math.abs(eventLoc.getYaw() - packet.getYaw()) + Math.abs(eventLoc.getPitch() - packet.getPitch());
|
||||
|
||||
if (diff != 0) {
|
||||
if (data.fightSyncCount >= cc.fightSyncThreshold) {
|
||||
data.fightSyncVL += diff * 5;
|
||||
cancel = executeActions(player, data.fightSyncVL, Math.abs(diff * 5), pData.getGenericInstance(NetConfig.class).fightSyncActions).willCancel();
|
||||
data.fightSyncCount = 0;
|
||||
} else {
|
||||
data.fightSyncCount += 1;
|
||||
}
|
||||
}
|
||||
return cancel;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -56,6 +56,10 @@ public class NetConfig extends ACheckConfig {
|
||||
public final float attackFrequencyLimitSecondsFour;
|
||||
public final float attackFrequencyLimitSecondsEight;
|
||||
public final ActionList attackFrequencyActions;
|
||||
|
||||
public final int fightSyncResetCount;
|
||||
public final int fightSyncThreshold;
|
||||
public final ActionList fightSyncActions;
|
||||
|
||||
public final int flyingFrequencySeconds;
|
||||
public final double flyingFrequencyPPS;
|
||||
@@ -65,7 +69,7 @@ public class NetConfig extends ACheckConfig {
|
||||
public final ActionList flyingFrequencyRedundantActions;
|
||||
|
||||
public final ActionList keepAliveFrequencyActions;
|
||||
public final int keepAliveFrequencyStartupDelay;
|
||||
public final int keepAliveFrequencyStartupDelay;
|
||||
|
||||
public final float packetFrequencyPacketsPerSecond;
|
||||
public final int packetFrequencySeconds;
|
||||
@@ -89,6 +93,10 @@ public class NetConfig extends ACheckConfig {
|
||||
attackFrequencyLimitSecondsFour= config.getInt(ConfPaths.NET_ATTACKFREQUENCY_SECONDS_FOUR);
|
||||
attackFrequencyLimitSecondsEight = config.getInt(ConfPaths.NET_ATTACKFREQUENCY_SECONDS_EIGHT);
|
||||
attackFrequencyActions = config.getOptimizedActionList(ConfPaths.NET_ATTACKFREQUENCY_ACTIONS, Permissions.NET_ATTACKFREQUENCY);
|
||||
|
||||
fightSyncResetCount = config.getInt(ConfPaths.NET_FIGHTSYNC_RESETCOUNT);
|
||||
fightSyncThreshold = config.getInt(ConfPaths.NET_FIGHTSYNC_THRESHOLD);
|
||||
fightSyncActions = config.getOptimizedActionList(ConfPaths.NET_FIGHTSYNC_ACTIONS, Permissions.NET_ATTACKFREQUENCY);
|
||||
|
||||
flyingFrequencySeconds = Math.max(1, globalConfig.getInt(ConfPaths.NET_FLYINGFREQUENCY_SECONDS));
|
||||
flyingFrequencyPPS = Math.max(1.0, globalConfig.getDouble(ConfPaths.NET_FLYINGFREQUENCY_PACKETSPERSECOND));
|
||||
@@ -99,7 +107,7 @@ public class NetConfig extends ACheckConfig {
|
||||
flyingFrequencyRedundantActions = config.getOptimizedActionList(ConfPaths.NET_FLYINGFREQUENCY_REDUNDANT_ACTIONS, Permissions.NET_FLYINGFREQUENCY);
|
||||
|
||||
keepAliveFrequencyActions = config.getOptimizedActionList(ConfPaths.NET_KEEPALIVEFREQUENCY_ACTIONS, Permissions.NET_KEEPALIVEFREQUENCY);
|
||||
keepAliveFrequencyStartupDelay = config.getInt(ConfPaths.NET_KEEPALIVEFREQUENCY_SECONDS) * 1000;
|
||||
keepAliveFrequencyStartupDelay = config.getInt(ConfPaths.NET_KEEPALIVEFREQUENCY_SECONDS) * 1000;
|
||||
|
||||
if (ServerVersion.compareMinecraftVersion("1.9") >= 0) {
|
||||
// TODO: Disable packet frequency or activate 'pessimistically'.
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.LinkedList;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import fr.neatmonster.nocheatplus.checks.access.ACheckData;
|
||||
@@ -34,12 +35,18 @@ import fr.neatmonster.nocheatplus.utilities.ds.count.ActionFrequency;
|
||||
*
|
||||
*/
|
||||
public class NetData extends ACheckData {
|
||||
|
||||
public double fightSyncVL;
|
||||
|
||||
// Reentrant lock.
|
||||
private final Lock lock = new ReentrantLock();
|
||||
|
||||
// AttackFrequency
|
||||
public ActionFrequency attackFrequencySeconds = new ActionFrequency(16, 500);
|
||||
|
||||
public Location lastHitLocation;
|
||||
public int fightSyncReset;
|
||||
public int fightSyncCount;
|
||||
|
||||
// FlyingFrequency
|
||||
/** All flying packets, use System.currentTimeMillis() for time. */
|
||||
|
||||
@@ -279,6 +279,10 @@ public abstract class ConfPaths {
|
||||
private static final String BLOCKPLACE_REACH = BLOCKPLACE + "reach.";
|
||||
public static final String BLOCKPLACE_REACH_CHECK = BLOCKPLACE_REACH + SUB_ACTIVE;
|
||||
public static final String BLOCKPLACE_REACH_ACTIONS = BLOCKPLACE_REACH + "actions";
|
||||
|
||||
private static final String BLOCKPLACE_SCAFFOLD = BLOCKPLACE + "scaffold.";
|
||||
public static final String BLOCKPLACE_SCAFFOLD_CHECK = BLOCKPLACE_SCAFFOLD + SUB_ACTIVE;
|
||||
public static final String BLOCKPLACE_SCAFFOLD_ACTIONS = BLOCKPLACE_SCAFFOLD + "actions";
|
||||
|
||||
private static final String BLOCKPLACE_SPEED = BLOCKPLACE + "speed.";
|
||||
public static final String BLOCKPLACE_SPEED_CHECK = BLOCKPLACE_SPEED + SUB_ACTIVE;
|
||||
@@ -738,6 +742,12 @@ public abstract class ConfPaths {
|
||||
public static final String NET_ATTACKFREQUENCY_SECONDS_FOUR = NET_ATTACKFREQUENCY_SECONDS + "four";
|
||||
public static final String NET_ATTACKFREQUENCY_SECONDS_EIGHT = NET_ATTACKFREQUENCY_SECONDS + "eight";
|
||||
public static final String NET_ATTACKFREQUENCY_ACTIONS = NET_ATTACKFREQUENCY + "actions";
|
||||
|
||||
private static final String NET_FIGHTSYNC = NET + "fightsync.";
|
||||
public static final String NET_FIGHTSYNC_ACTIVE = NET_FIGHTSYNC + SUB_ACTIVE;
|
||||
public static final String NET_FIGHTSYNC_THRESHOLD = NET_FIGHTSYNC + "threshold";
|
||||
public static final String NET_FIGHTSYNC_RESETCOUNT = NET_FIGHTSYNC + "reset_count";
|
||||
public static final String NET_FIGHTSYNC_ACTIONS = NET_FIGHTSYNC + "actions";
|
||||
|
||||
private static final String NET_FLYINGFREQUENCY = NET + "flyingfrequency.";
|
||||
public static final String NET_FLYINGFREQUENCY_ACTIVE = NET_FLYINGFREQUENCY + SUB_ACTIVE;
|
||||
|
||||
@@ -190,6 +190,9 @@ public class DefaultConfig extends ConfigFile {
|
||||
set(ConfPaths.BLOCKPLACE_NOSWING_CHECK, "default", 785);
|
||||
set(ConfPaths.BLOCKPLACE_NOSWING_EXCEPTIONS, Arrays.asList("LILY_PAD", Material.FLINT_AND_STEEL.toString()), 785);
|
||||
set(ConfPaths.BLOCKPLACE_NOSWING_ACTIONS, "cancel vl>10 log:noswing:0:5:if cancel", 785);
|
||||
|
||||
set(ConfPaths.BLOCKPLACE_SCAFFOLD_CHECK, "default", 1154);
|
||||
set(ConfPaths.BLOCKPLACE_SCAFFOLD_ACTIONS, "vl>15 log:scaffold:0:6:if", 1154);
|
||||
|
||||
set(ConfPaths.BLOCKPLACE_SPEED_CHECK, "default", 785);
|
||||
set(ConfPaths.BLOCKPLACE_SPEED_INTERVAL, 45L, 785);
|
||||
@@ -562,6 +565,11 @@ public class DefaultConfig extends ConfigFile {
|
||||
set(ConfPaths.NET_ATTACKFREQUENCY_SECONDS_EIGHT, 100, 785);
|
||||
set(ConfPaths.NET_ATTACKFREQUENCY_ACTIONS, "cancel vl>30 cancel log:attackfrequency:0:5:if vl>160 cancel log:attackfrequency:0:0:cif cmd:kickattackfrequency", 785);
|
||||
|
||||
// FightSync
|
||||
set(ConfPaths.NET_FIGHTSYNC_ACTIVE, "default", 1154);
|
||||
set(ConfPaths.NET_FIGHTSYNC_THRESHOLD, 5, 1154);
|
||||
set(ConfPaths.NET_FIGHTSYNC_RESETCOUNT, 11, 1154);
|
||||
set(ConfPaths.NET_FIGHTSYNC_ACTIONS, "vl<10 log:fightsync:0:5:if", 1154);
|
||||
// FlyingFrequency
|
||||
set(ConfPaths.NET_FLYINGFREQUENCY_ACTIVE, "default", 785);
|
||||
set(ConfPaths.NET_FLYINGFREQUENCY_SECONDS, 5, 785);
|
||||
@@ -621,6 +629,7 @@ public class DefaultConfig extends ConfigFile {
|
||||
set(ConfPaths.STRINGS + ".fastheal", start + "regenerates health faster than usual (health [health])" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".fastplace", start + "tried to place too many blocks" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".fdirection", start + "tried to hit an entity out of line of sight" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".fightsync", start + "client and server fight data out of sync" + end, 1154);
|
||||
set(ConfPaths.STRINGS + ".flyshort", start + "tried to move unexpectedly" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".flylong", start
|
||||
+ "tried to move: [locationfrom] -> [locationto], d=[distance] ([tags])" + end, 1067);
|
||||
@@ -666,6 +675,7 @@ public class DefaultConfig extends ConfigFile {
|
||||
set(ConfPaths.STRINGS + ".noswing", start + "didn't swing arm" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".passable", start + "moved into a block ([blocktype]) from [locationfrom] to [locationto] distance [distance] " + end, 785);
|
||||
set(ConfPaths.STRINGS + ".relog", start + "relogs too fast" + end, 785);
|
||||
set(ConfPaths.STRINGS + ".scaffold", start + "placed against a block face they did not interact with" + end, 1154);
|
||||
set(ConfPaths.STRINGS + ".tellchatnormal", tell + "&cNCP: &eToo many messages, slow down...", 785);
|
||||
set(ConfPaths.STRINGS + ".tempkick1", "ncp tempkick [player] 1 Wait a minute!", 785);
|
||||
set(ConfPaths.STRINGS + ".tempkick5", "ncp tempkick [player] 5 You have five minutes to think about it!", 785);
|
||||
|
||||
Reference in new issue
Block a user