Dateien nach "src/main/java/de/nexuslobby/modules" hochladen

This commit is contained in:
2026-01-22 14:55:27 +00:00
parent fbcbc36338
commit 7bd22bbe0d
3 changed files with 263 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
package de.nexuslobby.modules;
import de.nexuslobby.api.Module;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
public class ItemsModule implements Module, Listener {
@Override
public String getName() {
return "Items";
}
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, Bukkit.getPluginManager().getPlugin("NexusLobby"));
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
event.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
}
@Override
public void onDisable() {}
}

View File

@@ -0,0 +1,94 @@
package de.nexuslobby.modules;
import de.nexuslobby.NexusLobby;
import de.nexuslobby.api.Module;
import de.nexuslobby.commands.BuildCommand;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
public class ProtectionModule implements Module, Listener {
private FileConfiguration getSettings() {
return NexusLobby.getInstance().getLobbySettingsModule().getSettingsConfig();
}
@Override
public String getName() { return "Protection"; }
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, NexusLobby.getInstance());
}
@Override
public void onDisable() {}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
if (BuildCommand.isInBuildMode(player)) return;
if (!getSettings().getBoolean("allowBlockBreaking", false)) {
event.setCancelled(true);
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();
if (BuildCommand.isInBuildMode(player)) return;
if (!getSettings().getBoolean("allowBlockPlacing", false)) {
event.setCancelled(true);
}
}
@EventHandler
public void onInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
if (BuildCommand.isInBuildMode(player)) return;
if (!getSettings().getBoolean("allowBlockInteracting", true)) {
event.setCancelled(true);
}
}
@EventHandler
public void onPvp(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) {
if (!getSettings().getBoolean("allowPvp", false)) {
event.setCancelled(true);
}
}
}
@EventHandler
public void onDrop(PlayerDropItemEvent event) {
if (BuildCommand.isInBuildMode(event.getPlayer())) return;
if (!getSettings().getBoolean("allowItemDropping", false)) {
event.setCancelled(true);
}
}
@EventHandler
public void onPickup(EntityPickupItemEvent event) {
if (event.getEntity() instanceof Player) {
Player player = (Player) event.getEntity();
if (BuildCommand.isInBuildMode(player)) return;
if (!getSettings().getBoolean("allowItemPickup", false)) {
event.setCancelled(true);
}
}
}
}

View File

@@ -0,0 +1,139 @@
package de.nexuslobby.modules;
import de.nexuslobby.NexusLobby;
import de.nexuslobby.api.Module;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class ScoreboardModule implements Module {
private final NexusLobby plugin = NexusLobby.getInstance();
// Speicher für die aktuellen Spieler-Einstellungen (bis zum Restart/Reload)
private final Set<UUID> hiddenPlayers = new HashSet<>();
private final Set<UUID> adminModePlayers = new HashSet<>();
@Override
public String getName() {
return "Scoreboard";
}
@Override
public void onEnable() {
FileConfiguration vConfig = plugin.getVisualsConfig();
if (!vConfig.getBoolean("scoreboard.enabled", true)) return;
new BukkitRunnable() {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
updateSidebar(player);
}
}
}.runTaskTimer(plugin, 0L, vConfig.getLong("scoreboard.update_ticks", 20L));
}
private void updateSidebar(Player player) {
// 1. Prüfen, ob der Spieler das Scoreboard ausgeblendet hat
if (hiddenPlayers.contains(player.getUniqueId())) {
if (player.getScoreboard() != Bukkit.getScoreboardManager().getMainScoreboard()) {
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
}
return;
}
FileConfiguration vConfig = plugin.getVisualsConfig();
Scoreboard board = player.getScoreboard();
if (board == Bukkit.getScoreboardManager().getMainScoreboard()) {
board = Bukkit.getScoreboardManager().getNewScoreboard();
player.setScoreboard(board);
}
Objective obj = board.getObjective("lobby");
if (obj == null) {
obj = board.registerNewObjective("lobby", "dummy", "title");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
}
// 2. Pfad-Logik basierend auf dem Modus (/nexus sb admin/spieler)
String configPath = "scoreboard.default";
// Wenn im Admin-Modus UND Rechte vorhanden -> owner Sektion
if (adminModePlayers.contains(player.getUniqueId()) && player.hasPermission("nexuslobby.scoreboard.admin")) {
configPath = "scoreboard.owner";
} else {
// Standardmäßig default nutzen
configPath = "scoreboard.default";
}
String title = vConfig.getString(configPath + ".title", "&6&lNexusLobby");
obj.setDisplayName(translate(player, title));
List<String> lines = vConfig.getStringList(configPath + ".lines");
// Scores zurücksetzen um Duplikate zu vermeiden
board.getEntries().forEach(board::resetScores);
for (int i = 0; i < lines.size(); i++) {
String line = translate(player, lines.get(i));
// Verhindert das Verschwinden leerer Zeilen
if (line.isEmpty() || line.trim().isEmpty()) {
line = "" + ChatColor.values()[i] + ChatColor.RESET;
}
Score score = obj.getScore(line);
score.setScore(lines.size() - i);
}
}
// --- Methoden für den /nexus sb Befehl ---
public void setVisibility(Player player, boolean visible) {
if (visible) {
hiddenPlayers.remove(player.getUniqueId());
player.sendMessage("§7[§6Nexus§7] §aScoreboard eingeschaltet.");
} else {
hiddenPlayers.add(player.getUniqueId());
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
player.sendMessage("§7[§6Nexus§7] §cScoreboard ausgeschaltet.");
}
}
public void setAdminMode(Player player, boolean admin) {
if (admin) {
adminModePlayers.add(player.getUniqueId());
player.sendMessage("§7[§6Nexus§7] §eModus: §cAdmin-Scoreboard §7(Owner-Sektion)");
} else {
adminModePlayers.remove(player.getUniqueId());
player.sendMessage("§7[§6Nexus§7] §eModus: §6Spieler-Scoreboard §7(Default-Sektion)");
}
// Sofortiges Update erzwingen
updateSidebar(player);
}
private String translate(Player player, String text) {
String translated = PlaceholderAPI.setPlaceholders(player, text);
return ChatColor.translateAlternateColorCodes('&', translated);
}
@Override
public void onDisable() {
for (Player player : Bukkit.getOnlinePlayers()) {
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
}
hiddenPlayers.clear();
adminModePlayers.clear();
}
}