mirror of
https://github.com/essentials/Essentials.git
synced 2025-10-04 18:11:43 +02:00
184 lines
3.9 KiB
Java
184 lines
3.9 KiB
Java
package com.earth2me.essentials.anticheat.config;
|
|
|
|
import com.earth2me.essentials.anticheat.actions.Action;
|
|
import com.earth2me.essentials.anticheat.actions.types.*;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
* Helps with creating Actions out of text string definitions
|
|
*
|
|
*/
|
|
public class ActionFactory
|
|
{
|
|
private static final Map<String, Object> lib = new HashMap<String, Object>();
|
|
|
|
public ActionFactory(Map<String, Object> library)
|
|
{
|
|
lib.putAll(library);
|
|
}
|
|
|
|
public Action createAction(String actionDefinition)
|
|
{
|
|
|
|
actionDefinition = actionDefinition.toLowerCase();
|
|
|
|
if (actionDefinition.equals("cancel"))
|
|
{
|
|
return new SpecialAction();
|
|
}
|
|
|
|
if (actionDefinition.startsWith("log:"))
|
|
{
|
|
return parseLogAction(actionDefinition.split(":", 2)[1]);
|
|
}
|
|
|
|
if (actionDefinition.startsWith("cmd:"))
|
|
{
|
|
return parseCmdAction(actionDefinition.split(":", 2)[1]);
|
|
}
|
|
|
|
throw new IllegalArgumentException("NoCheat doesn't understand action '" + actionDefinition + "' at all");
|
|
}
|
|
|
|
private Action parseCmdAction(String definition)
|
|
{
|
|
String[] parts = definition.split(":");
|
|
String name = parts[0];
|
|
Object command = lib.get(parts[0]);
|
|
int delay = 0;
|
|
int repeat = 1;
|
|
|
|
if (command == null)
|
|
{
|
|
throw new IllegalArgumentException("NoCheat doesn't know command '" + name + "'. Have you forgotten to define it?");
|
|
}
|
|
|
|
if (parts.length > 1)
|
|
{
|
|
try
|
|
{
|
|
delay = Integer.parseInt(parts[1]);
|
|
repeat = Integer.parseInt(parts[2]);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// TODO
|
|
System.out.println("NoCheat couldn't parse details of command '" + definition + "', will use default values instead.");
|
|
delay = 0;
|
|
repeat = 1;
|
|
}
|
|
}
|
|
|
|
return new ConsolecommandAction(name, delay, repeat, command.toString());
|
|
}
|
|
|
|
private Action parseLogAction(String definition)
|
|
{
|
|
String[] parts = definition.split(":");
|
|
String name = parts[0];
|
|
Object message = lib.get(parts[0]);
|
|
int delay = 0;
|
|
int repeat = 1;
|
|
boolean toConsole = true;
|
|
boolean toFile = true;
|
|
boolean toChat = true;
|
|
|
|
if (message == null)
|
|
{
|
|
throw new IllegalArgumentException("NoCheat doesn't know log message '" + name + "'. Have you forgotten to define it?");
|
|
}
|
|
|
|
try
|
|
{
|
|
delay = Integer.parseInt(parts[1]);
|
|
repeat = Integer.parseInt(parts[2]);
|
|
toConsole = parts[3].contains("c");
|
|
toChat = parts[3].contains("i");
|
|
toFile = parts[3].contains("f");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println("NoCheat couldn't parse details of log action '" + definition + "', will use default values instead.");
|
|
e.printStackTrace();
|
|
delay = 0;
|
|
repeat = 1;
|
|
toConsole = true;
|
|
toFile = true;
|
|
toChat = true;
|
|
}
|
|
|
|
return new LogAction(name, delay, repeat, toChat, toConsole, toFile, message.toString());
|
|
}
|
|
|
|
public Action[] createActions(String... definitions)
|
|
{
|
|
List<Action> actions = new ArrayList<Action>();
|
|
|
|
for (String def : definitions)
|
|
{
|
|
if (def.length() == 0)
|
|
{
|
|
continue;
|
|
}
|
|
try
|
|
{
|
|
actions.add(createAction(def));
|
|
}
|
|
catch (IllegalArgumentException e)
|
|
{
|
|
System.out.println(e.getMessage());
|
|
actions.add(new DummyAction(def));
|
|
}
|
|
}
|
|
|
|
return actions.toArray(new Action[actions.size()]);
|
|
}
|
|
|
|
public ActionList createActionList(String definition, String permission)
|
|
{
|
|
ActionList list = new ActionList(permission);
|
|
|
|
boolean first = true;
|
|
|
|
for (String s : definition.split("vl>"))
|
|
{
|
|
s = s.trim();
|
|
|
|
if (s.length() == 0)
|
|
{
|
|
first = false;
|
|
continue;
|
|
}
|
|
|
|
try
|
|
{
|
|
Integer vl;
|
|
String def;
|
|
if (first)
|
|
{
|
|
first = false;
|
|
vl = 0;
|
|
def = s;
|
|
}
|
|
else
|
|
{
|
|
String[] listEntry = s.split("\\s+", 2);
|
|
vl = Integer.parseInt(listEntry[0]);
|
|
def = listEntry[1];
|
|
}
|
|
list.setActions(vl, createActions(def.split("\\s+")));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println("NoCheat couldn't parse action definition 'vl:" + s + "'");
|
|
}
|
|
}
|
|
|
|
return list;
|
|
}
|
|
}
|