mirror of
https://github.com/Freezy-Studios/BlazeSMP.git
synced 2025-04-22 00:54:04 +02:00
Added ClaimSystem!
This commit is contained in:
parent
b29b691270
commit
3e54c33b2a
7 changed files with 270 additions and 7 deletions
|
@ -1,6 +1,7 @@
|
|||
package me.freezy.plugins.papermc.blazesmp;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.freezy.plugins.papermc.blazesmp.command.ClaimCommand;
|
||||
import me.freezy.plugins.papermc.blazesmp.command.ClanCommand;
|
||||
import me.freezy.plugins.papermc.blazesmp.command.ReportCommand;
|
||||
import me.freezy.plugins.papermc.blazesmp.listener.PlayerChatListener;
|
||||
|
@ -64,6 +65,7 @@ public final class BlazeSMP extends JavaPlugin {
|
|||
this.log.info("Registering Commands...");
|
||||
new ClanCommand().register();
|
||||
new ReportCommand().register();
|
||||
new ClaimCommand().register();
|
||||
this.log.info("Registered Commands!");
|
||||
|
||||
this.log.info("Registering EventListeners...");
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package me.freezy.plugins.papermc.blazesmp.command;
|
||||
|
||||
import me.freezy.plugins.papermc.blazesmp.BlazeSMP;
|
||||
import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand;
|
||||
import me.freezy.plugins.papermc.blazesmp.module.Clan;
|
||||
import me.freezy.plugins.papermc.blazesmp.module.manager.Clans;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class ClaimCommand extends SimpleCommand {
|
||||
|
||||
private final Clans clans;
|
||||
|
||||
public ClaimCommand() {
|
||||
super("claim", List.of("unclaim"));
|
||||
this.clans = BlazeSMP.getInstance().getClans();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(MiniMessage.miniMessage().deserialize("<red>You must be a player to use this command!"));
|
||||
return true;
|
||||
}
|
||||
UUID playerUUID = player.getUniqueId();
|
||||
if (!clans.isInClan(playerUUID)) {
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>You must be in a clan to claim/unclaim chunks!"));
|
||||
return true;
|
||||
} else {
|
||||
if (label.equalsIgnoreCase("claim")) {
|
||||
Clan playerClan = clans.getClanByMember(playerUUID);
|
||||
LinkedHashMap<UUID, LinkedList<Chunk>> existingClaims=clans.getClanChunks(playerClan);
|
||||
if (existingClaims.containsKey(playerUUID)) {
|
||||
LinkedList<Chunk> playerClaims = existingClaims.get(playerUUID);
|
||||
int MAX_CLAIMS = 50;
|
||||
if (playerClaims.size() >= MAX_CLAIMS) {
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>You have reached the maximum amount of claims!"));
|
||||
} else {
|
||||
Chunk playerChunk = player.getLocation().getChunk();
|
||||
playerClaims.add(playerChunk);
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>Claimed chunk!"));
|
||||
existingClaims.put(playerUUID, playerClaims);
|
||||
clans.setClanChunks(playerClan, existingClaims);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} else if (label.equalsIgnoreCase("unclaim")) {
|
||||
Clan playerClan = clans.getClanByMember(playerUUID);
|
||||
LinkedHashMap<UUID, LinkedList<Chunk>> existingClaims=clans.getClanChunks(playerClan);
|
||||
if (existingClaims.containsKey(playerUUID)) {
|
||||
LinkedList<Chunk> playerClaims = existingClaims.get(playerUUID);
|
||||
Chunk playerChunk = player.getLocation().getChunk();
|
||||
if (playerClaims.contains(playerChunk)) {
|
||||
playerClaims.remove(playerChunk);
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>Unclaimed chunk!"));
|
||||
existingClaims.put(playerUUID, playerClaims);
|
||||
clans.setClanChunks(playerClan, existingClaims);
|
||||
} else {
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>You do not own this chunk!"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ import java.lang.reflect.Field;
|
|||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public abstract class SimpleCommand implements CommandExecutor, TabExecutor {
|
||||
protected static Logger logger = Logger.getLogger(BlazeSMP.class.getName());
|
||||
protected static CommandMap cmap;
|
||||
|
@ -27,6 +27,10 @@ public abstract class SimpleCommand implements CommandExecutor, TabExecutor {
|
|||
this(command, usage, null, null, null);
|
||||
}
|
||||
|
||||
public SimpleCommand(String command, List<String> alias) {
|
||||
this(command, null, null, null, alias);
|
||||
}
|
||||
|
||||
public SimpleCommand(String command, String usage, String description) {
|
||||
this(command, usage, description, null, null);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
package me.freezy.plugins.papermc.blazesmp.listener;
|
||||
|
||||
import me.freezy.plugins.papermc.blazesmp.BlazeSMP;
|
||||
import me.freezy.plugins.papermc.blazesmp.module.Clan;
|
||||
import me.freezy.plugins.papermc.blazesmp.module.manager.Clans;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
|
||||
public class PlayerClaimListener implements Listener {
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
Location location = event.getBlock().getLocation();
|
||||
Chunk chunk = location.getChunk();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
Clan clan = clans.getClanByChunk(chunk);
|
||||
if (clan != null) {
|
||||
if (clans.isInClan(event.getPlayer().getUniqueId(), clan)) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
Location location = event.getBlock().getLocation();
|
||||
Chunk chunk = location.getChunk();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
Clan clan = clans.getClanByChunk(chunk);
|
||||
if (clan != null) {
|
||||
if (clans.isInClan(event.getPlayer().getUniqueId(), clan)) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteractEvent(PlayerInteractEvent event) {
|
||||
Location location = event.getPlayer().getLocation();
|
||||
Chunk chunk = location.getChunk();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
Clan clan = clans.getClanByChunk(chunk);
|
||||
if (clan != null) {
|
||||
if (clans.isInClan(event.getPlayer().getUniqueId(), clan)) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
Location location = event.getPlayer().getLocation();
|
||||
Chunk chunk = location.getChunk();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
Clan clan = clans.getClanByChunk(chunk);
|
||||
if (clan != null) {
|
||||
if (clans.isInClan(event.getPlayer().getUniqueId(), clan)) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) {
|
||||
Location location = event.getPlayer().getLocation();
|
||||
Chunk chunk = location.getChunk();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
Clan clan = clans.getClanByChunk(chunk);
|
||||
if (clan != null) {
|
||||
if (clans.isInClan(event.getPlayer().getUniqueId(), clan)) {
|
||||
return;
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEnterClanClaim(PlayerMoveEvent event) {
|
||||
Chunk fromChunk = event.getFrom().getChunk();
|
||||
Chunk toChunk = event.getTo().getChunk();
|
||||
if (fromChunk.equals(toChunk)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
Clans clans = BlazeSMP.getInstance().getClans();
|
||||
|
||||
Clan oldClan = clans.getClanByChunk(fromChunk);
|
||||
Clan newClan = clans.getClanByChunk(toChunk);
|
||||
|
||||
if (oldClan != null && (!oldClan.equals(newClan))) {
|
||||
player.sendActionBar(
|
||||
MiniMessage.miniMessage().deserialize(
|
||||
"<red>You left the claim of <white>" + oldClan.getName() + "</white>!</red>"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (newClan != null && (!newClan.equals(oldClan))) {
|
||||
player.sendActionBar(
|
||||
MiniMessage.miniMessage().deserialize(
|
||||
"<red>Terretorry of <white>" + newClan.getName() + "</white> - <white>" +
|
||||
Bukkit.getOfflinePlayer(newClan.getChunkOwnerMap().get(toChunk)).getName() +
|
||||
"!</white></red>"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,12 +2,16 @@ package me.freezy.plugins.papermc.blazesmp.module.manager;
|
|||
|
||||
import lombok.Getter;
|
||||
import me.freezy.plugins.papermc.blazesmp.module.Clan;
|
||||
import org.bukkit.Chunk;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Getter
|
||||
public class Clans {
|
||||
private static final Logger LOGGER = Logger.getLogger("ClanManager");
|
||||
|
@ -31,7 +35,11 @@ public class Clans {
|
|||
File dir = new File(CLAN_STORAGE_PATH);
|
||||
if (!dir.exists()) {
|
||||
LOGGER.info("Clan storage directory does not exist. Creating directory...");
|
||||
dir.mkdirs();
|
||||
if (!dir.mkdirs()) {
|
||||
LOGGER.warning("Failed to create clan storage directory.");
|
||||
} else {
|
||||
LOGGER.info("Created clan storage directory.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
File[] files = dir.listFiles((file, name) -> name.endsWith(".json"));
|
||||
|
@ -123,6 +131,33 @@ public class Clans {
|
|||
}
|
||||
}
|
||||
|
||||
public LinkedHashMap<UUID, LinkedList<Chunk>> getClanChunks(Clan clan) {
|
||||
LinkedHashMap<UUID, LinkedList<Chunk>> clanChunks = new LinkedHashMap<>();
|
||||
for (Map.Entry<Chunk, UUID> entry : clan.getChunkOwnerMap().entrySet()) {
|
||||
UUID ownerUUID = entry.getValue();
|
||||
Chunk chunk = entry.getKey();
|
||||
if (!clanChunks.containsKey(ownerUUID)) {
|
||||
clanChunks.put(ownerUUID, new LinkedList<>());
|
||||
}
|
||||
clanChunks.get(ownerUUID).add(chunk);
|
||||
}
|
||||
return clanChunks;
|
||||
}
|
||||
|
||||
public LinkedList<Chunk> getPlayerChunks(UUID playerUUID) {
|
||||
LinkedList<Chunk> playerChunks = new LinkedList<>();
|
||||
for (Clan clan : clans) {
|
||||
if (clan.getChunkOwnerMap().containsValue(playerUUID)) {
|
||||
for (Map.Entry<Chunk, UUID> entry : clan.getChunkOwnerMap().entrySet()) {
|
||||
if (entry.getValue().equals(playerUUID)) {
|
||||
playerChunks.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return playerChunks;
|
||||
}
|
||||
|
||||
public boolean isLeader(UUID playerUUID) {
|
||||
for (Clan clan : clans) {
|
||||
if (clan.getLeaderUUID().equals(playerUUID)) {
|
||||
|
@ -159,6 +194,10 @@ public class Clans {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean isInClan(UUID playerUUID,Clan clan) {
|
||||
return clan.getMembers().contains(playerUUID) || clan.getLeaderUUID().equals(playerUUID) || (clan.getViceUUID() != null && clan.getViceUUID().equals(playerUUID));
|
||||
}
|
||||
|
||||
public Clan getClanByMember(UUID playerUUID) {
|
||||
for (Clan clan : clans) {
|
||||
if (clan.getMembers().contains(playerUUID) || clan.getLeaderUUID().equals(playerUUID) || (clan.getViceUUID() != null && clan.getViceUUID().equals(playerUUID))) {
|
||||
|
@ -167,4 +206,24 @@ public class Clans {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setClanChunks(Clan playerClan, LinkedHashMap<UUID, LinkedList<Chunk>> existingClaims) {
|
||||
for (Map.Entry<UUID, LinkedList<Chunk>> entry : existingClaims.entrySet()) {
|
||||
UUID ownerUUID = entry.getKey();
|
||||
LinkedList<Chunk> chunks = entry.getValue();
|
||||
for (Chunk chunk : chunks) {
|
||||
playerClan.getChunkOwnerMap().put(chunk, ownerUUID);
|
||||
}
|
||||
}
|
||||
playerClan.save();
|
||||
}
|
||||
|
||||
public Clan getClanByChunk(Chunk chunk) {
|
||||
for (Clan clan : clans) {
|
||||
if (clan.getChunks().contains(chunk)) {
|
||||
return clan;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue