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