added things

This commit is contained in:
EmrageGHC 2025-02-21 15:02:51 +01:00
parent 591eb3231e
commit 2059bdb4b9
8 changed files with 50 additions and 66 deletions

View file

@ -9,6 +9,7 @@ import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4;
import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks; import me.freezy.plugins.papermc.blazesmp.module.manager.ProtectedBlocks;
import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate; import me.freezy.plugins.papermc.blazesmp.tasks.PlayerNameUpdate;
import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer; import me.freezy.plugins.papermc.blazesmp.tasks.TabListTimer;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -26,6 +27,7 @@ public final class BlazeSMP extends JavaPlugin {
@Getter private BukkitTask nameUpdateTask; @Getter private BukkitTask nameUpdateTask;
@Getter private BukkitTask tabListUpdateTask; @Getter private BukkitTask tabListUpdateTask;
@Override @Override
public void onLoad() { public void onLoad() {
this.log=getSLF4JLogger(); this.log=getSLF4JLogger();

View file

@ -130,6 +130,10 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found"))); player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found")));
return true; return true;
} }
if (targetClan.getMembers().size() >= 10) {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full")));
return true;
}
clanJoins.computeIfAbsent(targetClan, k -> new LinkedList<>()); clanJoins.computeIfAbsent(targetClan, k -> new LinkedList<>());
LinkedList<UUID> joinRequests = clanJoins.get(targetClan); LinkedList<UUID> joinRequests = clanJoins.get(targetClan);
if (joinRequests.contains(playerUUID)) { if (joinRequests.contains(playerUUID)) {
@ -140,7 +144,6 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize( player.sendMessage(miniMessage().deserialize(
String.format(L4M4.get("success.join_request_sent"), targetClan.getName()) String.format(L4M4.get("success.join_request_sent"), targetClan.getName())
)); ));
// Benachrichtige den Clan-Leader, sofern online
Player leader = Bukkit.getPlayer(targetClan.getLeaderUUID()); Player leader = Bukkit.getPlayer(targetClan.getLeaderUUID());
if (leader != null && leader.isOnline()) { if (leader != null && leader.isOnline()) {
String acceptCommand = "/clan accept " + player.getName(); String acceptCommand = "/clan accept " + player.getName();
@ -189,6 +192,10 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found"))); player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found")));
return true; return true;
} }
if (inviterClan.getMembers().size() >= 10) {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full")));
return true;
}
clanInvites.computeIfAbsent(inviterClan, k -> new LinkedList<>()); clanInvites.computeIfAbsent(inviterClan, k -> new LinkedList<>());
LinkedList<UUID> inviteList = clanInvites.get(inviterClan); LinkedList<UUID> inviteList = clanInvites.get(inviterClan);
if (inviteList.contains(invitee.getUniqueId())) { if (inviteList.contains(invitee.getUniqueId())) {
@ -201,7 +208,6 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize( player.sendMessage(miniMessage().deserialize(
String.format(L4M4.get("success.invite_sent"), inviteeName) String.format(L4M4.get("success.invite_sent"), inviteeName)
)); ));
// Benachrichtige den Eingeladenen
String acceptCmd = "/clan accept " + inviterClan.getName(); String acceptCmd = "/clan accept " + inviterClan.getName();
String denyCmd = "/clan deny " + inviterClan.getName(); String denyCmd = "/clan deny " + inviterClan.getName();
String inviteNotifyText = String.format(L4M4.get("notification.invite"), inviterClan.getName()); String inviteNotifyText = String.format(L4M4.get("notification.invite"), inviterClan.getName());

View file

@ -18,7 +18,7 @@ import java.util.UUID;
public class VanishCommand extends SimpleCommand { public class VanishCommand extends SimpleCommand {
private final Set<UUID> vanishedPlayers = new HashSet<>(); private final Set<UUID> vanishedPlayers = new HashSet<>();
private static boolean isvanished = true; private boolean isvanished = true;
public VanishCommand() { public VanishCommand() {
super("vanish"); super("vanish");
@ -31,16 +31,25 @@ public class VanishCommand extends SimpleCommand {
return false; return false;
} }
Player player = (Player) sender; Player player = (Player) sender;
Player online = (Player) Bukkit.getOnlinePlayers();
if (isvanished) { if (player.isOp()) {
player.showPlayer(BlazeSMP.getInstance(), online); for (Player online : Bukkit.getOnlinePlayers()) {
vanishedPlayers.remove(player.getUniqueId()); if (isvanished) {
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join"))); player.showPlayer(BlazeSMP.getInstance(), online);
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join")));
} else {
player.hidePlayer(BlazeSMP.getInstance(), online);
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")));
}
}
if (isvanished) {
vanishedPlayers.remove(player.getUniqueId());
} else {
vanishedPlayers.add(player.getUniqueId());
}
} else { } else {
player.hidePlayer(BlazeSMP.getInstance(), online); player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission")));
vanishedPlayers.add(player.getUniqueId()); return false;
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")));
} }
isvanished = !isvanished; isvanished = !isvanished;

View file

@ -33,6 +33,8 @@ public class PlayerClaimListener implements Listener {
} }
} }
@EventHandler @EventHandler
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
Location location = event.getBlock().getLocation(); Location location = event.getBlock().getLocation();

View file

@ -1,5 +1,6 @@
package me.freezy.plugins.papermc.blazesmp.listener; package me.freezy.plugins.papermc.blazesmp.listener;
import me.freezy.plugins.papermc.blazesmp.BlazeSMP;
import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager;
import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4; import me.freezy.plugins.papermc.blazesmp.module.manager.L4M4;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -11,12 +12,21 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.Team; import org.bukkit.scoreboard.Team;
import java.util.HashSet;
import java.util.UUID;
public class PlayerJoinListener implements Listener { public class PlayerJoinListener implements Listener {
private final HashSet<UUID> joinedPlayers = new HashSet<>();
@EventHandler @EventHandler
public void onJoin(PlayerJoinEvent event) { public void onJoin(PlayerJoinEvent event) {
UUID playerUUID = event.getPlayer().getUniqueId();
Player player = event.getPlayer(); Player player = event.getPlayer();
new PlayerManager().setPlayerTeam(player); new PlayerManager().setPlayerTeam(player);
Team team = player.getScoreboard().getEntryTeam(player.getName()); Team team = player.getScoreboard().getEntryTeam(player.getName());
if (!joinedPlayers.contains(playerUUID)) {
event.getPlayer().sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("join.notify")));
joinedPlayers.add(playerUUID);
}
// Verwende den zentral konfigurierten Join-Text aus der JSON-Datei // Verwende den zentral konfigurierten Join-Text aus der JSON-Datei
assert team != null; assert team != null;

View file

@ -39,9 +39,6 @@ public class ProtectedBlockListener implements Listener {
Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER
); );
/*
* Prevents items from being transferred into protected storages.
*/
@EventHandler @EventHandler
public void onItemTransferHopperEvent(InventoryMoveItemEvent event) { public void onItemTransferHopperEvent(InventoryMoveItemEvent event) {
Location destLocation = event.getDestination().getLocation(); Location destLocation = event.getDestination().getLocation();
@ -52,10 +49,6 @@ public class ProtectedBlockListener implements Listener {
} }
} }
/*
* Handles player interactions with storage blocks.
* Supports locking, unlocking, linking keys, and opening GUIs.
*/
@EventHandler @EventHandler
public void onBlockInteractEvent(PlayerInteractEvent event) { public void onBlockInteractEvent(PlayerInteractEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -68,26 +61,22 @@ public class ProtectedBlockListener implements Listener {
ItemStack mainHandItem = player.getInventory().getItemInMainHand(); ItemStack mainHandItem = player.getInventory().getItemInMainHand();
ProtectedBlock protectedBlock = getProtectedBlock(block); ProtectedBlock protectedBlock = getProtectedBlock(block);
// Owner can manage keys with shift-right-click if the block is already locked.
if (player.isSneaking() && protectedBlock != null && if (player.isSneaking() && protectedBlock != null &&
protectedBlock.owner().equals(player.getUniqueId())) { protectedBlock.owner().equals(player.getUniqueId())) {
openManageKeysGUI(player, block); openManageKeysGUI(player, block);
return; return;
} }
// Shift + Right-click with a valid trial key relinks the key to the new container.
if (player.isSneaking() && isValidKey(mainHandItem)) { if (player.isSneaking() && isValidKey(mainHandItem)) {
relinkKey(player, mainHandItem, block); relinkKey(player, mainHandItem, block);
return; return;
} }
// Shift + Right-click on an unlocked container opens the lock GUI.
if (player.isSneaking() && protectedBlock == null) { if (player.isSneaking() && protectedBlock == null) {
openLockGUI(player, block); openLockGUI(player, block);
return; return;
} }
// Normal right-click: if a valid key is held for a locked container, open the inventory.
if (protectedBlock != null && isValidKey(mainHandItem, protectedBlock.key())) { if (protectedBlock != null && isValidKey(mainHandItem, protectedBlock.key())) {
if (block.getState() instanceof Container container) { if (block.getState() instanceof Container container) {
player.openInventory(container.getInventory()); player.openInventory(container.getInventory());
@ -95,24 +84,18 @@ public class ProtectedBlockListener implements Listener {
return; return;
} }
// Normal right-click on a locked container without a valid key shows a locked message.
if (protectedBlock != null) { if (protectedBlock != null) {
String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key"); String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key");
player.sendMessage(miniMessage.deserialize(lockedMsg)); player.sendMessage(miniMessage.deserialize(lockedMsg));
} }
} }
/*
* Opens the lock GUI for a container.
* Two trial keys are created and the container is then registered as protected.
*/
private void openLockGUI(Player player, Block block) { private void openLockGUI(Player player, Block block) {
String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString()); String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString());
Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER, Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER,
miniMessage.deserialize(titleRaw)); miniMessage.deserialize(titleRaw));
UUID lockUUID = UUID.randomUUID(); UUID lockUUID = UUID.randomUUID();
// Create two identical trial keys for symmetry
ItemStack trialKey1 = createTrialKey(lockUUID); ItemStack trialKey1 = createTrialKey(lockUUID);
ItemStack trialKey2 = createTrialKey(lockUUID); ItemStack trialKey2 = createTrialKey(lockUUID);
@ -120,19 +103,14 @@ public class ProtectedBlockListener implements Listener {
lockInventory.setItem(4, trialKey2); lockInventory.setItem(4, trialKey2);
player.openInventory(lockInventory); player.openInventory(lockInventory);
// Save the protected block information
protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), lockUUID, block.getLocation())); protectedBlocks.addBlock(new ProtectedBlock(player.getUniqueId(), lockUUID, block.getLocation()));
} }
/*
* Opens the manage keys GUI for the owner to add or remove keys.
*/
private void openManageKeysGUI(Player player, Block block) { private void openManageKeysGUI(Player player, Block block) {
String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString()); String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString());
Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER, Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER,
miniMessage.deserialize(titleRaw)); miniMessage.deserialize(titleRaw));
// Create "Add Key" button
ItemStack addKey = new ItemStack(Material.PAPER); ItemStack addKey = new ItemStack(Material.PAPER);
ItemMeta addKeyMeta = addKey.getItemMeta(); ItemMeta addKeyMeta = addKey.getItemMeta();
if (addKeyMeta != null) { if (addKeyMeta != null) {
@ -140,7 +118,6 @@ public class ProtectedBlockListener implements Listener {
addKey.setItemMeta(addKeyMeta); addKey.setItemMeta(addKeyMeta);
} }
// Create "Remove Key" button
ItemStack removeKey = new ItemStack(Material.BARRIER); ItemStack removeKey = new ItemStack(Material.BARRIER);
ItemMeta removeKeyMeta = removeKey.getItemMeta(); ItemMeta removeKeyMeta = removeKey.getItemMeta();
if (removeKeyMeta != null) { if (removeKeyMeta != null) {
@ -154,10 +131,6 @@ public class ProtectedBlockListener implements Listener {
player.openInventory(manageKeysInventory); player.openInventory(manageKeysInventory);
} }
/*
* Relinks the provided trial key to the new block.
* A new lock UUID is generated and the keys lore is updated.
*/
private void relinkKey(Player player, ItemStack key, Block newBlock) { private void relinkKey(Player player, ItemStack key, Block newBlock) {
UUID newLockUUID = UUID.randomUUID(); UUID newLockUUID = UUID.randomUUID();
ItemMeta meta = key.getItemMeta(); ItemMeta meta = key.getItemMeta();
@ -173,10 +146,6 @@ public class ProtectedBlockListener implements Listener {
player.sendMessage(miniMessage.deserialize(L4M4.get("storage.link_success"))); player.sendMessage(miniMessage.deserialize(L4M4.get("storage.link_success")));
} }
/*
* Prevents any changes in the lock or manage keys GUIs.
* Also informs the player that the action was completed.
*/
@EventHandler @EventHandler
public void onInventoryClick(InventoryClickEvent event) { public void onInventoryClick(InventoryClickEvent event) {
String title = event.getView().title().toString(); String title = event.getView().title().toString();
@ -191,10 +160,6 @@ public class ProtectedBlockListener implements Listener {
} }
} }
/*
* Handles block breaking.
* If the block is protected, only the owner can break it.
*/
@EventHandler @EventHandler
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -212,17 +177,11 @@ public class ProtectedBlockListener implements Listener {
} }
} }
/*
* Prevents explosions from destroying protected storage blocks.
*/
@EventHandler @EventHandler
public void onExplosion(EntityExplodeEvent event) { public void onExplosion(EntityExplodeEvent event) {
event.blockList().removeIf(this::isProtected); event.blockList().removeIf(this::isProtected);
} }
/*
* Helper method to create a trial key with linked lock information.
*/
private ItemStack createTrialKey(UUID lockUUID) { private ItemStack createTrialKey(UUID lockUUID) {
ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK); ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK);
ItemMeta meta = trialKey.getItemMeta(); ItemMeta meta = trialKey.getItemMeta();
@ -237,16 +196,10 @@ public class ProtectedBlockListener implements Listener {
return trialKey; return trialKey;
} }
/*
* Validates if the provided item is a trial key.
*/
private boolean isValidKey(ItemStack item) { private boolean isValidKey(ItemStack item) {
return item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta(); return item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta();
} }
/*
* Validates if the provided item is a trial key that is linked to the given lock UUID.
*/
private boolean isValidKey(ItemStack item, UUID lockUUID) { private boolean isValidKey(ItemStack item, UUID lockUUID) {
if (!isValidKey(item)) return false; if (!isValidKey(item)) return false;
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
@ -254,9 +207,6 @@ public class ProtectedBlockListener implements Listener {
return Objects.requireNonNull(meta.lore()).stream().anyMatch(line -> line.contains(Component.text(lockUUID.toString()))); return Objects.requireNonNull(meta.lore()).stream().anyMatch(line -> line.contains(Component.text(lockUUID.toString())));
} }
/*
* Returns the ProtectedBlock associated with the given block, or null if not found.
*/
private ProtectedBlock getProtectedBlock(Block block) { private ProtectedBlock getProtectedBlock(Block block) {
return protectedBlocks.getBlocks().stream() return protectedBlocks.getBlocks().stream()
.filter(pb -> pb.location().equals(block.getLocation())) .filter(pb -> pb.location().equals(block.getLocation()))
@ -264,9 +214,6 @@ public class ProtectedBlockListener implements Listener {
.orElse(null); .orElse(null);
} }
/*
* Checks if a block is protected.
*/
private boolean isProtected(Block block) { private boolean isProtected(Block block) {
return getProtectedBlock(block) != null; return getProtectedBlock(block) != null;
} }

View file

@ -136,6 +136,7 @@ public class Clan {
this.chunkAmount = loaded.chunkAmount; this.chunkAmount = loaded.chunkAmount;
} }
/** /**
* Saves the clan data to its corresponding JSON file. * Saves the clan data to its corresponding JSON file.
*/ */

View file

@ -64,6 +64,7 @@
"notification.invite": "<yellow>Invite from clan %s.</yellow>", "notification.invite": "<yellow>Invite from clan %s.</yellow>",
"button.accept": "<green>[Accept]</green>", "button.accept": "<green>[Accept]</green>",
"button.deny": "<red>[Deny]</red>", "button.deny": "<red>[Deny]</red>",
@ -144,5 +145,11 @@
"storage.break_denied": "<red>You cannot break this locked storage!</red>", "storage.break_denied": "<red>You cannot break this locked storage!</red>",
"storage.trial_key": "<gold>Linked Trial Key</gold>", "storage.trial_key": "<gold>Linked Trial Key</gold>",
"config.reloaded": "<green>Config reloaded!</green>" "config.reloaded": "<green>Config reloaded!</green>",
"error.clan_full": "<red>The clan is full.</red>",
"error.clan_not_found": "<red>Clan not found.</red>",
"success.invite_sent": "<green>Invite sent to %s.</green>",
"error.no_permission": "<red>You can't do this.</red>",
"join.notify": "<green>WICHTIG!!! Die Clans wurden aufgelöst, das aktuelle Clanlimit liegt bei 10 Membern. Jeder hat damit die Chance einen neuen Clan selbst zu gründen, da die großen Clans keine unendliche Kapazität mehr haben.</green>"
} }