Guest User

Untitled

a guest
May 26th, 2023
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. package mishtoof.badgesystem;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.Material;
  6. import org.bukkit.command.Command;
  7. import org.bukkit.command.CommandExecutor;
  8. import org.bukkit.command.CommandSender;
  9. import org.bukkit.configuration.ConfigurationSection;
  10. import org.bukkit.configuration.file.FileConfiguration;
  11. import org.bukkit.configuration.file.YamlConfiguration;
  12. import org.bukkit.entity.Player;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.Listener;
  15. import org.bukkit.event.player.PlayerQuitEvent;
  16. import org.bukkit.inventory.Inventory;
  17. import org.bukkit.inventory.ItemStack;
  18. import org.bukkit.inventory.meta.ItemMeta;
  19. import org.bukkit.plugin.java.JavaPlugin;
  20.  
  21. import java.io.File;
  22. import java.io.IOException;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.UUID;
  27.  
  28. public class Badges extends JavaPlugin implements CommandExecutor {
  29. public static final Map<String, ItemStack> badgeItems = new HashMap<>();
  30. private final Map<UUID, Inventory> playerInventories = new HashMap<>();
  31. private final Map<UUID, BadgeData> playerBadgeData = new HashMap<>();
  32.  
  33. @Override
  34. public void onEnable() {
  35. initializeBadgeItems();
  36. loadPlayerBadgeData(); // Load player badge data when the server starts
  37. getCommand("badges").setExecutor(this);
  38. getServer().getPluginManager().registerEvents((Listener) this, this);
  39. getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this);
  40.  
  41. }
  42.  
  43. @Override
  44. public void onDisable() {
  45. savePlayerBadgeData();
  46. }
  47.  
  48. class PlayerQuitListener implements Listener {
  49. @EventHandler
  50. public void onPlayerQuit(PlayerQuitEvent event) {
  51. Player player = event.getPlayer();
  52. playerInventories.remove(player.getUniqueId());
  53. savePlayerBadgeData(); // Save player badge data when they quit
  54. }
  55. }
  56.  
  57. @Override
  58. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  59. if (!(sender instanceof Player)) {
  60. sender.sendMessage("Only players can use this command.");
  61. return true;
  62. }
  63.  
  64. Player player = (Player) sender;
  65.  
  66. if (args.length == 0) {
  67. Inventory inventory = createPersonalInventory(player);
  68. player.openInventory(inventory);
  69. } else if (args.length == 3 && args[0].equalsIgnoreCase("give")) {
  70. String targetPlayerName = args[1];
  71. Player targetPlayer = Bukkit.getPlayer(targetPlayerName);
  72.  
  73. if (targetPlayer != null) {
  74. String badgeType = args[2];
  75.  
  76. if (badgeItems.containsKey(badgeType.toLowerCase())) {
  77. ItemStack badge = badgeItems.get(badgeType.toLowerCase());
  78. Inventory inventory = createPersonalInventory(targetPlayer);
  79. inventory.addItem(badge);
  80. player.sendMessage("You gave the " + badgeType + " badge to " + targetPlayer.getName() + "!");
  81. targetPlayer.sendMessage("You have received the " + badgeType + " badge!");
  82. } else {
  83. player.sendMessage("Badgetype: " + ChatColor.RED + badgeType + ChatColor.WHITE + " does not exist.");
  84. }
  85. } else {
  86. player.sendMessage("Player " + targetPlayerName + " not found.");
  87. }
  88. } else {
  89. player.sendMessage(ChatColor.RED + "Invalid command usage. Usage: /badges [give <playername> <badgetype>]");
  90. }
  91.  
  92. return true;
  93. }
  94.  
  95. private Inventory createPersonalInventory(Player player) {
  96. UUID playerUUID = player.getUniqueId();
  97. Inventory inventory = playerInventories.get(playerUUID);
  98.  
  99. if (inventory == null) {
  100. inventory = Bukkit.createInventory(player, 27, player.getName() + "'s Badges");
  101. playerInventories.put(playerUUID, inventory);
  102. }
  103.  
  104. return inventory;
  105. }
  106.  
  107. static void initializeBadgeItems() {
  108. // Add badge items to the map
  109. String[] badgeTypes = {"normal", "fire", "water", "grass", "electric", "ice", "fighting", "poison", "ground", "flying"};
  110. for (String badgeType : badgeTypes) {
  111. ItemStack badgeItem = createBadgeItem(badgeType);
  112. badgeItems.put(badgeType.toLowerCase(), badgeItem);
  113. }
  114. }
  115.  
  116. private static ItemStack createBadgeItem(String badgeType) {
  117. ItemStack badge = new ItemStack(Material.DIAMOND);
  118. ItemMeta badgeMeta = badge.getItemMeta();
  119. badgeMeta.setDisplayName(ChatColor.GREEN + badgeType);
  120. badge.setItemMeta(badgeMeta);
  121.  
  122. return badge;
  123. }
  124.  
  125. private void loadPlayerBadgeData() {
  126. File dataFolder = getDataFolder();
  127. if (!dataFolder.exists()) {
  128. dataFolder.mkdirs();
  129. }
  130.  
  131. File configFile = new File(dataFolder, "badge_data.yml");
  132. if (!configFile.exists()) {
  133. saveResource("badge_data.yml", false);
  134. }
  135.  
  136. FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
  137.  
  138. ConfigurationSection playersSection = config.getConfigurationSection("players");
  139. if (playersSection != null) {
  140. for (String playerUUID : playersSection.getKeys(false)) {
  141. UUID uuid = UUID.fromString(playerUUID);
  142. ConfigurationSection playerSection = playersSection.getConfigurationSection(playerUUID);
  143. if (playerSection != null) {
  144. BadgeData badgeData = new BadgeData();
  145. List<String> badgeTypes = playerSection.getStringList("badges");
  146. if (badgeTypes != null) {
  147. badgeData.getBadgeTypes().addAll(badgeTypes);
  148. }
  149. playerBadgeData.put(uuid, badgeData);
  150. }
  151. }
  152. }
  153. }
  154.  
  155. private void savePlayerBadgeData() {
  156. File dataFolder = getDataFolder();
  157. if (!dataFolder.exists()) {
  158. dataFolder.mkdirs();
  159. }
  160.  
  161. File configFile = new File(dataFolder, "badge_data.yml");
  162. FileConfiguration config = new YamlConfiguration();
  163.  
  164. ConfigurationSection playersSection = config.createSection("players");
  165. for (Map.Entry<UUID, BadgeData> entry : playerBadgeData.entrySet()) {
  166. UUID uuid = entry.getKey();
  167. BadgeData badgeData = entry.getValue();
  168. ConfigurationSection playerSection = playersSection.createSection(uuid.toString());
  169. playerSection.set("badges", badgeData.getBadgeTypes());
  170. }
  171.  
  172. try {
  173. config.save(configFile);
  174. getLogger().info("Player badge data saved to file.");
  175. } catch (IOException e) {
  176. getLogger().severe("Failed to save player badge data: " + e.getMessage());
  177. }
  178. }
  179.  
  180. }
Advertisement
Add Comment
Please, Sign In to add comment