Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/projects.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions BlockShuffle/BlockShuffle.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="com.learnspigot.blockshuffle" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
63 changes: 63 additions & 0 deletions ChatColors/src/main/java/com/tqqn/chatcolors/ChatColors.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.tqqn.chatcolors;

import com.tqqn.chatcolors.colors.Colors;
import com.tqqn.chatcolors.commands.ChooseChatColorCommand;
import com.tqqn.chatcolors.listeners.ChatListener;
import com.tqqn.chatcolors.listeners.InteractInventoryListener;
import com.tqqn.chatcolors.listeners.JoinListener;
import com.tqqn.chatcolors.listeners.QuitListener;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;

public final class ChatColors extends JavaPlugin {

private PlayerManager playerManager;
private HashMap<Material, Colors> loadedColors;

private static int colorSize;

@Override
public void onEnable() {
this.playerManager = new PlayerManager(this);
loadColors();
registerListeners();
registerCommands();
colorSize = loadedColors.size();
}

@Override
public void onDisable() {
// Plugin shutdown logic
}

private void loadColors() {
loadedColors = new HashMap<>();
for (Colors color : Colors.values()) {
loadedColors.put(color.getGuiMaterial(), color);
}
}

public static int getColorsSize() {
return colorSize;
}

private void registerListeners() {
PluginManager pluginManager = Bukkit.getPluginManager();
pluginManager.registerEvents(new ChatListener(playerManager), this);
pluginManager.registerEvents(new JoinListener(playerManager), this);
pluginManager.registerEvents(new QuitListener(playerManager), this);
pluginManager.registerEvents(new InteractInventoryListener(playerManager), this);
}

private void registerCommands() {
this.getCommand("chatcolor").setExecutor(new ChooseChatColorCommand(playerManager));
}

public HashMap<Material, Colors> getLoadedColors() {
return loadedColors;
}
}
53 changes: 53 additions & 0 deletions ChatColors/src/main/java/com/tqqn/chatcolors/PlayerManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.tqqn.chatcolors;

import com.tqqn.chatcolors.data.PluginPlayer;
import com.tqqn.chatcolors.gui.ChatColorGUI;
import org.bukkit.entity.Player;

import java.util.HashMap;
import java.util.UUID;

public class PlayerManager {

private final ChatColors plugin;
private final HashMap<UUID, PluginPlayer> loadedPlayers;
private final HashMap<UUID, ChatColorGUI> openInventories;

public PlayerManager(ChatColors plugin) {
this.plugin = plugin;
this.loadedPlayers = new HashMap<>();
this.openInventories = new HashMap<>();
}

public ChatColors getPlugin() {
return plugin;
}

public PluginPlayer getPluginPlayer(UUID uuid) {
return loadedPlayers.get(uuid);
}

public void loadPluginPlayer(Player player) {
if (loadedPlayers.containsKey(player.getUniqueId())) return;
loadedPlayers.put(player.getUniqueId(), new PluginPlayer(player));
}

public void unLoadPluginPlayer(Player player) {
loadedPlayers.remove(player.getUniqueId());
}

public void openInventory(PluginPlayer pluginPlayer) {
openInventories.put(pluginPlayer.getUuid(), new ChatColorGUI(pluginPlayer));
openInventories.get(pluginPlayer.getUuid()).openInventory();
new ChatColorGUI(pluginPlayer).openInventory();
}

public void closeInventory(PluginPlayer pluginPlayer) {
openInventories.get(pluginPlayer.getUuid()).closeInventory();
openInventories.remove(pluginPlayer.getUuid());
}

public boolean existPlayerInventory(PluginPlayer player) {
return openInventories.containsKey(player.getUuid());
}
}
33 changes: 33 additions & 0 deletions ChatColors/src/main/java/com/tqqn/chatcolors/colors/Colors.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.tqqn.chatcolors.colors;

import org.bukkit.Material;

public enum Colors {

NONE("", "None", Material.BARRIER),
BLACK("<black>", "Black", Material.BLACK_WOOL),
DARK_RED("<dark_red>", "Dark Red", Material.REDSTONE);

private final String color;
private final String prettyName;
private final Material guiMaterial;
Colors(String color, String prettyName, Material guiMaterial) {
this.color = color;
this.prettyName = prettyName;
this.guiMaterial = guiMaterial;
}

public String getColor() {
return color;
}

public String getPrettyName() {
return prettyName;
}

public Material getGuiMaterial() {
return guiMaterial;
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.tqqn.chatcolors.commands;

import com.tqqn.chatcolors.PlayerManager;
import com.tqqn.chatcolors.gui.ChatColorGUI;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class ChooseChatColorCommand implements CommandExecutor {

private final PlayerManager playerManager;

public ChooseChatColorCommand(PlayerManager playerManager) {
this.playerManager = playerManager;
}
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
if (!(commandSender instanceof Player player)) return true;
playerManager.openInventory(playerManager.getPluginPlayer(player.getUniqueId()));
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.tqqn.chatcolors.data;

import com.tqqn.chatcolors.colors.Colors;
import org.bukkit.entity.Player;

import java.util.UUID;

public class PluginPlayer {

private final Player player;
private final UUID uuid;
private final String name;


private Colors selectedColor;

public PluginPlayer(Player player) {
this.player = player;
this.uuid = player.getUniqueId();
this.name = player.getName();
this.selectedColor = Colors.NONE;
}

public Player getPlayer() {
return player;
}

public UUID getUuid() {
return uuid;
}

public String getName() {
return name;
}

public Colors getSelectedColor() {
return selectedColor;
}

public void setSelectedColor(Colors selectedColor) {
this.selectedColor = selectedColor;
}
}
75 changes: 75 additions & 0 deletions ChatColors/src/main/java/com/tqqn/chatcolors/gui/ChatColorGUI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.tqqn.chatcolors.gui;

import com.tqqn.chatcolors.ChatColors;
import com.tqqn.chatcolors.colors.Colors;
import com.tqqn.chatcolors.data.PluginPlayer;
import com.tqqn.chatcolors.utils.ChatUtils;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class ChatColorGUI {

private final PluginPlayer player;
private final Inventory inventory;

public ChatColorGUI(PluginPlayer player) {
this.player = player;

this.inventory = Bukkit.createInventory(null, getFinalInventorySize(ChatColors.getColorsSize()), ChatUtils.format("<red>ChatColor menu"));
initInventoryItems();
}

private int getFinalInventorySize(int size) {
if (size <= 9) return 9;
if (size <= 18) return 18;
if (size <= 27) return 27;
if (size <= 36) return 36;
if (size <= 45) return 45;
if (size <= 54) return 54;
return 0;
}

private void initInventoryItems() {
int slot = 0;
for (Colors colors : Colors.values()) {
if (colors.equals(Colors.NONE)) continue;
inventory.setItem(slot, createGUIItem(colors, player.getSelectedColor().equals(colors)));
slot++;
}

inventory.setItem(slot, createGUIItem(Colors.NONE, player.getSelectedColor().equals(Colors.NONE)));
}

private ItemStack createGUIItem(Colors color, boolean isChosen) {

ItemStack itemStack = new ItemStack(color.getGuiMaterial());
ItemMeta meta = itemStack.getItemMeta();
Component name;

if (isChosen) {
name = ChatUtils.format("<aqua>[Selected] " + color.getPrettyName());
meta.addEnchant(Enchantment.DURABILITY, 0, true);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
} else {
name = ChatUtils.format(color.getPrettyName());
}

meta.displayName(name);
itemStack.setItemMeta(meta);

return itemStack;
}

public void openInventory() {
player.getPlayer().openInventory(inventory);
}

public void closeInventory() {
player.getPlayer().closeInventory();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.tqqn.chatcolors.listeners;

import com.tqqn.chatcolors.PlayerManager;
import com.tqqn.chatcolors.data.PluginPlayer;
import com.tqqn.chatcolors.utils.ChatUtils;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class ChatListener implements Listener {

private final PlayerManager playerManager;

public ChatListener(PlayerManager playerManager) {
this.playerManager = playerManager;
}

@EventHandler
public void onAsyncChat(AsyncChatEvent event) {
event.setCancelled(true);
PluginPlayer pluginPlayer = playerManager.getPluginPlayer(event.getPlayer().getUniqueId());

Bukkit.getOnlinePlayers().forEach(players -> players.sendMessage(ChatUtils.format("<white>" + pluginPlayer.getName() + ": " + pluginPlayer.getSelectedColor().getColor() + ((TextComponent)event.message()).content())));
}
}
Loading