Untitled
unknown
plain_text
5 months ago
26 kB
5
Indexable
package org.ogfactions.factions; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.RegionContainer; import net.md_5.bungee.api.ChatColor; public class Main extends JavaPlugin implements Listener { private HashMap<UUID, Long> inviteMap = new HashMap<>(); @Override public void onEnable() { Bukkit.getServer().getPluginManager().registerEvents(this, this); saveDefaultConfig(); Bukkit.getScheduler().runTaskTimer(this, () -> cleanUpExpiredInvites(), 0L, 1200L); // 1200 ticks = 1 minute } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("faction") || cmd.getName().equalsIgnoreCase("f")) { if (sender instanceof Player) { Player player = (Player) sender; UUID playerUUID = player.getUniqueId(); if (args.length == 0) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aᴄᴏᴍᴍᴀɴᴅs")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f create <name> &7(Create your own faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f disband &7(Disband your faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f invite <player> &7(Invite a player to your faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f kick <player> &7(Kick a player from your faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f join <name> &7(Join another player's faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f leave &7(Leave your current faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f claim &7(Claim land for your faction)")); // /f claim command player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f unclaim &7(Unclaim land for your faction)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f power &7(View your current power level)")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &f/f info <name/player> &7(View faction or player information)")); } else if (args.length == 1) { if (args[0].equalsIgnoreCase("power")) { // Get player's personal power int playerPower = getConfig().getInt("Power." + playerUUID.toString(), 0); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aYour Power: &e" + playerPower)); } else if(args[0].equalsIgnoreCase("leave")) { String playerFaction = getFaction(player.getUniqueId()); if(playerFaction != null) { if(getConfig().getString("Factions." + playerFaction + ".Owner").equals(player.getUniqueId().toString())) { player.sendMessage(ChatColor.RED + "You cannot leave your own faction. Use /f disband to disband it."); } else { List<String> playersInFaction = getConfig().getStringList("Factions." + playerFaction + ".Players"); playersInFaction.remove(player.getUniqueId().toString()); getConfig().set("Factions." + playerFaction + ".Players", playersInFaction); saveConfig(); player.sendMessage(ChatColor.GREEN + "You have left the faction " + playerFaction + "."); Bukkit.broadcastMessage(ChatColor.YELLOW + player.getName() + " has left the faction " + playerFaction + "!"); } } else { player.sendMessage(ChatColor.RED + "You are not part of any faction."); } } else if (args[0].equalsIgnoreCase("claim")) { // Claim land for the faction String playerFaction = getFaction(playerUUID); if (playerFaction == null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &cYou are not part of a faction.")); return true; } int totalPower = getTotalFactionPower(playerFaction); List<String> claimedChunks = getConfig().getStringList("Factions." + playerFaction + ".Claims"); // Calculate how many chunks the faction can claim int maxClaims = (int) (totalPower / 2.5); if (claimedChunks.size() >= maxClaims) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &cYou don't have enough power to claim more chunks.")); return true; } // Get the chunk the player is standing in Chunk chunk = player.getLocation().getChunk(); String regionName = playerFaction + "_" + chunk.getX() + "_" + chunk.getZ(); RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); RegionManager regions = container.get(BukkitAdapter.adapt(player.getWorld())); if (regions == null) { player.sendMessage(ChatColor.RED + "WorldGuard regions not found."); return true; } // Check if the chunk is already claimed if (regions.hasRegion(regionName)) { player.sendMessage(ChatColor.RED + "This chunk is already claimed."); return true; } // Define the region as a cuboid based on the chunk int bx = chunk.getX() << 4; int bz = chunk.getZ() << 4; ProtectedCuboidRegion region = new ProtectedCuboidRegion( regionName, BlockVector3.at(bx, 0, bz), BlockVector3.at(bx + 15, player.getWorld().getMaxHeight(), bz + 15) ); // Add the region and set the owner regions.addRegion(region); region.getOwners().addPlayer(playerUUID); // Set flags with member permissions region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); region.setFlag(Flags.BLOCK_BREAK, StateFlag.State.ALLOW); region.setFlag(Flags.BUILD.getRegionGroupFlag(), RegionGroup.MEMBERS); region.setFlag(Flags.BLOCK_BREAK.getRegionGroupFlag(), RegionGroup.MEMBERS); // Update the config with the claimed chunk String chunkKey = chunk.getX() + "," + chunk.getZ(); claimedChunks.add(chunkKey); getConfig().set("Factions." + playerFaction + ".Claims", claimedChunks); saveConfig(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aChunk claimed successfully for your faction.")); } else if (args[0].equalsIgnoreCase("unclaim")) { // Handle unclaim String playerFaction = getFaction(playerUUID); if (playerFaction == null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &cYou are not part of a faction.")); return true; } Chunk chunk = player.getLocation().getChunk(); String chunkKey = chunk.getX() + "," + chunk.getZ(); List<String> claimedChunks = getConfig().getStringList("Factions." + playerFaction + ".Claims"); if (claimedChunks.contains(chunkKey)) { claimedChunks.remove(chunkKey); getConfig().set("Factions." + playerFaction + ".Claims", claimedChunks); saveConfig(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aChunk unclaimed successfully.")); } else { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &cThis chunk is not claimed by your faction.")); } } } else if (args.length == 2) { if (args[0].equalsIgnoreCase("create")) { String name = args[1].toLowerCase(); if (name.length() > 6) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aғᴀᴄᴛɪᴏɴ ᴄʀᴇᴀᴛɪᴏɴ")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &4Names cannot exceed 6 characters!")); return true; } if (getConfig().getConfigurationSection("Factions") == null) { getConfig().createSection("Factions"); } if (getConfig().getString("Factions." + name.toLowerCase()) != null) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aғᴀᴄᴛɪᴏɴ ᴄʀᴇᴀᴛɪᴏɴ")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &4This team name is already taken!")); return true; } for (String faction : getConfig().getConfigurationSection("Factions").getKeys(false)) { List<String> playersInFaction = getConfig().getStringList("Factions." + faction + ".Players"); String factionOwner = getConfig().getString("Factions." + faction + ".Owner"); if (playersInFaction.contains(playerUUID.toString())) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aғᴀᴄᴛɪᴏɴ ᴄʀᴇᴀᴛɪᴏɴ")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &4You are already in a faction!")); return true; } if (factionOwner != null && factionOwner.equals(playerUUID.toString())) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aғᴀᴄᴛɪᴏɴ ᴄʀᴇᴀᴛɪᴏɴ")); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &4You already own a faction!")); return true; } } getConfig().set("Factions." + name.toLowerCase() + ".Owner", player.getUniqueId().toString()); getConfig().set("Factions." + name.toLowerCase() + ".Players", new ArrayList<>()); getConfig().set("Factions." + name.toLowerCase() + ".Claims", new ArrayList<>()); saveConfig(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aFaction " + "&e" + name.toLowerCase() + " &acreated successfully!")); Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &e" + player.getName() + " &ahas created the faction &e" + name.toLowerCase())); } if (args[0].equalsIgnoreCase("info")) { String targetName = args[1].toLowerCase(); if (getConfig().getConfigurationSection("Factions." + targetName) != null) { String factionOwner = getConfig().getString("Factions." + targetName + ".Owner"); List<String> playersInFaction = getConfig().getStringList("Factions." + targetName + ".Players"); List<String> factionClaims = getConfig().getStringList("Factions." + targetName + ".Claims"); int totalFactionPower = getTotalFactionPower(targetName); int maxClaims = (int) (totalFactionPower / 2.5); List<String> playerNames = new ArrayList<>(); for (String uuid : playersInFaction) { OfflinePlayer factionMember = Bukkit.getOfflinePlayer(UUID.fromString(uuid)); playerNames.add(factionMember.getName()); } player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aFaction &e" + targetName)); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &fOwner: &e" + Bukkit.getOfflinePlayer(UUID.fromString(factionOwner)).getName())); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &fPlayers: &e" + (playerNames.isEmpty() ? "None" : String.join(", ", playerNames)))); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &fClaims: &e" + factionClaims.size())); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &fTotal Power: &e" + (factionClaims.size() * 2.5) + "/" + totalFactionPower)); if (!factionClaims.isEmpty()) { for (String claim : factionClaims) { String[] parts = claim.split(","); int x = Integer.parseInt(parts[0]); int z = Integer.parseInt(parts[1]); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a➥ &fClaim: [X " + x + ", Z " + z + "]")); } } } } if (args[0].equalsIgnoreCase("invite")) { Player target = Bukkit.getPlayer(args[1]); if (target != null && target.isOnline()) { UUID targetUUID = target.getUniqueId(); if (inviteMap.containsKey(targetUUID)) { player.sendMessage(ChatColor.RED + "That player is already invited!"); } else { inviteMap.put(targetUUID, System.currentTimeMillis()); player.sendMessage(ChatColor.GREEN + "You have invited " + target.getName() + " to your faction."); target.sendMessage(ChatColor.GREEN + "You have been invited to join the faction " + getFaction(playerUUID)); List<String> invitedPlayers = getConfig().getStringList("Factions." + getFaction(playerUUID) + ".Invites"); invitedPlayers.add(targetUUID.toString()); getConfig().set("Factions." + getFaction(playerUUID) + ".Invites", invitedPlayers); saveConfig(); } } else { player.sendMessage(ChatColor.RED + "That player is not online."); } } if(args[0].equalsIgnoreCase("join")) { String factionName = args[1].toLowerCase(); if(getConfig().getConfigurationSection("Factions." + factionName) != null) { List<String> invitedPlayers = getConfig().getStringList("Factions." + factionName + ".Invites"); if(invitedPlayers.contains(playerUUID.toString())) { List<String> playersInFaction = getConfig().getStringList("Factions." + factionName + ".Players"); playersInFaction.add(playerUUID.toString()); getConfig().set("Factions." + factionName + ".Players", playersInFaction); invitedPlayers.remove(playerUUID.toString()); getConfig().set("Factions." + factionName + ".Invites", invitedPlayers); saveConfig(); player.sendMessage(ChatColor.GREEN + "You have joined the faction " + factionName + "!"); Bukkit.broadcastMessage(ChatColor.YELLOW + player.getName() + " has joined the faction " + factionName + "!"); } else { player.sendMessage(ChatColor.RED + "You haven't been invited to that faction."); } } else { player.sendMessage(ChatColor.RED + "That faction does not exist."); } } if (args[0].equalsIgnoreCase("kick")) { if (args.length == 2) { String playerFaction = getFaction(playerUUID); if (playerFaction != null) { if (getConfig().getString("Factions." + playerFaction + ".Owner").equals(playerUUID.toString())) { OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]); if (target.hasPlayedBefore()) { UUID targetUUID = target.getUniqueId(); List<String> playersInFaction = getConfig().getStringList("Factions." + playerFaction + ".Players"); if (playersInFaction.contains(targetUUID.toString())) { playersInFaction.remove(targetUUID.toString()); getConfig().set("Factions." + playerFaction + ".Players", playersInFaction); saveConfig(); player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &aYou have kicked &e" + target.getName() + " &afrom the faction &e" + playerFaction + "&a.")); if (target.isOnline()) { target.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &cYou have been kicked from the faction &e" + playerFaction + "&c!")); } Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&eᴏɢ &bғᴀᴄᴛɪᴏɴs &7| &e" + target.getName() + " &ahas been kicked from the faction &e" + playerFaction + "&a!")); } } } } } } } } } return true; } private String getFaction(UUID playerUUID) { for (String faction : getConfig().getConfigurationSection("Factions").getKeys(false)) { List<String> playersInFaction = getConfig().getStringList("Factions." + faction + ".Players"); String factionOwner = getConfig().getString("Factions." + faction + ".Owner"); if (playersInFaction.contains(playerUUID.toString()) || (factionOwner != null && factionOwner.equals(playerUUID.toString()))) { return faction; } } return null; } public int getTotalFactionPower(String factionName) { int totalFactionPower = 0; String factionOwner = getConfig().getString("Factions." + factionName + ".Owner"); List<String> playersInFaction = getConfig().getStringList("Factions." + factionName + ".Players"); if (factionOwner != null) { totalFactionPower += getConfig().getInt("Power." + factionOwner, 0); } for (String uuid : playersInFaction) { totalFactionPower += getConfig().getInt("Power." + uuid, 0); } return totalFactionPower; } private void cleanUpExpiredInvites() { long currentTime = System.currentTimeMillis(); inviteMap.entrySet().removeIf(entry -> currentTime - entry.getValue() > 300000); // 5 minutes } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); UUID playerUUID = player.getUniqueId(); if (!player.hasPlayedBefore()) { getConfig().set("Power." + playerUUID.toString(), 10); saveConfig(); } String playerFaction = getFaction(playerUUID); if (playerFaction != null) { updateFactionRegionMembers(playerFaction); } } public void updateFactionRegionMembers(String factionName) { List<String> factionMembers = new ArrayList<>(getConfig().getStringList("Factions." + factionName + ".Players")); factionMembers.add(getConfig().getString("Factions." + factionName + ".Owner")); factionMembers.add(getConfig().getString("Factions." + factionName + ".Players")); List<UUID> memberUUIDs = new ArrayList<>(); for (String member : factionMembers) { memberUUIDs.add(UUID.fromString(member)); } List<String> claimedChunks = getConfig().getStringList("Factions." + factionName + ".Claims"); if (!claimedChunks.isEmpty()) { RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); for (String claim : claimedChunks) { String[] parts = claim.split(","); int x = Integer.parseInt(parts[0]); int z = Integer.parseInt(parts[1]); String regionName = factionName + "_" + x + "_" + z; RegionManager regionManager = container.get(BukkitAdapter.adapt(Bukkit.getWorld("world"))); if (regionManager != null) { ProtectedRegion region = regionManager.getRegion(regionName); if (region != null) { region.getOwners().clear(); for (UUID uuid : memberUUIDs) { region.getOwners().addPlayer(uuid); } } } } } } public void onPlayerLeaveFaction(Player player, String factionName) { List<String> playersInFaction = getConfig().getStringList("Factions." + factionName + ".Players"); playersInFaction.remove(player.getUniqueId().toString()); getConfig().set("Factions." + factionName + ".Players", playersInFaction); saveConfig(); updateFactionRegionMembers(factionName); } }
Editor is loading...
Leave a Comment