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

View file

@ -130,6 +130,10 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_not_found")));
return true;
}
if (targetClan.getMembers().size() >= 10) {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full")));
return true;
}
clanJoins.computeIfAbsent(targetClan, k -> new LinkedList<>());
LinkedList<UUID> joinRequests = clanJoins.get(targetClan);
if (joinRequests.contains(playerUUID)) {
@ -140,7 +144,6 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize(
String.format(L4M4.get("success.join_request_sent"), targetClan.getName())
));
// Benachrichtige den Clan-Leader, sofern online
Player leader = Bukkit.getPlayer(targetClan.getLeaderUUID());
if (leader != null && leader.isOnline()) {
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")));
return true;
}
if (inviterClan.getMembers().size() >= 10) {
player.sendMessage(miniMessage().deserialize(L4M4.get("error.clan_full")));
return true;
}
clanInvites.computeIfAbsent(inviterClan, k -> new LinkedList<>());
LinkedList<UUID> inviteList = clanInvites.get(inviterClan);
if (inviteList.contains(invitee.getUniqueId())) {
@ -201,7 +208,6 @@ public class ClanCommand extends SimpleCommand {
player.sendMessage(miniMessage().deserialize(
String.format(L4M4.get("success.invite_sent"), inviteeName)
));
// Benachrichtige den Eingeladenen
String acceptCmd = "/clan accept " + inviterClan.getName();
String denyCmd = "/clan deny " + 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 {
private final Set<UUID> vanishedPlayers = new HashSet<>();
private static boolean isvanished = true;
private boolean isvanished = true;
public VanishCommand() {
super("vanish");
@ -31,16 +31,25 @@ public class VanishCommand extends SimpleCommand {
return false;
}
Player player = (Player) sender;
Player online = (Player) Bukkit.getOnlinePlayers();
if (isvanished) {
player.showPlayer(BlazeSMP.getInstance(), online);
vanishedPlayers.remove(player.getUniqueId());
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.join")));
if (player.isOp()) {
for (Player online : Bukkit.getOnlinePlayers()) {
if (isvanished) {
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 {
player.hidePlayer(BlazeSMP.getInstance(), online);
vanishedPlayers.add(player.getUniqueId());
online.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("player.left")));
player.sendMessage(MiniMessage.miniMessage().deserialize(L4M4.get("error.no_permission")));
return false;
}
isvanished = !isvanished;

View file

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

View file

@ -1,5 +1,6 @@
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.module.manager.L4M4;
import net.kyori.adventure.text.Component;
@ -11,12 +12,21 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.Team;
import java.util.HashSet;
import java.util.UUID;
public class PlayerJoinListener implements Listener {
private final HashSet<UUID> joinedPlayers = new HashSet<>();
@EventHandler
public void onJoin(PlayerJoinEvent event) {
UUID playerUUID = event.getPlayer().getUniqueId();
Player player = event.getPlayer();
new PlayerManager().setPlayerTeam(player);
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
assert team != null;

View file

@ -39,9 +39,6 @@ public class ProtectedBlockListener implements Listener {
Material.FURNACE, Material.BLAST_FURNACE, Material.SMOKER
);
/*
* Prevents items from being transferred into protected storages.
*/
@EventHandler
public void onItemTransferHopperEvent(InventoryMoveItemEvent event) {
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
public void onBlockInteractEvent(PlayerInteractEvent event) {
Player player = event.getPlayer();
@ -68,26 +61,22 @@ public class ProtectedBlockListener implements Listener {
ItemStack mainHandItem = player.getInventory().getItemInMainHand();
ProtectedBlock protectedBlock = getProtectedBlock(block);
// Owner can manage keys with shift-right-click if the block is already locked.
if (player.isSneaking() && protectedBlock != null &&
protectedBlock.owner().equals(player.getUniqueId())) {
openManageKeysGUI(player, block);
return;
}
// Shift + Right-click with a valid trial key relinks the key to the new container.
if (player.isSneaking() && isValidKey(mainHandItem)) {
relinkKey(player, mainHandItem, block);
return;
}
// Shift + Right-click on an unlocked container opens the lock GUI.
if (player.isSneaking() && protectedBlock == null) {
openLockGUI(player, block);
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 (block.getState() instanceof Container container) {
player.openInventory(container.getInventory());
@ -95,24 +84,18 @@ public class ProtectedBlockListener implements Listener {
return;
}
// Normal right-click on a locked container without a valid key shows a locked message.
if (protectedBlock != null) {
String lockedMsg = String.format(L4M4.get("storage.locked"), "minecraft:trial_key");
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) {
String titleRaw = String.format(L4M4.get("storage.lock_gui_title"), block.getType().toString());
Inventory lockInventory = Bukkit.createInventory(player, InventoryType.HOPPER,
miniMessage.deserialize(titleRaw));
UUID lockUUID = UUID.randomUUID();
// Create two identical trial keys for symmetry
ItemStack trialKey1 = createTrialKey(lockUUID);
ItemStack trialKey2 = createTrialKey(lockUUID);
@ -120,19 +103,14 @@ public class ProtectedBlockListener implements Listener {
lockInventory.setItem(4, trialKey2);
player.openInventory(lockInventory);
// Save the protected block information
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) {
String titleRaw = String.format(L4M4.get("storage.manage_gui_title"), block.getType().toString());
Inventory manageKeysInventory = Bukkit.createInventory(player, InventoryType.HOPPER,
miniMessage.deserialize(titleRaw));
// Create "Add Key" button
ItemStack addKey = new ItemStack(Material.PAPER);
ItemMeta addKeyMeta = addKey.getItemMeta();
if (addKeyMeta != null) {
@ -140,7 +118,6 @@ public class ProtectedBlockListener implements Listener {
addKey.setItemMeta(addKeyMeta);
}
// Create "Remove Key" button
ItemStack removeKey = new ItemStack(Material.BARRIER);
ItemMeta removeKeyMeta = removeKey.getItemMeta();
if (removeKeyMeta != null) {
@ -154,10 +131,6 @@ public class ProtectedBlockListener implements Listener {
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) {
UUID newLockUUID = UUID.randomUUID();
ItemMeta meta = key.getItemMeta();
@ -173,10 +146,6 @@ public class ProtectedBlockListener implements Listener {
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
public void onInventoryClick(InventoryClickEvent event) {
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
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
@ -212,17 +177,11 @@ public class ProtectedBlockListener implements Listener {
}
}
/*
* Prevents explosions from destroying protected storage blocks.
*/
@EventHandler
public void onExplosion(EntityExplodeEvent event) {
event.blockList().removeIf(this::isProtected);
}
/*
* Helper method to create a trial key with linked lock information.
*/
private ItemStack createTrialKey(UUID lockUUID) {
ItemStack trialKey = new ItemStack(Material.TRIPWIRE_HOOK);
ItemMeta meta = trialKey.getItemMeta();
@ -237,16 +196,10 @@ public class ProtectedBlockListener implements Listener {
return trialKey;
}
/*
* Validates if the provided item is a trial key.
*/
private boolean isValidKey(ItemStack item) {
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) {
if (!isValidKey(item)) return false;
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())));
}
/*
* Returns the ProtectedBlock associated with the given block, or null if not found.
*/
private ProtectedBlock getProtectedBlock(Block block) {
return protectedBlocks.getBlocks().stream()
.filter(pb -> pb.location().equals(block.getLocation()))
@ -264,10 +214,7 @@ public class ProtectedBlockListener implements Listener {
.orElse(null);
}
/*
* Checks if a block is protected.
*/
private boolean isProtected(Block block) {
return getProtectedBlock(block) != null;
}
}
}

View file

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

View file

@ -64,6 +64,7 @@
"notification.invite": "<yellow>Invite from clan %s.</yellow>",
"button.accept": "<green>[Accept]</green>",
"button.deny": "<red>[Deny]</red>",
@ -144,5 +145,11 @@
"storage.break_denied": "<red>You cannot break this locked storage!</red>",
"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>"
}