diff options
Diffstat (limited to 'EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/actions/types/ActionList.java')
-rw-r--r-- | EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/actions/types/ActionList.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/actions/types/ActionList.java b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/actions/types/ActionList.java new file mode 100644 index 000000000..25a7ba296 --- /dev/null +++ b/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/actions/types/ActionList.java @@ -0,0 +1,86 @@ +package com.earth2me.essentials.anticheat.actions.types; + +import com.earth2me.essentials.anticheat.actions.Action; +import java.util.*; + + +/** + * A list of actions, that associates actions to tresholds. It allows to retrieve all actions that match a certain + * treshold + * + */ +public class ActionList +{ + // This is a very bad design decision, but it's also really + // convenient to define this here + public final String permissionSilent; + + public ActionList(String permission) + { + this.permissionSilent = permission + ".silent"; + } + // If there are no actions registered, we still return an Array. It's + // just empty/size=0 + private final static Action[] emptyArray = new Action[0]; + // The actions of this ActionList, "bundled" by treshold (violation level) + private final Map<Integer, Action[]> actions = new HashMap<Integer, Action[]>(); + // The tresholds of this list + private final List<Integer> tresholds = new ArrayList<Integer>(); + + /** + * Add an entry to this actionList. The list will be sorted by tresholds automatically after the insertion. + * + * @param treshold The minimum violation level a player needs to have to be suspected to the given actions + * @param actions The actions that will be used if the player reached the accompanying treshold/violation level + */ + public void setActions(Integer treshold, Action[] actions) + { + + if (!this.tresholds.contains(treshold)) + { + this.tresholds.add(treshold); + Collections.sort(this.tresholds); + } + + this.actions.put(treshold, actions); + } + + /** + * Get a list of actions that match the violation level. The only method that has to be called by a check + * + * @param violationLevel The violation level that should be matched. + * @return The array of actions whose treshold was closest to the violationLevel but not bigger + */ + public Action[] getActions(double violationLevel) + { + + Integer result = null; + + for (Integer treshold : tresholds) + { + if (treshold <= violationLevel) + { + result = treshold; + } + } + + if (result != null) + { + return actions.get(result); + } + else + { + return emptyArray; + } + } + + /** + * Get a sorted list of the tresholds/violation levels that were used in this list + * + * @return The sorted list of tresholds + */ + public List<Integer> getTresholds() + { + return tresholds; + } +} |