· 6 years ago · May 02, 2019, 05:54 PM
1package me.harry0198.base;
2
3import java.io.File;
4import java.io.IOException;
5import java.sql.Connection;
6import java.sql.DriverManager;
7import java.sql.PreparedStatement;
8import java.sql.SQLException;
9import java.util.HashMap;
10import java.util.Map;
11import java.util.logging.Level;
12import java.util.stream.Stream;
13
14import org.bukkit.Bukkit;
15import org.bukkit.Sound;
16import org.bukkit.configuration.file.YamlConfiguration;
17import org.bukkit.entity.Player;
18import org.bukkit.generator.ChunkGenerator;
19import org.bukkit.plugin.RegisteredServiceProvider;
20import org.bukkit.plugin.java.JavaPlugin;
21
22import co.aikar.commands.PaperCommandManager;
23import me.harry0198.base.commands.admin.CommandCreateWorld;
24import me.harry0198.base.commands.admin.run.FirstRun;
25import me.harry0198.base.commands.homes.CommandHome;
26import me.harry0198.base.commands.management.CommandCreate;
27import me.harry0198.base.commands.management.CommandDelete;
28import me.harry0198.base.commands.management.CommandMenu;
29import me.harry0198.base.commands.member.InviteCommand;
30import me.harry0198.base.commands.member.JoinCommand;
31import me.harry0198.base.commands.member.KickCommand;
32import me.harry0198.base.commands.member.LeaveCommand;
33import me.harry0198.base.commands.member.ListCommand;
34import me.harry0198.base.commands.member.RejectCommand;
35import me.harry0198.base.configuration.Conditions;
36import me.harry0198.base.generator.WorldGenerator;
37import me.harry0198.base.listeners.InventoryClick;
38import me.harry0198.base.listeners.PlayerEntity;
39import net.milkbowl.vault.economy.Economy;
40import net.milkbowl.vault.permission.Permission;
41
42public class Base extends JavaPlugin {
43
44 private static Connection connection;
45 private String host, database, username, password;
46 private int port;
47 private PaperCommandManager manager;
48 private static Economy economy;
49 private static Permission perms = null;
50
51 private File gridData;
52 private YamlConfiguration modifyGridData;
53
54 private Map<Player, Player> invite = new HashMap<>();
55 public Map<String, String> selectedPlayer = new HashMap<>();
56
57
58 /**
59 * Log any message to console with any level.
60 *
61 * @param level the log level to log on.
62 * @param msg the message to log.
63 */
64 public void log(Level level, String msg) {
65 getLogger().log(level, msg);
66 }
67
68 /**
69 * Log a message to console on INFO level.
70 *
71 * @param msg the msg you want to log.
72 */
73 public void info(String msg) {
74 log(Level.INFO, msg);
75 }
76
77 /**
78 * Log a message to console on WARNING level.
79 *
80 * @param msg the msg you want to log.
81 */
82 public void warn(String msg) {
83 log(Level.WARNING, msg);
84 }
85
86 /**
87 * Log a message to console on SEVERE level.
88 *
89 * @param msg the msg you want to log.
90 */
91 public void severe(String msg) {
92 log(Level.SEVERE, msg);
93 }
94
95 @SuppressWarnings("deprecation")
96 @Override
97 public void onEnable() {
98 // Check if the server is running Vault
99 if (!Bukkit.getPluginManager().isPluginEnabled("Vault")) {
100 warn("Vault has not been located. Stopping Server...");
101 Bukkit.getPluginManager().disablePlugin(this);
102 return;
103 }
104
105
106
107 host = "localhost";
108 port = 3306;
109 database = "Base Database";
110 username = "root";
111 password = "";
112
113 try {
114 openConnection();
115
116 info("SQL Database successfully connected");
117 } catch (SQLException x) {
118 x.printStackTrace();
119 }
120 try {
121 PreparedStatement ps = connection.prepareStatement(
122 "CREATE TABLE IF NOT EXISTS PLAYER_DATA(UUID varchar(36) NOT NULL, " + "BASE_OWNER varchar(36), "
123 + "ISLANDS int(1), " + "OWNER boolean, " + "REGION_MIN_X int(30), "
124 + "REGION_MAX_X int(30), " + "REGION_MIN_Z int(30), " + "REGION_MAX_Z int(30), "
125 + "X int(30), " + "Z int(30), " + "COOP_ISLAND varchar(255), " + "RATINGS_LEFT int(1));");
126
127 PreparedStatement ps2 = connection.prepareStatement(
128 "CREATE TABLE IF NOT EXISTS ISLAND_DATA(ISLAND_CODE varchar(255), " + "TIME int(4), "
129 + "RATINGS int(3), " + "WEATHER varchar(36), " + "BASE_OWNER varchar(36));");
130
131 PreparedStatement ps3 = connection
132 .prepareStatement("CREATE TABLE IF NOT EXISTS ISLAND_LIST(ISLAND_CODE varchar(255), "
133 + "no1 varchar(36), " + "no2 varchar(36), " + "no3 varchar(36), " + "no4 varchar(36), "
134 + "no5 varchar(36), " + "no6 varchar(36), " + "no7 varchar(36), " + "no8 varchar(36));");
135
136 ps3.executeUpdate();
137 ps2.executeUpdate();
138 ps.executeUpdate();
139 } catch (SQLException e) {
140 e.printStackTrace();
141 }
142
143 initializeFiles();
144
145 this.getServer().getPluginManager().registerEvents(new PlayerEntity(), this);
146 this.getServer().getPluginManager().registerEvents(new InventoryClick(this), this);
147
148 // Load Vault
149 info("Hooking into Vault..");
150 // Setup Vaults Economy Hook
151 setupEconomy();
152 // Setup Vaults Permission Hook
153 setupPermissions();
154 info("Hooked into Vault!");
155
156 manager = new PaperCommandManager(this);
157 try {
158 Conditions.class.newInstance().registerConditions(manager);
159 } catch (InstantiationException | IllegalAccessException e) {
160 e.printStackTrace();
161 }
162 manager.enableUnstableAPI("help");
163 // Lists Commands
164 Stream.of(
165 //Admin Commands
166 new CommandCreateWorld(this),
167 new BaseCommandTest(),
168 //Management Commands
169 new CommandHome(this),
170 new CommandCreate(this),
171 new CommandDelete(this),
172 //Coop Commands
173 new InviteCommand(this),
174 new JoinCommand(this),
175 new KickCommand(this),
176 new LeaveCommand(this),
177 new ListCommand(),
178 new RejectCommand(this),
179 new CommandMenu()
180
181 ).forEach(manager::registerCommand);
182
183 }
184
185 private void initializeFiles() {
186 File folder = new File(Bukkit.getServer().getPluginManager().getPlugin("Base").getDataFolder(), "PluginData");
187 if (!folder.exists()) {
188 folder.mkdirs();
189 }
190
191 gridData = new File(folder, "GridData.yml");
192
193 if (!(gridData.exists())) {
194
195 try {
196 gridData.createNewFile();
197 } catch (IOException e) {
198 e.printStackTrace();
199 }
200 modifyGridData = YamlConfiguration.loadConfiguration(gridData);
201
202 FirstRun f = new FirstRun(this);
203 f.onFirstRun();
204 }
205
206 modifyGridData = YamlConfiguration.loadConfiguration(gridData);
207 info("GridData.yml Loaded");
208 }
209
210 private void openConnection() throws SQLException {
211
212 if (connection != null && !connection.isClosed()) {
213 return;
214 }
215 connection = DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database,
216 this.username, this.password);
217 }
218
219 public static PreparedStatement prepareStatement(String query) {
220 PreparedStatement ps = null;
221 try {
222 ps = connection.prepareStatement(query);
223 } catch (SQLException e) {
224 e.printStackTrace();
225 }
226 return ps;
227 }
228
229 /**
230 * Implement Vault's Economy API
231 */
232 private void setupEconomy() {
233 RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager()
234 .getRegistration(Economy.class);
235 if (economyProvider != null)
236 economy = economyProvider.getProvider();
237 }
238
239 /**
240 * Implement Vault's Permission API
241 */
242 private boolean setupPermissions() {
243 RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
244 perms = rsp.getProvider();
245 return perms != null;
246 }
247
248 @Override
249 public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
250 return new WorldGenerator(id);
251 }
252
253 public static Permission getPermissions() {
254 return perms;
255 }
256
257 public static Economy getEconomy() {
258 return economy;
259 }
260
261 public YamlConfiguration getGridData() {
262 return modifyGridData;
263 }
264
265 public File getGridFile() {
266 return gridData;
267 }
268
269 public Map<Player, Player> getInvite() {
270 return invite;
271 }
272
273 @Override
274 public void onDisable() {
275 try {
276 connection.close();
277 info("Closed database connection");
278 } catch (SQLException e) {
279 e.printStackTrace();
280 }
281 }
282 public void playSound(Player player, Sound sound) {
283 player.playSound(player.getLocation(), sound, 1, 1);
284 }