· 5 years ago · Sep 13, 2020, 03:06 PM
1package me.PlatinoMC.Login;
2
3import java.util.HashMap;
4import java.util.Map;
5
6import org.bukkit.Bukkit;
7import org.bukkit.Location;
8import org.bukkit.World;
9import org.bukkit.command.Command;
10import org.bukkit.command.CommandSender;
11import org.bukkit.craftbukkit.v1_8_R3.command.ServerCommandSender;
12import org.bukkit.entity.Player;
13import org.bukkit.event.EventHandler;
14import org.bukkit.event.Listener;
15import org.bukkit.event.block.BlockBreakEvent;
16import org.bukkit.event.inventory.InventoryCloseEvent;
17import org.bukkit.event.inventory.InventoryOpenEvent;
18import org.bukkit.event.player.PlayerCommandPreprocessEvent;
19import org.bukkit.event.player.PlayerJoinEvent;
20import org.bukkit.event.player.PlayerMoveEvent;
21import org.bukkit.event.player.PlayerQuitEvent;
22import org.bukkit.plugin.java.JavaPlugin;
23
24import com.google.common.base.Strings;
25import com.mysql.jdbc.PreparedStatement;
26
27import net.md_5.bungee.api.ChatColor;
28import net.minecraft.server.v1_8_R3.MobSpawnerAbstract.a;
29
30import java.security.Key;
31import java.security.NoSuchAlgorithmException;
32import java.security.SecureRandom;
33import java.sql.Connection;
34import java.sql.DriverManager;
35import java.sql.ResultSet;
36import java.sql.SQLException;
37import java.text.Format.Field;
38import java.util.ArrayList;
39import java.util.Base64;
40import javax.crypto.Cipher;
41import javax.crypto.KeyGenerator;
42import javax.crypto.NoSuchPaddingException;
43import javax.crypto.SecretKey;
44import javax.crypto.spec.SecretKeySpec;
45
46import java.awt.List;
47import java.awt.event.ActionEvent;
48import java.awt.event.ActionListener;
49import java.io.BufferedReader;
50import java.io.FileReader;
51import java.io.IOException;
52import java.lang.reflect.Constructor;
53import java.lang.reflect.Modifier;
54import java.nio.file.Files;
55import java.nio.file.Path;
56import java.nio.file.Paths;
57
58import javax.swing.Timer;
59
60
61public class Main extends JavaPlugin implements Listener{
62 static Cipher cipher;
63 public HashMap<String, Boolean> logedin = new HashMap<String, Boolean>();
64 public HashMap<String, Boolean> isregistered = new HashMap<String, Boolean>();
65 String prefix = ChatColor.AQUA + "[" + ChatColor.BLUE + "PlatinoMC" + ChatColor.AQUA + "]" + ChatColor.RESET;
66 public static ArrayList<String> cpass = new ArrayList<String>();
67 @Override
68 public void onEnable() {
69 String abspath = System.getProperty("user.dir") + "\\Plugins\\LoginPlatino";
70 Path path = Paths.get(abspath);
71 try {
72 Files.createDirectories(path);
73 BufferedReader reader = new BufferedReader(new FileReader(abspath + "\\commonpasswords.txt"));
74 String line;
75
76 while ((line = reader.readLine()) != null) {
77 cpass.add(line);
78 }
79 reader.close();
80 } catch (IOException e) {
81 e.printStackTrace();
82 }
83 timer.start();
84 this.getServer().getPluginManager().registerEvents(this, this);
85 Bukkit.getServer().getConsoleSender().sendMessage(prefix + " LoginPlatinoMC enabled!");
86 for (Player player : Bukkit.getServer().getOnlinePlayers()) {
87 player.kickPlayer(prefix + " Por favor, unete de nuevo para hacer login. Causa: Reload");
88 }
89 }
90
91 @Override
92 public void onDisable() {
93 timer.stop();
94 Bukkit.getServer().getConsoleSender().sendMessage(prefix + " LoginPlatinoMC disabled!");
95 }
96
97 Timer timer = new Timer(10000, new ActionListener() {
98 @Override
99 public void actionPerformed(ActionEvent e) {
100
101 for (Map.Entry<String, Boolean> entry : logedin.entrySet()) {
102 if(entry.getValue() == false) {
103 if (isregistered.get(entry.getKey()) == false) {
104 Bukkit.getServer().getPlayer(entry.getKey()).sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', "$aUsa $b$l/register <contraseña> <contraseña>$l$a\n para registrarte!"));
105 }else {
106 Bukkit.getServer().getPlayer(entry.getKey()).sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', "$aUsa $b$l/login <contraseña>$l$a para iniciar sesion!"));
107 }
108
109 }else {
110 logedin.remove(entry.getKey(), true);
111
112 }
113 }
114 }
115 });
116
117
118 public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
119 if (!lbl.equalsIgnoreCase("login") && !lbl.equalsIgnoreCase("register")) {
120 return false;
121 }
122
123 if (!(sender instanceof Player)) {
124 sender.sendMessage("Hola consola :)");
125 return false;
126 }
127 Player player = (Player) sender;
128
129 if (lbl.equalsIgnoreCase("login")) {
130
131 if (isregistered.get(sender.getName()) == false) {
132
133 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aNo estas registrado, usa $l/register$l."));
134 return false;
135 }
136
137 if (logedin.get(player.getName())) {
138 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aYa has iniciado sesion!."));
139 return false;
140 }
141
142 if (args.length < 1) {
143 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aUso: $l/login <contraseña>$l."));
144 return false;
145 }
146
147
148
149 try {
150
151
152 Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/db_minecraft", "root", "Ggo61ktHdFEaqtlE");
153 java.sql.Statement st = conexion.createStatement();
154
155 ResultSet rs = st.executeQuery("SELECT * FROM plugin_accounts WHERE name='" + sender.getName() + "'");
156 String password = "";
157 String key = "";
158 while (rs.next())
159 {
160 password = rs.getString("password");
161 key = rs.getString("decodekey");
162 }
163
164 byte[] decodedKey = Base64.getDecoder().decode(key);
165 SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
166
167 String decryptedpassword = decrypt(password, originalKey);
168
169 if (decryptedpassword.equals(args[0])) {
170 logedin.replace(sender.getName(), true);
171 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aHas iniciado sesion."));
172 }else {
173 player.kickPlayer(prefix + ChatColor.RED + " Contraseña Incorrecta. ");
174 }
175
176 }catch(Exception err) {
177
178
179 player.kickPlayer(prefix + " An error ocurred, please try again. " + err);
180 }
181 }
182
183 if (lbl.equalsIgnoreCase("register")) {
184 if (isregistered.get(sender.getName()) == true) {
185
186 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aYa estas registrado, usa $l/login$l."));
187 return false;
188 }
189
190 if (args.length < 2) {
191 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $aUso: $l/register <contraseña> <contraseña>$l."));
192 return false;
193 }
194
195 String pass1 = args[0];
196 String pass2 = args[1];
197
198 if (pass1.equals(pass2)) {
199
200 }else {
201 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $cLas contraseñas no coinciden."));
202 sender.sendMessage(ChatColor.translateAlternateColorCodes('$', pass1 + "-" + pass2));
203 return false;
204 }
205
206 if (cpass.contains(pass1) || pass1.length() < 5) {
207 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $cEsa contraseña no es lo suficientemente segura. Asegurate de usar mas de 5 caracteres y una contraseña no comun."));
208 return false;
209 }
210
211 try {
212
213
214 // decode the base64 encoded string
215
216 String k = GenKey();
217
218 // rebuild key using SecretKeySpec
219 SecretKey originalKey = decodeKeyFromString(k);
220
221 String encpass = encrypt(pass1, originalKey);
222
223
224 Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/db_minecraft", "root", "Ggo61ktHdFEaqtlE");
225 java.sql.Statement st = conexion.createStatement();
226 String encodedKey = Base64.getEncoder().encodeToString(originalKey.getEncoded());
227
228 String IP = player.getAddress().toString().replace("/", "");
229 String[] ip = IP.split(":");
230
231 String sql = "INSERT INTO plugin_accounts (name,password,lastip,decodekey) " +
232 "VALUES (?,?,?,?)";
233
234 java.sql.PreparedStatement preparedStatement = conexion.prepareStatement(sql);
235 preparedStatement.setString(1, player.getName());
236 preparedStatement.setString(2, encpass);
237 preparedStatement.setString(3, ip[0]);
238 preparedStatement.setString(4, encodedKey);
239 preparedStatement.executeUpdate();
240
241
242 sender.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', " $a Registro completado!."));
243 logedin.replace(player.getName(), true);
244 isregistered.replace(player.getName(), true);
245 }catch(Exception err) {
246 player.kickPlayer(prefix + " An error ocurred, please try again " + err);
247 }
248
249
250
251
252 }
253
254 return false;
255 }
256
257
258
259 public static SecretKey decodeKeyFromString(String keyStr) {
260 /* Decodes a Base64 encoded String into a byte array */
261 byte[] decodedKey = Base64.getDecoder().decode(keyStr);
262
263 /* Constructs a secret key from the given byte array */
264 SecretKey secretKey = new SecretKeySpec(decodedKey, 0,
265 decodedKey.length, "AES");
266
267 return secretKey;
268 }
269
270 @EventHandler
271 public void onInventoryOpen(InventoryOpenEvent event) {
272 Player player = (Player) event.getPlayer();
273
274 if (logedin.get(player.getName()) == false) {
275 event.setCancelled(true);
276 return;
277 }
278
279 }
280
281 @EventHandler
282 public void onInventoryClose(InventoryCloseEvent event) {
283 Player player = (Player) event.getPlayer();
284 }
285
286
287 @EventHandler
288 public void onBreak(BlockBreakEvent event) {
289 Player player = event.getPlayer();
290 if (logedin.get(player.getName()) == false) {
291 event.setCancelled(true);
292 return;
293 }
294
295
296
297 }
298
299
300
301
302 @EventHandler
303 public void onJoin(PlayerJoinEvent event) throws Exception {
304
305 event.getPlayer().sendMessage(Strings.repeat(" \n", 100));
306 Thread.sleep(1000);
307 event.setJoinMessage(null);
308 KeyGenerator keyGenerator;
309 keyGenerator = KeyGenerator.getInstance("AES");
310 keyGenerator.init(128);
311 SecretKey secretKey = keyGenerator.generateKey();
312 Cipher cipher = Cipher.getInstance("AES");
313 Player player = event.getPlayer();
314 Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/db_minecraft", "root", "Ggo61ktHdFEaqtlE");
315 java.sql.Statement st = conexion.createStatement();
316 ResultSet rs = st.executeQuery("SELECT * FROM plugin_accounts WHERE name='" + player.getName() + "'");
317 String lastip = "";
318 while (rs.next())
319 {
320 lastip = rs.getString("lastip");
321 }
322 if(rs.absolute(1)) {
323 player.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', "$aBienvenido!\n Usa $b$l/login <contraseña>$l$a para iniciar sesion!"));
324 if (logedin.containsKey(player.getName())){
325 logedin.replace(player.getName(), false);
326
327
328 }else {
329 logedin.put(player.getName(), false);
330 }
331
332 if (isregistered.containsKey(player.getName())) {
333
334 }else {
335 isregistered.put(player.getName(), true);
336 }
337
338
339 }else {
340
341 player.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', "$aBienvenido!\n Usa $b$l/register <contraseña> <contraseña>$l$a para iniciar sesion!"));
342 if (logedin.containsKey(player.getName())){
343 logedin.replace(player.getName(), false);
344 }else {
345 logedin.put(player.getName(), false);
346 }
347
348 if (isregistered.containsKey(player.getName())) {
349
350 }else {
351 isregistered.put(player.getName(), false);
352 }
353 }
354
355 }
356
357 @EventHandler
358 public void OnDisconnected(PlayerQuitEvent event) throws Exception {
359 Player player = event.getPlayer();
360 logedin.remove(event.getPlayer().getName());
361 isregistered.remove(event.getPlayer().getName());
362
363 }
364
365 @EventHandler
366 public void onCommandExecuted(PlayerCommandPreprocessEvent e) {
367 if (logedin.get(e.getPlayer().getName())){
368 return;
369 }
370
371 if (e.getMessage().contains("login") || e.getMessage().contains("register")) {
372 return;
373 }
374 Player player = e.getPlayer();
375 if (!(logedin.get(player.getName()))){
376 e.setCancelled(true);
377 player.sendMessage(prefix + ChatColor.translateAlternateColorCodes('$', "$cNo puedes ejecutar comandos!"));
378 }
379 return;
380 }
381
382
383 @EventHandler
384 public void onMove(PlayerMoveEvent event) {
385 Player player = event.getPlayer();
386
387 if(logedin.containsKey(player.getName())) {
388
389 if (logedin.get(player.getName()).booleanValue() == false) {
390 if (event.getFrom().getX() == event.getTo().getX() && event.getFrom().getY() == event.getTo().getY() && event.getFrom().getZ() == event.getTo().getZ()) {
391 return;
392 }
393 World w = player.getWorld();
394 Location location = new Location(w, event.getFrom().getX(), event.getFrom().getY(), event.getFrom().getZ());
395 event.getPlayer().teleport(location);
396
397
398 }
399
400
401 }
402
403 }
404
405
406 public static String encrypt(String plainText, SecretKey secretKey)
407
408 throws Exception {
409 Cipher cipher = Cipher.getInstance("AES");
410 byte[] plainTextByte = plainText.getBytes();
411 cipher.init(Cipher.ENCRYPT_MODE, secretKey);
412 byte[] encryptedByte = cipher.doFinal(plainTextByte);
413 Base64.Encoder encoder = Base64.getEncoder();
414 String encryptedText = encoder.encodeToString(encryptedByte);
415 return encryptedText;
416 }
417
418 public static String decrypt(String encryptedText, SecretKey secretKey)
419 throws Exception {
420 Cipher cipher = Cipher.getInstance("AES");
421 Base64.Decoder decoder = Base64.getDecoder();
422 byte[] encryptedTextByte = decoder.decode(encryptedText);
423 cipher.init(Cipher.DECRYPT_MODE, secretKey);
424 byte[] decryptedByte = cipher.doFinal(encryptedTextByte);
425 String decryptedText = new String(decryptedByte);
426 return decryptedText;
427 }
428
429 private static String GenKey() throws NoSuchAlgorithmException {
430 // Do *not* seed secureRandom! Automatically seeded from system entropy
431 final SecureRandom random = new SecureRandom();
432
433 // Use the largest AES key length which is supported by the OS
434 final KeyGenerator generator = KeyGenerator.getInstance("AES");
435 try {
436 generator.init(64, random);
437 }catch(Exception f) {
438
439 }
440
441 return Base64.getEncoder().encodeToString(generator.generateKey().getEncoded());
442 }
443
444
445}
446