Untitled
unknown
plain_text
a year ago
26 kB
17
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