NoCheatPlus/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/fight/FightConfig.java

150 lines
7.0 KiB
Java

/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.neatmonster.nocheatplus.checks.fight;
import fr.neatmonster.nocheatplus.actions.ActionList;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.access.ACheckConfig;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.versions.Bugs;
import fr.neatmonster.nocheatplus.compat.versions.ServerVersion;
import fr.neatmonster.nocheatplus.components.config.value.OverrideType;
import fr.neatmonster.nocheatplus.config.ConfPaths;
import fr.neatmonster.nocheatplus.config.ConfigFile;
import fr.neatmonster.nocheatplus.permissions.Permissions;
import fr.neatmonster.nocheatplus.worlds.IWorldData;
/**
* Configurations specific for the "fight" checks. Every world gets one of these assigned to it, or if a world doesn't
* get it's own, it will use the "global" version.
*/
public class FightConfig extends ACheckConfig {
public final double angleThreshold;
public final ActionList angleActions;
public final long toolChangeAttackPenalty;
public final double criticalFallDistance;
public final ActionList criticalActions;
public final boolean directionStrict;
public final long directionPenalty;
public final ActionList directionActions;
public final long fastHealInterval;
public final long fastHealBuffer;
public final ActionList fastHealActions;
public final long godModeLagMinAge;
public final long godModeLagMaxAge;
public final ActionList godModeActions;
public final ActionList noSwingActions;
public final long reachPenalty;
public final boolean reachPrecision;
public final boolean reachReduce;
public final double reachSurvivalDistance;
public final double reachReduceDistance;
public final double reachReduceStep;
public final ActionList reachActions;
public final ActionList selfHitActions;
public final int speedLimit;
public final int speedBuckets;
public final long speedBucketDur;
public final float speedBucketFactor;
public final int speedShortTermLimit;
public final int speedShortTermTicks;
public final ActionList speedActions;
public final ActionList wrongTurnActions;
// Special flags:
public final boolean cancelDead;
public final boolean knockBackVelocityPvP;
/** Maximum latency counted in ticks for the loop checks (reach, direction). */
public final long loopMaxLatencyTicks = 15; // TODO: Configurable, sections for players and entities.
/**
* Instantiates a new fight configuration.
*
* @param data
* the data
*/
public FightConfig(final IWorldData worldData) {
super(worldData);
final ConfigFile config = worldData.getRawConfiguration();
angleThreshold = config.getDouble(ConfPaths.FIGHT_ANGLE_THRESHOLD);
angleActions = config.getOptimizedActionList(ConfPaths.FIGHT_ANGLE_ACTIONS, Permissions.FIGHT_ANGLE);
toolChangeAttackPenalty = config.getLong(ConfPaths.FIGHT_TOOLCHANGEPENALTY);
criticalFallDistance = config.getDouble(ConfPaths.FIGHT_CRITICAL_FALLDISTANCE);
criticalActions = config.getOptimizedActionList(ConfPaths.FIGHT_CRITICAL_ACTIONS, Permissions.FIGHT_CRITICAL);
directionStrict = config.getBoolean(ConfPaths.FIGHT_DIRECTION_STRICT);
directionPenalty = config.getLong(ConfPaths.FIGHT_DIRECTION_PENALTY);
directionActions = config.getOptimizedActionList(ConfPaths.FIGHT_DIRECTION_ACTIONS, Permissions.FIGHT_DIRECTION);
if (ServerVersion.compareMinecraftVersion("1.9") >= 0) {
worldData.overrideCheckActivation(CheckType.FIGHT_FASTHEAL,
AlmostBoolean.NO, OverrideType.PERMANENT,
true);
}
fastHealInterval = config.getLong(ConfPaths.FIGHT_FASTHEAL_INTERVAL);
fastHealBuffer = config.getLong(ConfPaths.FIGHT_FASTHEAL_BUFFER);
fastHealActions = config.getOptimizedActionList(ConfPaths.FIGHT_FASTHEAL_ACTIONS, Permissions.FIGHT_FASTHEAL);
godModeLagMinAge = config.getLong(ConfPaths.FIGHT_GODMODE_LAGMINAGE);
godModeLagMaxAge = config.getLong(ConfPaths.FIGHT_GODMODE_LAGMAXAGE);
godModeActions = config.getOptimizedActionList(ConfPaths.FIGHT_GODMODE_ACTIONS, Permissions.FIGHT_GODMODE);
noSwingActions = config.getOptimizedActionList(ConfPaths.FIGHT_NOSWING_ACTIONS, Permissions.FIGHT_NOSWING);
reachSurvivalDistance = config.getDouble(ConfPaths.FIGHT_REACH_SURVIVALDISTANCE, 3.5, 6.0, 4.4);
reachPenalty = config.getLong(ConfPaths.FIGHT_REACH_PENALTY);
reachPrecision = config.getBoolean(ConfPaths.FIGHT_REACH_PRECISION);
reachReduce = config.getBoolean(ConfPaths.FIGHT_REACH_REDUCE);
reachReduceDistance = config.getDouble(ConfPaths.FIGHT_REACH_REDUCEDISTANCE, 0, reachSurvivalDistance, 0.9);
reachReduceStep = config.getDouble(ConfPaths.FIGHT_REACH_REDUCESTEP, 0, reachReduceDistance, 0.15);
reachActions = config.getOptimizedActionList(ConfPaths.FIGHT_REACH_ACTIONS, Permissions.FIGHT_REACH);
selfHitActions = config.getOptimizedActionList(ConfPaths.FIGHT_SELFHIT_ACTIONS, Permissions.FIGHT_SELFHIT);
speedLimit = config.getInt(ConfPaths.FIGHT_SPEED_LIMIT);
speedBuckets = config.getInt(ConfPaths.FIGHT_SPEED_BUCKETS_N, 6);
speedBucketDur = config.getLong(ConfPaths.FIGHT_SPEED_BUCKETS_DUR, 333);
speedBucketFactor = (float) config.getDouble(ConfPaths.FIGHT_SPEED_BUCKETS_FACTOR, 1f);
speedShortTermLimit = config.getInt(ConfPaths.FIGHT_SPEED_SHORTTERM_LIMIT);
speedShortTermTicks = config.getInt(ConfPaths.FIGHT_SPEED_SHORTTERM_TICKS);
speedActions = config.getOptimizedActionList(ConfPaths.FIGHT_SPEED_ACTIONS, Permissions.FIGHT_SPEED);
wrongTurnActions = config.getOptimizedActionList(ConfPaths.FIGHT_WRONGTURN_ACTIONS,
CheckType.FIGHT_WRONGTURN.getPermission());
cancelDead = config.getBoolean(ConfPaths.FIGHT_CANCELDEAD);
AlmostBoolean ref = config.getAlmostBoolean(ConfPaths.FIGHT_PVP_KNOCKBACKVELOCITY, AlmostBoolean.MAYBE);
knockBackVelocityPvP = ref == AlmostBoolean.MAYBE ? Bugs.shouldPvpKnockBackVelocity() : ref.decide();
}
}