· 5 years ago · Mar 10, 2020, 07:10 PM
1package me.tutorial.google;
2
3import com.warrenstrange.googleauth.GoogleAuthenticator;
4import com.warrenstrange.googleauth.GoogleAuthenticatorKey;
5import org.bukkit.entity.Player;
6import org.bukkit.event.EventHandler;
7import org.bukkit.event.Listener;
8import org.bukkit.event.block.BlockBreakEvent;
9import org.bukkit.event.block.BlockPlaceEvent;
10import org.bukkit.event.player.AsyncPlayerChatEvent;
11import org.bukkit.event.player.PlayerJoinEvent;
12import org.bukkit.event.player.PlayerMoveEvent;
13import org.bukkit.plugin.java.JavaPlugin;
14
15import java.rmi.activation.ActivationSystem;
16import java.util.ArrayList;
17import java.util.UUID;
18
19public class GoogleMain extends JavaPlugin implements Listener {
20 private ArrayList<UUID> authlocked;
21
22 @Override
23 public void onEnable() {
24 this.getServer().getPluginManager().registerEvents(this, this);
25 authlocked = new ArrayList<UUID>();
26
27 this.getConfig().options().copyDefaults(true);
28 this.saveConfig();
29 }
30
31
32 @EventHandler
33 public void onJoin(PlayerJoinEvent event) {
34 Player player = event.getPlayer();
35
36 if (!this.getConfig().contains("authcodes." + player.getUniqueId())) {
37 GoogleAuthenticator gAuth = new GoogleAuthenticator();
38 GoogleAuthenticatorKey key = gAuth.createCredentials();
39
40 player.sendMessage("§7Your §bGoogle Auth Code §7is §a" + key.getKey());
41 player.sendMessage("§7You must enter this code in the Google Authenticator App before leaving the server.");
42
43 this.getConfig().set("authcodes." + player.getUniqueId(), key.getKey());
44 this.saveConfig();
45 } else {
46 authlocked.add(player.getUniqueId());
47 player.sendMessage("§cPlease open the Google Authenticator App and provide the six digit code.");
48 }
49 }
50
51 private boolean playerInputCode(Player player, int code) {
52 String secretkey = this.getConfig().getString("authcodes." + player.getUniqueId());
53
54 GoogleAuthenticator gAuth = new GoogleAuthenticator();
55 boolean codeisvalid = gAuth.authorize(secretkey, code);
56
57
58 if (codeisvalid) {
59 authlocked.remove(player.getUniqueId());
60 return codeisvalid;
61 }
62
63 return codeisvalid;
64 }
65
66
67 @EventHandler
68 public void chat(AsyncPlayerChatEvent event) {
69 Player player = event.getPlayer();
70 String message = event.getMessage();
71
72 if (authlocked.contains(player.getUniqueId())) {
73 try {
74 Integer code = Integer.parseInt(message);
75 if (playerInputCode(player, code)) {
76 authlocked.remove(player.getUniqueId());
77 player.sendMessage("§a*Access Granted* §bWelcome to the server!");
78 } else {
79 player.sendMessage("§cIncorrect or expired code ** A code will only contain numbers **");
80
81 }
82 } catch (Exception e) {
83 player.sendMessage("§cIncorrect or expired code ** A code will only contain numbers **");
84 }
85 event.setCancelled(true);
86 }
87 }
88
89 @EventHandler
90 public void move(PlayerMoveEvent event) {
91 Player player = event.getPlayer();
92 if (authlocked.contains(player.getUniqueId())) {
93 event.setCancelled(true);
94 }
95 }
96
97 @EventHandler
98 public void blockbreak(BlockBreakEvent event) {
99 Player player = event.getPlayer();
100 if (authlocked.contains(player.getUniqueId())) {
101 event.setCancelled(true);
102 }
103 }
104
105 @EventHandler
106 public void blockplace(BlockPlaceEvent event) {
107 Player player = event.getPlayer();
108 if (authlocked.contains(player.getUniqueId())) {
109 event.setCancelled(true);
110 }
111 }
112}