summaryrefslogtreecommitdiffstats
path: root/EssentialsAntiCheat/src/com/earth2me/essentials/anticheat/config/NoCheatConfiguration.java
blob: e137ff480c906b222f6726be790645cc1c2b5408 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.earth2me.essentials.anticheat.config;

import com.earth2me.essentials.anticheat.actions.Action;
import com.earth2me.essentials.anticheat.actions.types.ActionList;
import java.lang.reflect.Field;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.yaml.snakeyaml.DumperOptions;


public class NoCheatConfiguration extends YamlConfiguration
{
	private ActionFactory factory;

	@Override
	public String saveToString()
	{
		// Some reflection wizardry to avoid having a lot of
		// linebreaks in the yml file, and get a "footer" into the file
		try
		{
			Field op;
			op = YamlConfiguration.class.getDeclaredField("yamlOptions");
			op.setAccessible(true);
			DumperOptions options = (DumperOptions)op.get(this);
			options.setWidth(200);
		}
		catch (Exception e)
		{
		}

		String result = super.saveToString();

		return result;
	}

	/**
	 * Do this after reading new data
	 */
	public void regenerateActionLists()
	{
		factory = new ActionFactory(((MemorySection)this.get(ConfPaths.STRINGS)).getValues(false));
	}

	/**
	 * A convenience method to get action lists from the config
	 *
	 * @param path
	 * @return
	 */
	public ActionList getActionList(String path, String permission)
	{

		String value = this.getString(path);
		return factory.createActionList(value, permission);
	}

	/**
	 * Savely store ActionLists back into the yml file
	 *
	 * @param path
	 * @param list
	 */
	public void set(String path, ActionList list)
	{
		StringBuilder string = new StringBuilder();

		for (int treshold : list.getTresholds())
		{
			if (treshold > 0)
			{
				string.append(" vl>").append(treshold);
			}
			for (Action action : list.getActions(treshold))
			{
				string.append(" ").append(action);
			}
		}

		set(path, string.toString().trim());
	}
}