Stefatorus
4 years ago
3 changed files with 442 additions and 439 deletions
@ -1,133 +1,133 @@ |
|||||
package com.entryrise.afkguard; |
|
||||
|
|
||||
import java.io.File; |
|
||||
|
|
||||
import org.bukkit.Bukkit; |
|
||||
import org.bukkit.Material; |
|
||||
import org.bukkit.OfflinePlayer; |
|
||||
import org.bukkit.command.CommandSender; |
|
||||
import org.bukkit.configuration.file.FileConfiguration; |
|
||||
import org.bukkit.configuration.file.YamlConfiguration; |
|
||||
import org.bukkit.entity.Player; |
|
||||
import org.bukkit.event.Listener; |
|
||||
import org.bukkit.plugin.RegisteredServiceProvider; |
|
||||
import org.bukkit.plugin.java.JavaPlugin; |
|
||||
|
|
||||
import com.entryrise.afkguard.antiafk.AFKManager; |
|
||||
import com.entryrise.afkguard.antiafk.captcha.CaptchaCategory; |
|
||||
import com.entryrise.afkguard.antiafk.captcha.CaptchaGUI; |
|
||||
import com.entryrise.afkguard.antiafk.captcha.CaptchaGUI.CaptchaData; |
|
||||
import com.entryrise.afkguard.cmd.CommandListener; |
|
||||
import com.entryrise.afkguard.cmd.CommandTabListener; |
|
||||
import com.entryrise.afkguard.listeners.ListenersMain; |
|
||||
import com.entryrise.afkguard.utils.Others; |
|
||||
import com.entryrise.afkguard.utils.VersionMgr; |
|
||||
|
|
||||
import net.milkbowl.vault.economy.Economy; |
|
||||
|
|
||||
public class Main extends JavaPlugin implements Listener { |
|
||||
|
|
||||
public static String USER = "%%__USER__%%"; |
|
||||
public static final String PREFIX = "§2§lAFK§f§lGuard §e» §f"; |
|
||||
|
|
||||
public static JavaPlugin p; |
|
||||
public static boolean paper = false; |
|
||||
|
|
||||
private static File file; |
|
||||
public static FileConfiguration config = new YamlConfiguration(); |
|
||||
|
|
||||
public static Economy econ; |
|
||||
|
|
||||
public void onEnable() { |
|
||||
p = this; |
|
||||
|
|
||||
file = new File(getDataFolder(), "server.yml"); |
|
||||
config = Others.getConfig(file, 1); |
|
||||
|
|
||||
paper = VersionMgr.isPaper(); |
|
||||
|
|
||||
Bukkit.getLogger().info(PREFIX + "Enabling Systems:"); |
|
||||
|
|
||||
setupEconomy(); |
|
||||
EnableClasses(false); |
|
||||
|
|
||||
getServer().getPluginManager().registerEvents(this, this); |
|
||||
getCommand("afkguard").setExecutor(new CommandListener()); |
|
||||
getCommand("afkguard").setTabCompleter(new CommandTabListener()); |
|
||||
} |
|
||||
|
|
||||
private boolean setupEconomy() { |
|
||||
if (getServer().getPluginManager().getPlugin("Vault") == null) { |
|
||||
return false; |
|
||||
} |
|
||||
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class); |
|
||||
if (rsp == null) { |
|
||||
return false; |
|
||||
} |
|
||||
econ = rsp.getProvider(); |
|
||||
return econ != null; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
private static void EnableClasses(boolean reload) { |
|
||||
ListenersMain.Enabler(reload); |
|
||||
CaptchaCategory.Enabler(reload); |
|
||||
AFKManager.Enabler(reload); |
|
||||
} |
|
||||
|
|
||||
public static void ReloadPlugin(CommandSender s) { |
|
||||
config = Others.getConfig(file, 1); |
|
||||
|
|
||||
Bukkit.getLogger().info(PREFIX + "Reloading Systems:"); |
|
||||
EnableClasses(true); |
|
||||
|
|
||||
s.sendMessage(PREFIX + "Reloaded the config successfully."); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDisable() { |
|
||||
// PacketInjector.Disabler(); <- SEEMS UNIMPORTANT AND GLITCHY
|
|
||||
} |
|
||||
|
|
||||
public static void failedAttempt(Player p) { |
|
||||
CaptchaGUI.invs.remove(p.getUniqueId()); |
|
||||
p.closeInventory(); |
|
||||
// p.kickPlayer(getKickMsg());
|
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), Main.config.getString("settings.captcha.fail-command").replace("%player%", p.getName())); |
|
||||
} |
|
||||
|
|
||||
public static void goodAttempt(Player p, int target) { |
|
||||
CaptchaGUI.invs.remove(p.getUniqueId()); |
|
||||
p.closeInventory(); |
|
||||
// p.sendMessage(getSuccessfulsg());
|
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), Main.config.getString("settings.captcha.success-command").replace("%player%", p.getName())); |
|
||||
AFKManager.setScore(p, target); |
|
||||
} |
|
||||
|
|
||||
public static void captchaResult(Player p, Material mat) { |
|
||||
CaptchaData cd = CaptchaGUI.invs.get(p.getUniqueId()); |
|
||||
if (!cd.category.getAllowed().contains(mat)) { |
|
||||
failedAttempt(p); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
goodAttempt(p, cd.counter); |
|
||||
} |
|
||||
|
|
||||
public static void openCapcha(Player p, int resetcounter) { |
|
||||
Bukkit.getScheduler().runTaskLater(Main.p, () -> p.openInventory(CaptchaGUI.getInventory(p, resetcounter)), 20); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public static void penalizePlayer(Player p, double payment, int reset) { |
|
||||
OfflinePlayer op = Bukkit.getOfflinePlayer(p.getUniqueId()); |
|
||||
|
|
||||
if (!econ.has(op, payment)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
econ.withdrawPlayer(op, payment); |
|
||||
AFKManager.setScore(p, reset); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
package com.entryrise.afkguard; |
||||
|
|
||||
|
import java.io.File; |
||||
|
|
||||
|
import org.bukkit.Bukkit; |
||||
|
import org.bukkit.OfflinePlayer; |
||||
|
import org.bukkit.command.CommandSender; |
||||
|
import org.bukkit.configuration.file.FileConfiguration; |
||||
|
import org.bukkit.configuration.file.YamlConfiguration; |
||||
|
import org.bukkit.entity.Player; |
||||
|
import org.bukkit.event.Listener; |
||||
|
import org.bukkit.inventory.ItemStack; |
||||
|
import org.bukkit.plugin.RegisteredServiceProvider; |
||||
|
import org.bukkit.plugin.java.JavaPlugin; |
||||
|
|
||||
|
import com.entryrise.afkguard.antiafk.AFKManager; |
||||
|
import com.entryrise.afkguard.antiafk.captcha.CaptchaCategory; |
||||
|
import com.entryrise.afkguard.antiafk.captcha.CaptchaGUI; |
||||
|
import com.entryrise.afkguard.antiafk.captcha.CaptchaGUI.CaptchaData; |
||||
|
import com.entryrise.afkguard.cmd.CommandListener; |
||||
|
import com.entryrise.afkguard.cmd.CommandTabListener; |
||||
|
import com.entryrise.afkguard.listeners.ListenersMain; |
||||
|
import com.entryrise.afkguard.utils.Others; |
||||
|
import com.entryrise.afkguard.utils.VersionMgr; |
||||
|
|
||||
|
import net.milkbowl.vault.economy.Economy; |
||||
|
|
||||
|
public class Main extends JavaPlugin implements Listener { |
||||
|
|
||||
|
public static String USER = "%%__USER__%%"; |
||||
|
public static final String PREFIX = "§2§lAFK§f§lGuard §e» §f"; |
||||
|
|
||||
|
public static JavaPlugin p; |
||||
|
public static boolean paper = false; |
||||
|
|
||||
|
private static File file; |
||||
|
public static FileConfiguration config = new YamlConfiguration(); |
||||
|
|
||||
|
public static Economy econ; |
||||
|
|
||||
|
public void onEnable() { |
||||
|
p = this; |
||||
|
|
||||
|
file = new File(getDataFolder(), "server.yml"); |
||||
|
config = Others.getConfig(file, 1); |
||||
|
|
||||
|
paper = VersionMgr.isPaper(); |
||||
|
|
||||
|
Bukkit.getLogger().info(PREFIX + "Enabling Systems:"); |
||||
|
|
||||
|
setupEconomy(); |
||||
|
EnableClasses(false); |
||||
|
|
||||
|
getServer().getPluginManager().registerEvents(this, this); |
||||
|
getCommand("afkguard").setExecutor(new CommandListener()); |
||||
|
getCommand("afkguard").setTabCompleter(new CommandTabListener()); |
||||
|
} |
||||
|
|
||||
|
private boolean setupEconomy() { |
||||
|
if (getServer().getPluginManager().getPlugin("Vault") == null) { |
||||
|
return false; |
||||
|
} |
||||
|
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class); |
||||
|
if (rsp == null) { |
||||
|
return false; |
||||
|
} |
||||
|
econ = rsp.getProvider(); |
||||
|
return econ != null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private static void EnableClasses(boolean reload) { |
||||
|
ListenersMain.Enabler(reload); |
||||
|
CaptchaCategory.Enabler(reload); |
||||
|
AFKManager.Enabler(reload); |
||||
|
} |
||||
|
|
||||
|
public static void ReloadPlugin(CommandSender s) { |
||||
|
config = Others.getConfig(file, 1); |
||||
|
|
||||
|
Bukkit.getLogger().info(PREFIX + "Reloading Systems:"); |
||||
|
EnableClasses(true); |
||||
|
|
||||
|
s.sendMessage(PREFIX + "Reloaded the config successfully."); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void onDisable() { |
||||
|
// PacketInjector.Disabler(); <- SEEMS UNIMPORTANT AND GLITCHY
|
||||
|
} |
||||
|
|
||||
|
public static void failedAttempt(Player p) { |
||||
|
CaptchaGUI.invs.remove(p.getUniqueId()); |
||||
|
p.closeInventory(); |
||||
|
// p.kickPlayer(getKickMsg());
|
||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), Main.config.getString("settings.captcha.fail-command").replace("%player%", p.getName())); |
||||
|
} |
||||
|
|
||||
|
public static void goodAttempt(Player p, int target) { |
||||
|
CaptchaGUI.invs.remove(p.getUniqueId()); |
||||
|
p.closeInventory(); |
||||
|
// p.sendMessage(getSuccessfulsg());
|
||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), Main.config.getString("settings.captcha.success-command").replace("%player%", p.getName())); |
||||
|
AFKManager.setScore(p, target); |
||||
|
} |
||||
|
|
||||
|
public static void captchaResult(Player p, ItemStack mat) { |
||||
|
CaptchaData cd = CaptchaGUI.invs.get(p.getUniqueId()); |
||||
|
if (!cd.category.getAllowed().contains(mat)) { |
||||
|
failedAttempt(p); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
goodAttempt(p, cd.counter); |
||||
|
} |
||||
|
|
||||
|
public static void openCapcha(Player p, int resetcounter) { |
||||
|
Bukkit.getScheduler().runTaskLater(Main.p, () -> p.openInventory(CaptchaGUI.getInventory(p, resetcounter)), 20); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public static void penalizePlayer(Player p, double payment, int reset) { |
||||
|
OfflinePlayer op = Bukkit.getOfflinePlayer(p.getUniqueId()); |
||||
|
|
||||
|
if (!econ.has(op, payment)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
econ.withdrawPlayer(op, payment); |
||||
|
AFKManager.setScore(p, reset); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
@ -1,90 +1,87 @@ |
|||||
package com.entryrise.afkguard.antiafk.captcha; |
|
||||
|
|
||||
import java.util.ArrayList; |
|
||||
import java.util.Collections; |
|
||||
import java.util.List; |
|
||||
import java.util.SplittableRandom; |
|
||||
|
|
||||
import org.bukkit.Bukkit; |
|
||||
import org.bukkit.Material; |
|
||||
|
|
||||
import com.entryrise.afkguard.Main; |
|
||||
|
|
||||
public class CaptchaCategory { |
|
||||
|
|
||||
private static SplittableRandom sr = new SplittableRandom(); |
|
||||
private static List<CaptchaCategory> categories = new ArrayList<CaptchaCategory>(); |
|
||||
|
|
||||
public static void Enabler(boolean reload) { |
|
||||
if (!reload) { |
|
||||
Main.p.getServer().getPluginManager().registerEvents(new CaptchaGUI(), Main.p); |
|
||||
} |
|
||||
for (String stg : Main.config.getConfigurationSection("settings.captcha.categories").getKeys(false)) { |
|
||||
categories.add(new CaptchaCategory(stg)); |
|
||||
|
|
||||
} |
|
||||
Bukkit.getLogger().info(" §e[§a✔§e] §fCategories Added"); |
|
||||
} |
|
||||
|
|
||||
public static CaptchaCategory getCategory(CaptchaCategory exception) { |
|
||||
// For safety if the random randomly breaks out of some reason or another.
|
|
||||
// Will render plugin kind of unsafe but still usable and won't crash server.
|
|
||||
int i = 50; |
|
||||
CaptchaCategory categ; |
|
||||
do { |
|
||||
categ = categories.get(sr.nextInt(categories.size())); |
|
||||
} while (categ.equals(exception) && --i > 0); |
|
||||
|
|
||||
return categ; |
|
||||
} |
|
||||
|
|
||||
public List<Material> getShuffledFiller() { |
|
||||
List<Material> raw = new ArrayList<Material>(); |
|
||||
for (CaptchaCategory cat : categories) { |
|
||||
if (cat.equals(this)) { |
|
||||
continue; |
|
||||
} |
|
||||
for (int i = 0; i < 5; i++) { |
|
||||
raw.addAll(cat.members); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
Collections.shuffle(raw); |
|
||||
return raw; |
|
||||
} |
|
||||
|
|
||||
// This is where objective stuff starts and no more statics roam the land.
|
|
||||
|
|
||||
private List<Material> members = new ArrayList<Material>(); |
|
||||
private String name; |
|
||||
|
|
||||
private CaptchaCategory(String name) { |
|
||||
String loc = "settings.captcha.categories." + name; |
|
||||
|
|
||||
this.name = name; |
|
||||
for (String stg : Main.config.getStringList(loc)) { |
|
||||
members.add(Material.getMaterial(stg)); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public Material getRandom(Material exception) { |
|
||||
// For safety if the random randomly breaks out of some reason or another.
|
|
||||
// Will render plugin kind of unsafe but still usable and won't crash server.
|
|
||||
int i = 50; |
|
||||
Material mat; |
|
||||
do { |
|
||||
mat = members.get(sr.nextInt(members.size())); |
|
||||
} while (mat.equals(exception) && --i > 0); |
|
||||
|
|
||||
return mat; |
|
||||
} |
|
||||
|
|
||||
public String getName() { |
|
||||
return name; |
|
||||
} |
|
||||
|
|
||||
public List<Material> getAllowed() { |
|
||||
return members; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
package com.entryrise.afkguard.antiafk.captcha; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.SplittableRandom; |
||||
|
|
||||
|
import org.bukkit.Bukkit; |
||||
|
import org.bukkit.inventory.ItemStack; |
||||
|
|
||||
|
import com.entryrise.afkguard.Main; |
||||
|
import com.entryrise.afkguard.mineutils.ItemBuilder; |
||||
|
|
||||
|
public class CaptchaCategory { |
||||
|
|
||||
|
private static SplittableRandom sr = new SplittableRandom(); |
||||
|
private static List<CaptchaCategory> categories = new ArrayList<CaptchaCategory>(); |
||||
|
|
||||
|
public static void Enabler(boolean reload) { |
||||
|
if (!reload) { |
||||
|
Main.p.getServer().getPluginManager().registerEvents(new CaptchaGUI(), Main.p); |
||||
|
} |
||||
|
for (String stg : Main.config.getConfigurationSection("settings.captcha.categories").getKeys(false)) { |
||||
|
categories.add(new CaptchaCategory(stg)); |
||||
|
|
||||
|
} |
||||
|
Bukkit.getLogger().info(" §e[§a✔§e] §fCategories Added"); |
||||
|
} |
||||
|
|
||||
|
public static CaptchaCategory getCategory(CaptchaCategory exception) { |
||||
|
// For safety if the random randomly breaks out of some reason or another.
|
||||
|
// Will render plugin kind of unsafe but still usable and won't crash server.
|
||||
|
int i = 50; |
||||
|
CaptchaCategory categ; |
||||
|
do { |
||||
|
categ = categories.get(sr.nextInt(categories.size())); |
||||
|
} while (categ.equals(exception) && --i > 0); |
||||
|
|
||||
|
return categ; |
||||
|
} |
||||
|
|
||||
|
public List<ItemStack> getShuffledFiller() { |
||||
|
List<ItemStack> raw = new ArrayList<ItemStack>(); |
||||
|
for (CaptchaCategory cat : categories) { |
||||
|
if (cat.equals(this)) { |
||||
|
continue; |
||||
|
} |
||||
|
for (int i = 0; i < 5; i++) { |
||||
|
raw.addAll(cat.members); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Collections.shuffle(raw); |
||||
|
return raw; |
||||
|
} |
||||
|
|
||||
|
// This is where objective stuff starts and no more statics roam the land.
|
||||
|
|
||||
|
private List<ItemStack> members = new ArrayList<ItemStack>(); |
||||
|
private String name; |
||||
|
|
||||
|
private CaptchaCategory(String name) { |
||||
|
String loc = "settings.captcha.categories." + name; |
||||
|
|
||||
|
this.name = name; |
||||
|
for (String stg : Main.config.getStringList(loc)) { |
||||
|
members.add(new ItemBuilder(Main.config, "settings.captcha.gui.item").setType(stg).build()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public ItemStack getRandom(ItemStack exception) { |
||||
|
// For safety if the random randomly breaks out of some reason or another.
|
||||
|
// Will render plugin kind of unsafe but still usable and won't crash server.
|
||||
|
List<ItemStack> items = new ArrayList<>(members); |
||||
|
items.remove(exception); |
||||
|
return items.get(sr.nextInt(items.size())); |
||||
|
} |
||||
|
|
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
public List<ItemStack> getAllowed() { |
||||
|
return members; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
@ -1,216 +1,222 @@ |
|||||
package com.entryrise.afkguard.antiafk.captcha; |
|
||||
|
|
||||
import java.util.ArrayList; |
|
||||
import java.util.HashMap; |
|
||||
import java.util.List; |
|
||||
import java.util.Map; |
|
||||
import java.util.SplittableRandom; |
|
||||
import java.util.UUID; |
|
||||
|
|
||||
import org.bukkit.Bukkit; |
|
||||
import org.bukkit.ChatColor; |
|
||||
import org.bukkit.Material; |
|
||||
import org.bukkit.entity.HumanEntity; |
|
||||
import org.bukkit.entity.Player; |
|
||||
import org.bukkit.event.EventHandler; |
|
||||
import org.bukkit.event.Listener; |
|
||||
import org.bukkit.event.inventory.InventoryClickEvent; |
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent; |
|
||||
import org.bukkit.inventory.Inventory; |
|
||||
import org.bukkit.inventory.ItemStack; |
|
||||
|
|
||||
import com.entryrise.afkguard.Main; |
|
||||
import com.entryrise.afkguard.mineutils.ItemBuilder; |
|
||||
|
|
||||
|
|
||||
public class CaptchaGUI implements Listener { |
|
||||
|
|
||||
public static List<Integer> filler = new ArrayList<Integer>(); |
|
||||
private static SplittableRandom sr = new SplittableRandom(); |
|
||||
|
|
||||
// Fillers where selector items can stay;
|
|
||||
static { |
|
||||
for (int i = 19; i < 26; i++) { |
|
||||
filler.add(i); |
|
||||
} |
|
||||
for (int i = 28; i < 35; i++) { |
|
||||
filler.add(i); |
|
||||
} |
|
||||
for (int i = 37; i < 44; i++) { |
|
||||
filler.add(i); |
|
||||
} |
|
||||
|
|
||||
filler.add(10); |
|
||||
filler.add(11); |
|
||||
filler.add(15); |
|
||||
filler.add(16); |
|
||||
} |
|
||||
|
|
||||
public static class CaptchaData { |
|
||||
|
|
||||
public CaptchaCategory category; |
|
||||
public Material example; |
|
||||
public Inventory inv; |
|
||||
|
|
||||
public int counter; |
|
||||
|
|
||||
public CaptchaData() { |
|
||||
this.category = CaptchaCategory.getCategory(null); |
|
||||
this.example = category.getRandom(null); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
public static Map<UUID, CaptchaData> invs = new HashMap<UUID, CaptchaData>(); |
|
||||
|
|
||||
public static Inventory getInventory(Player p, int counter) { |
|
||||
return getInventory(p.getUniqueId(), counter); |
|
||||
} |
|
||||
|
|
||||
public static boolean existsAlready(Player p) { |
|
||||
return existsAlready(p.getUniqueId()); |
|
||||
} |
|
||||
|
|
||||
public static boolean existsAlready(UUID u) { |
|
||||
|
|
||||
return invs.containsKey(u); |
|
||||
} |
|
||||
|
|
||||
public static Inventory getInventory(UUID u, int counter) { |
|
||||
if (existsAlready(u)) { |
|
||||
return invs.get(u).inv; |
|
||||
} else if (counter != -1) { |
|
||||
return createInventory(u, counter); |
|
||||
} |
|
||||
|
|
||||
return null; |
|
||||
} |
|
||||
|
|
||||
private static Inventory createInventory(UUID u, int counter) { |
|
||||
CaptchaData cd = new CaptchaData(); |
|
||||
|
|
||||
Inventory inv = Bukkit.createInventory(null, 54, getTitle(cd.category.getName())); |
|
||||
|
|
||||
setBorders(inv); |
|
||||
setRandomExample(inv, cd); |
|
||||
setRandomAnswers(inv, cd); |
|
||||
|
|
||||
cd.inv = inv; |
|
||||
cd.counter = counter; |
|
||||
|
|
||||
invs.put(u, cd); |
|
||||
|
|
||||
return inv; |
|
||||
} |
|
||||
|
|
||||
public static String getTitle(String categoryname) { |
|
||||
return ChatColor.translateAlternateColorCodes('&', Main.config.getString("settings.captcha.gui.title")) |
|
||||
.replace("%category%", categoryname); |
|
||||
} |
|
||||
|
|
||||
@EventHandler |
|
||||
public void onInventoryClick(InventoryClickEvent e) { |
|
||||
|
|
||||
HumanEntity hm = e.getWhoClicked(); |
|
||||
|
|
||||
if (!(hm instanceof Player)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
Player p = (Player) hm; |
|
||||
|
|
||||
Inventory invent = e.getInventory(); |
|
||||
|
|
||||
ItemStack itm = e.getCurrentItem(); |
|
||||
|
|
||||
if (itm == null) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
if (!invs.containsKey(p.getUniqueId())) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
if (!invent.equals(invs.get(p.getUniqueId()).inv)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// Done checks to make sure it's a verify gui. We can now do the work required.
|
|
||||
int slot = e.getSlot(); |
|
||||
|
|
||||
// Make sure you're not clicking anywhere except verify items.
|
|
||||
e.setCancelled(true); |
|
||||
|
|
||||
if (!filler.contains(slot)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
Main.captchaResult(p, itm.getType()); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
@EventHandler |
|
||||
public void onInventoryClose(InventoryCloseEvent e) { |
|
||||
HumanEntity hm = e.getPlayer(); |
|
||||
|
|
||||
if (!(hm instanceof Player)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
Player p = (Player) hm; |
|
||||
|
|
||||
Inventory invent = e.getInventory(); |
|
||||
|
|
||||
if (!invs.containsKey(p.getUniqueId())) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
if (!invent.equals(invs.get(p.getUniqueId()).inv)) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
Bukkit.getScheduler().runTaskLater(Main.p, () -> p.openInventory(CaptchaGUI.getInventory(p, -1)), 5); |
|
||||
} |
|
||||
|
|
||||
public static void setBorders(Inventory inv) { |
|
||||
ItemStack pane = new ItemBuilder(Main.config, "settings.captcha.gui.glass-pane").build(); |
|
||||
for (int i = 4; i <= 49; i += 9) { |
|
||||
inv.setItem(i - 4, pane); |
|
||||
inv.setItem(i + 4, pane); |
|
||||
} |
|
||||
|
|
||||
for (int i = 1; i <= 7; i++) { |
|
||||
inv.setItem(i, pane); |
|
||||
inv.setItem(i + 45, pane); |
|
||||
} |
|
||||
|
|
||||
inv.setItem(12, pane); |
|
||||
inv.setItem(13, pane); |
|
||||
inv.setItem(14, pane); |
|
||||
} |
|
||||
|
|
||||
public static void setRandomExample(Inventory inv, CaptchaData cd) { |
|
||||
ItemStack itm = new ItemBuilder(Main.config, "settings.captcha.gui.example").setType(cd.example.name()).build(); |
|
||||
inv.setItem(4, itm); |
|
||||
} |
|
||||
|
|
||||
public static void setRandomAnswers(Inventory inv, CaptchaData cd) { |
|
||||
List<Material> mats = cd.category.getShuffledFiller(); |
|
||||
|
|
||||
for (int i = 0; i < filler.size(); i++) { |
|
||||
Material mat = mats.get(i); |
|
||||
int slot = filler.get(i); |
|
||||
|
|
||||
ItemStack itm = prepareItemStack(mat); |
|
||||
inv.setItem(slot, itm); |
|
||||
} |
|
||||
|
|
||||
inv.setItem(filler.get(sr.nextInt(filler.size())), prepareItemStack(cd.category.getRandom(cd.example))); |
|
||||
} |
|
||||
|
|
||||
private static ItemStack prepareItemStack(Material mat) { |
|
||||
ItemStack itm = new ItemBuilder(Main.config, "settings.captcha.gui.item").setType(mat.name()).build(); |
|
||||
return itm; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
package com.entryrise.afkguard.antiafk.captcha; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.SplittableRandom; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
import org.bukkit.Bukkit; |
||||
|
import org.bukkit.ChatColor; |
||||
|
import org.bukkit.entity.HumanEntity; |
||||
|
import org.bukkit.entity.Player; |
||||
|
import org.bukkit.event.EventHandler; |
||||
|
import org.bukkit.event.Listener; |
||||
|
import org.bukkit.event.inventory.InventoryClickEvent; |
||||
|
import org.bukkit.event.inventory.InventoryCloseEvent; |
||||
|
import org.bukkit.inventory.Inventory; |
||||
|
import org.bukkit.inventory.ItemStack; |
||||
|
import org.bukkit.inventory.meta.ItemMeta; |
||||
|
|
||||
|
import com.entryrise.afkguard.Main; |
||||
|
import com.entryrise.afkguard.mineutils.ItemBuilder; |
||||
|
|
||||
|
|
||||
|
public class CaptchaGUI implements Listener { |
||||
|
|
||||
|
public static List<Integer> filler = new ArrayList<Integer>(); |
||||
|
private static SplittableRandom sr = new SplittableRandom(); |
||||
|
|
||||
|
// Fillers where selector items can stay;
|
||||
|
static { |
||||
|
for (int i = 19; i < 26; i++) { |
||||
|
filler.add(i); |
||||
|
} |
||||
|
for (int i = 28; i < 35; i++) { |
||||
|
filler.add(i); |
||||
|
} |
||||
|
for (int i = 37; i < 44; i++) { |
||||
|
filler.add(i); |
||||
|
} |
||||
|
|
||||
|
filler.add(10); |
||||
|
filler.add(11); |
||||
|
filler.add(15); |
||||
|
filler.add(16); |
||||
|
} |
||||
|
|
||||
|
public static class CaptchaData { |
||||
|
|
||||
|
public CaptchaCategory category; |
||||
|
public ItemStack example; |
||||
|
public Inventory inv; |
||||
|
|
||||
|
public int counter; |
||||
|
|
||||
|
public CaptchaData() { |
||||
|
this.category = CaptchaCategory.getCategory(null); |
||||
|
this.example = category.getRandom(null); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public static Map<UUID, CaptchaData> invs = new HashMap<UUID, CaptchaData>(); |
||||
|
|
||||
|
public static Inventory getInventory(Player p, int counter) { |
||||
|
return getInventory(p.getUniqueId(), counter); |
||||
|
} |
||||
|
|
||||
|
public static boolean existsAlready(Player p) { |
||||
|
return existsAlready(p.getUniqueId()); |
||||
|
} |
||||
|
|
||||
|
public static boolean existsAlready(UUID u) { |
||||
|
|
||||
|
return invs.containsKey(u); |
||||
|
} |
||||
|
|
||||
|
public static Inventory getInventory(UUID u, int counter) { |
||||
|
if (existsAlready(u)) { |
||||
|
return invs.get(u).inv; |
||||
|
} else if (counter != -1) { |
||||
|
return createInventory(u, counter); |
||||
|
} |
||||
|
|
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
private static Inventory createInventory(UUID u, int counter) { |
||||
|
CaptchaData cd = new CaptchaData(); |
||||
|
|
||||
|
Inventory inv = Bukkit.createInventory(null, 54, getTitle(cd.category.getName())); |
||||
|
|
||||
|
setBorders(inv); |
||||
|
setRandomExample(inv, cd); |
||||
|
setRandomAnswers(inv, cd); |
||||
|
|
||||
|
cd.inv = inv; |
||||
|
cd.counter = counter; |
||||
|
|
||||
|
invs.put(u, cd); |
||||
|
|
||||
|
return inv; |
||||
|
} |
||||
|
|
||||
|
public static String getTitle(String categoryname) { |
||||
|
return ChatColor.translateAlternateColorCodes('&', Main.config.getString("settings.captcha.gui.title")) |
||||
|
.replace("%category%", categoryname); |
||||
|
} |
||||
|
|
||||
|
@EventHandler |
||||
|
public void onInventoryClick(InventoryClickEvent e) { |
||||
|
|
||||
|
HumanEntity hm = e.getWhoClicked(); |
||||
|
|
||||
|
if (!(hm instanceof Player)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Player p = (Player) hm; |
||||
|
|
||||
|
Inventory invent = e.getInventory(); |
||||
|
|
||||
|
ItemStack itm = e.getCurrentItem(); |
||||
|
|
||||
|
if (itm == null) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (!invs.containsKey(p.getUniqueId())) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (!invent.equals(invs.get(p.getUniqueId()).inv)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// Done checks to make sure it's a verify gui. We can now do the work required.
|
||||
|
int slot = e.getSlot(); |
||||
|
|
||||
|
// Make sure you're not clicking anywhere except verify items.
|
||||
|
e.setCancelled(true); |
||||
|
|
||||
|
if (!filler.contains(slot)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Main.captchaResult(p, itm); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@EventHandler |
||||
|
public void onInventoryClose(InventoryCloseEvent e) { |
||||
|
HumanEntity hm = e.getPlayer(); |
||||
|
|
||||
|
if (!(hm instanceof Player)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Player p = (Player) hm; |
||||
|
|
||||
|
Inventory invent = e.getInventory(); |
||||
|
|
||||
|
if (!invs.containsKey(p.getUniqueId())) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (!invent.equals(invs.get(p.getUniqueId()).inv)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Bukkit.getScheduler().runTaskLater(Main.p, () -> p.openInventory(CaptchaGUI.getInventory(p, -1)), 5); |
||||
|
} |
||||
|
|
||||
|
public static void setBorders(Inventory inv) { |
||||
|
ItemStack pane = new ItemBuilder(Main.config, "settings.captcha.gui.glass-pane").build(); |
||||
|
for (int i = 4; i <= 49; i += 9) { |
||||
|
inv.setItem(i - 4, pane); |
||||
|
inv.setItem(i + 4, pane); |
||||
|
} |
||||
|
|
||||
|
for (int i = 1; i <= 7; i++) { |
||||
|
inv.setItem(i, pane); |
||||
|
inv.setItem(i + 45, pane); |
||||
|
} |
||||
|
|
||||
|
inv.setItem(12, pane); |
||||
|
inv.setItem(13, pane); |
||||
|
inv.setItem(14, pane); |
||||
|
} |
||||
|
|
||||
|
public static void setRandomExample(Inventory inv, CaptchaData cd) { |
||||
|
ItemStack itm = new ItemBuilder(Main.config, "settings.captcha.gui.example").build(); |
||||
|
ItemMeta imeta = itm.getItemMeta(); |
||||
|
itm = cd.example.clone(); |
||||
|
itm.setItemMeta(imeta); |
||||
|
inv.setItem(4, itm); |
||||
|
} |
||||
|
|
||||
|
public static void setRandomAnswers(Inventory inv, CaptchaData cd) { |
||||
|
List<ItemStack> mats = cd.category.getShuffledFiller(); |
||||
|
|
||||
|
for (int i = 0; i < filler.size(); i++) { |
||||
|
ItemStack mat = mats.get(i); |
||||
|
int slot = filler.get(i); |
||||
|
//
|
||||
|
// ItemStack itm = prepareItemStack(mat);
|
||||
|
inv.setItem(slot, mat); |
||||
|
} |
||||
|
|
||||
|
inv.setItem(filler.get(sr.nextInt(filler.size())), cd.category.getRandom(cd.example)); |
||||
|
} |
||||
|
|
||||
|
// private static ItemStack prepareItemStack(ItemStack type) {
|
||||
|
// ItemStack itm = new ItemBuilder(Main.config, "settings.captcha.gui.item").build();
|
||||
|
// ItemMeta imeta = itm.getItemMeta();
|
||||
|
// itm = type.clone();
|
||||
|
// itm.setItemMeta(imeta);
|
||||
|
// return itm;
|
||||
|
// }
|
||||
|
|
||||
|
} |
||||
|
Loading…
Reference in new issue