diff --git a/pom.xml b/pom.xml index 7e0c37f..19c6e44 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ run-paper-maven-plugin 1.1.1 - 1.21.7 + 1.21.8 true run @@ -88,7 +88,7 @@ io.papermc.paper paper-api - 1.21.7-R0.1-SNAPSHOT + 1.21.8-R0.1-SNAPSHOT provided diff --git a/readme.md b/readme.md index 0e92981..8c07265 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,10 @@ # No, thank you, Microsoft +This is the gay version! + This plugin was created with the scope of being an incredibly simple way to remove the ability for Mojang to snoop through you messages by reimplementing the PlayerChatEvent to be a server broadcast, however, I have added some interesting features. When making this plugin, I took the liberty to make it so you can customise how the messages look using [MiniMessage](https://docs.advntr.dev/minimessage/index.html). Keep in mind that players can also format the message content with MiniMessage. It is very lightweight, having a little under 50 lines of code, however this might change when I will get to implementing PlaceholderAPI support. -Licensed under WTFPL. - -Download from the [releases tab](https://git.fzorb.xyz/fzorb/noThankYouMicrosoft/releases). \ No newline at end of file +Licensed under WTFPL. \ No newline at end of file diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java index 68eb2e8..3e51cfc 100644 --- a/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java @@ -1,21 +1,71 @@ package xyz.fzorb.noThankYouMicrosoft; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; +import xyz.fzorb.noThankYouMicrosoft.flagFrontend.menuEvents; +import xyz.fzorb.noThankYouMicrosoft.flagFrontend.prideCommand; + +import java.io.File; +import java.io.IOException; public final class NoThankYouMicrosoft extends JavaPlugin { private static JavaPlugin instance; + private static File databaseFile; + private static YamlConfiguration databaseFileConfig; @Override public void onEnable() { instance = this; this.saveDefaultConfig(); + createDatabaseConfig(); this.getServer().getPluginManager().registerEvents(new messageListener(), this); + this.getServer().getPluginManager().registerEvents(new menuEvents(), this); + this.getCommand("pride").setExecutor(new prideCommand()); + } + + private void createDatabaseConfig() { + databaseFile = new File(getDataFolder(), "database.yml"); + if (!databaseFile.exists()) { + databaseFile.getParentFile().mkdirs(); + saveResource("database.yml", false); + } + + databaseFileConfig = new YamlConfiguration(); + try { + databaseFileConfig.load(databaseFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + + public static void reReadDatabase(JavaPlugin instance) { + File databaseFile = new File(instance.getDataFolder(), "database.yml"); + databaseFileConfig = new YamlConfiguration(); + try { + databaseFileConfig.load(databaseFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + + public static void saveDatabase(JavaPlugin instance) { + File databaseFile = new File(instance.getDataFolder(), "database.yml"); + try { + databaseFileConfig.save(databaseFile); + } catch (IOException e) { + e.printStackTrace(); + } } public static JavaPlugin getInstance() { return instance; } + public static FileConfiguration getDatabase() { + return databaseFileConfig; + } @Override public void onDisable() { diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java new file mode 100644 index 0000000..e76d5f2 --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java @@ -0,0 +1,22 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import xyz.fzorb.noThankYouMicrosoft.flagManager; + +public class menuEvents implements Listener { + @EventHandler + public static void onPlayerInteractWithChestGUI(InventoryClickEvent event) { + if (event.getInventory().equals(prideMenu.prideMenus.get(event.getWhoClicked().getUniqueId()))) { + event.setCancelled(true); + event.getInventory().close(); + prideMenu.prideMenus.remove(event.getWhoClicked().getUniqueId()); + ItemStack item = event.getCurrentItem(); + String pride = PlainTextComponentSerializer.plainText().serialize(item.getItemMeta().displayName()); + flagManager.setUserPride(event.getWhoClicked().getUniqueId(), pride); + } + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java new file mode 100644 index 0000000..f1676bb --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java @@ -0,0 +1,18 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import xyz.fzorb.noThankYouMicrosoft.flagManager; + +public class prideCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { return true; } + prideMenu.prideMenus.put(((Player) sender).getUniqueId(), prideMenu.generatePrideMenu()); + ((Player) sender).openInventory(prideMenu.prideMenus.get(((Player) sender).getUniqueId())); + return true; + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java new file mode 100644 index 0000000..c1ed7f3 --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java @@ -0,0 +1,52 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.fzorb.noThankYouMicrosoft.NoThankYouMicrosoft; + +import java.util.*; + +public class prideMenu { + + public static final Map prideMenus = new HashMap<>(); + + public static Integer calculateRows(Integer number) { + if (number <= 9) { return 9; } + else if (number <= 18) { return 18; } + else if (number <= 27) { return 27; } + else if (number <= 36) { return 36; } + else if (number <= 45) { return 45; } + else if (number <= 54) { return 54; } + return 0; // this can NEVER be the case, can it? who am I kidding, I DOUBT there will ever be more than 54 flags! + } + + public static ItemStack generatePrideItem(String pride) { + ItemStack is = new ItemStack(Material.PAPER, 1); + ItemMeta im = is.getItemMeta(); + im.displayName(MiniMessage.miniMessage().deserialize("" + pride + "")); + is.setItemMeta(im); + return is; + } + + public static ItemStack generateNoPrideItem() { + ItemStack is = new ItemStack(Material.BARRIER, 1); + ItemMeta im = is.getItemMeta(); + im.displayName(MiniMessage.miniMessage().deserialize("none")); + is.setItemMeta(im); + return is; + } + + public static Inventory generatePrideMenu() { + List prides = NoThankYouMicrosoft.getInstance().getConfig().getStringList("prides"); + Inventory inventory = Bukkit.createInventory(null, calculateRows(prides.toArray().length + 1), MiniMessage.miniMessage().deserialize("Choose your flag")); + for (String pride : prides) { + inventory.addItem(generatePrideItem(pride)); + } + inventory.addItem(generateNoPrideItem()); + return inventory; + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java new file mode 100644 index 0000000..449efc9 --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java @@ -0,0 +1,21 @@ +package xyz.fzorb.noThankYouMicrosoft; + +import java.util.UUID; + +public class flagManager { + public static String getUserPride(UUID uuid) { + NoThankYouMicrosoft.reReadDatabase(NoThankYouMicrosoft.getInstance()); + String pride = NoThankYouMicrosoft.getDatabase().getString("players.%s.flag".formatted(uuid.toString())); + if (pride == null) { + return "none"; + } else { + return pride; + } + } + + public static void setUserPride(UUID uuid, String pride) { + NoThankYouMicrosoft.reReadDatabase(NoThankYouMicrosoft.getInstance()); + NoThankYouMicrosoft.getDatabase().set("players.%s.flag".formatted(uuid.toString()), pride); + NoThankYouMicrosoft.saveDatabase(NoThankYouMicrosoft.getInstance()); + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/messageListener.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/messageListener.java index f645325..c5110ec 100644 --- a/src/main/java/xyz/fzorb/noThankYouMicrosoft/messageListener.java +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/messageListener.java @@ -14,6 +14,19 @@ public class messageListener implements Listener { String message = MiniMessage.miniMessage().serialize(event.message()); event.setCancelled(true); String format = NoThankYouMicrosoft.getInstance().getConfig().getString("format"); - Bukkit.getServer().broadcast(MiniMessage.miniMessage().deserialize(format.replace("{{username}}", player.getDisplayName()).replace("{{message}}", message))); + String finalMessage = format + .replace("{{username}}", player.getDisplayName()) + .replace("{{message}}", message); + if (!flagManager.getUserPride(player.getUniqueId()).equals("none")) { + finalMessage = finalMessage + .replace("{{pride_start}}", "") + .replace("{{pride_end}}", ""); + } else { + finalMessage = finalMessage + .replace("{{pride_start}}", "") + .replace("{{pride_end}}", ""); + } + Bukkit.getServer().broadcast(MiniMessage.miniMessage().deserialize(finalMessage)); + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0a2aa35..d52c603 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1 +1,21 @@ -format: "<{{username}}> {{message}}" #you can use MiniMessage! +format: "<{{pride_start}}{{username}}{{pride_end}}> {{message}}" #you can use MiniMessage! + +prides: + - pride + - progress + - trans + - bi + - pan + - nb + - lesbian + - ace + - agender + - demisexual + - genderqueer + - genderfluid + - intersex + - aro + - queer + - gay + - bigender + - demigender \ No newline at end of file diff --git a/src/main/resources/database.yml b/src/main/resources/database.yml new file mode 100644 index 0000000..9bf0948 --- /dev/null +++ b/src/main/resources/database.yml @@ -0,0 +1,3 @@ +players: + uuid: + flag: pride \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 02605ec..caed1af 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,3 +6,7 @@ prefix: nTYM authors: [ fzorb ] description: Rewrites your Minecraft messages to make them unreportable website: https://git.fzorb.xyz/fzorb/noThankYouMicrosoft +commands: + pride: + description: Open pride selection menu + usage: /pride