summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/bungeeBans/Main.java
blob: 6b0ca895475355b7d2af774c637955244b774ceb (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.redstoner.bungeeBans;

import com.redstoner.bungeeBans.commands.*;
import com.redstoner.bungeeBans.json.IPBan;
import com.redstoner.bungeeBans.json.PlayerBan;
import com.redstoner.bungeeBans.listeners.BanJoinListener;
import com.redstoner.bungeeBans.listeners.DisableJoinListener;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.plugin.PluginManager;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.NoSuchFileException;

public class Main extends Plugin {
	private File playerBanFile = new File("banned-players.json");
	private File ipBanFile     = new File("banned-ips.json");

	private BanManager<PlayerBan> playerBanManager = new BanManager<>(playerBanFile, PlayerBan.class);
	private BanManager<IPBan>     ipBanManager     = new BanManager<>(ipBanFile, IPBan.class);

	private boolean shouldSave = true;

	@Override
	public void onEnable() {
		if (
				loadBans("player", playerBanManager, playerBanFile) ||
				loadBans("IP", ipBanManager, ipBanFile)
		) {
			return;
		}

		PluginManager pm = getProxy().getPluginManager();

		pm.registerCommand(this, new BanCommand(playerBanManager, this));
		pm.registerCommand(this, new UnbanCommand(playerBanManager));
		pm.registerCommand(this, new GetBanCommand(playerBanManager));

		pm.registerCommand(this, new BanIPCommand(ipBanManager, this));
		pm.registerCommand(this, new UnbanIPCommand(ipBanManager));
		pm.registerCommand(this, new GetIPBanCommand(ipBanManager));

		pm.registerListener(this, new BanJoinListener<>("player", playerBanManager));
		pm.registerListener(this, new BanJoinListener<>("IP", ipBanManager));
	}

	@Override
	public void onDisable() {
		if (shouldSave) {
			saveBans("player", playerBanManager);
			saveBans("IP", ipBanManager);
		}
	}

	private void disable() {
		getLogger().severe("Players will not be able to join because of a severe error!!! Check the log output above!");

		shouldSave = false;
		getProxy().getPluginManager().registerListener(this, new DisableJoinListener());
	}

	private boolean loadBans(String name, BanManager banManager, File banFile) {
		try {
			getLogger().info("Loading " + name + " bans...");
			banManager.loadBans();
			getLogger().info("Loaded " + name + " bans!");

			return false;
		} catch (FileNotFoundException | NoSuchFileException e) {
			getLogger().warning("Ban file (" + name + ") does not exist! Creating!");

			try {
				if (banFile.createNewFile()) {
					getLogger().info("Ban file (" + name + ") created! Retrying load...");
					onEnable();
					return false;
				}
			} catch (IOException e2) {
				getLogger().severe(e2.getMessage());
				e2.printStackTrace();
			}

			getLogger().severe("Ban file (" + name + ") could not be created!");

			disable();
			return true;
		} catch (Exception e) {
			getLogger().severe("Failed to load " + name + " bans: " + e.getMessage());
			e.printStackTrace();

			disable();
			return true;
		}
	}

	private void saveBans(String name, BanManager banManager) {
		try {
			playerBanManager.saveBans();
			getLogger().info("Saved " + name + " bans to file!");
		} catch (IOException e) {
			getLogger().severe("Failed to save " + name + " bans: " + e.getMessage());
			e.printStackTrace();
		}
	}
}