LobbySystem commit

This commit is contained in:
2025-12-09 19:43:47 +01:00
commit eb60f16b23
43 changed files with 786 additions and 0 deletions

View File

@@ -0,0 +1,254 @@
package net.senorpollo.lobbysenor;
import org.bukkit.*;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.*;
public final class SenorPollo_sLobby extends JavaPlugin implements Listener, CommandExecutor {
private List<UUID> hiddenPlayers = new ArrayList<>();
private HashMap<UUID, Long> cooldowns = new HashMap<>();
@Override
public void onEnable() {
// Setup plugin logic
getServer().getPluginManager().registerEvents(this, this);
getCommand("build").setExecutor(this);
}
private ItemStack createEmptyGlass() {
ItemStack glass = new ItemStack(Material.GRAY_STAINED_GLASS_PANE);
ItemMeta meta = glass.getItemMeta();
meta.setDisplayName(" "); // Leerzeichen, damit kein Name angezeigt wird
glass.setItemMeta(meta);
return glass;
}
private void fillEmptySlots(Inventory inv) {
ItemStack glass = createEmptyGlass();
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null) {
inv.setItem(i, glass);
}
}
}
private void giveStartItems(Player player) {
// Clear player inventory
player.getInventory().clear();
// Add items to the player's inventory
//player.getInventory().setItem(4, createItem(Material.COMPASS, "§8» §eTeleporter"));
player.getInventory().setItem(6, createItem(Material.COMPARATOR, "§8» §cEinstellungen"));
player.getInventory().setItem(2, createItem(Material.LIME_DYE, "§8» §aSpieler sichtbar"));
}
private ItemStack createItem(Material material, String name) {
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
giveStartItems(player);
player.teleport(new Location(player.getWorld(), 0.5, 68, -2.5, 0, 0 ));
player.sendTitle("§eWillkommen", "§7auf §6Senor§fPollo§7!", 10, 70, 20);
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 3, 3);
player.setGameMode(GameMode.ADVENTURE);
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem();
if (item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) {
Player player = event.getPlayer();
String displayName = item.getItemMeta().getDisplayName();
switch (displayName) {
case "§8» §aSpieler sichtbar":
case "§8» §cSpieler versteckt":
togglePlayerVisibility(player, item);
break;
case "§8» §cEinstellungen":
openSettingsMenu(player);
break;
case "§8» §eTeleporter":
openTeleportMenu(player);
break;
case "§8» §dParkour":
player.teleport(new Location(player.getWorld(), 12.500, 10.00, 5.500, -50, -10));
break;
case "§8» §6Gadgets§8 (§cKommt noch§8)":
Inventory gadgetMenu = Bukkit.createInventory(null, InventoryType.CHEST, "§8» §6Gadgets");
player.openInventory(gadgetMenu);
break;
}
}
}
private void togglePlayerVisibility(Player player, ItemStack item) {
if (hiddenPlayers.contains(player.getUniqueId())) {
hiddenPlayers.remove(player.getUniqueId());
item.setType(Material.LIME_DYE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§8» §aSpieler sichtbar");
item.setItemMeta(meta);
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
player.showPlayer(this, onlinePlayer);
}
} else {
hiddenPlayers.add(player.getUniqueId());
item.setType(Material.GRAY_DYE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§8» §cSpieler versteckt");
item.setItemMeta(meta);
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
if (!onlinePlayer.equals(player)) {
player.hidePlayer(this, onlinePlayer);
}
}
}
}
private void openSettingsMenu(Player player) {
Inventory settingsMenu = Bukkit.createInventory(null, 27, "§8» §cEinstellungen");
ItemStack levelDisplayItem = new ItemStack(Material.EXPERIENCE_BOTTLE);
ItemMeta meta = levelDisplayItem.getItemMeta();
meta.setDisplayName("§8» §eLevelbar");
meta.setLore(Collections.singletonList("§8 §cVerstecken §8/ §aSichtbar"));
levelDisplayItem.setItemMeta(meta);
settingsMenu.setItem(11, levelDisplayItem);
// Slots auffüllen
fillEmptySlots(settingsMenu);
player.openInventory(settingsMenu);
}
private void openTeleportMenu(Player player) {
Inventory teleportMenu = Bukkit.createInventory(null, 54, "§8» §eTeleportationsmenü");
createServerItem(teleportMenu, Material.ENDER_EYE, "§8» §aSpawn", 13);
createServerItem(teleportMenu, Material.GOLDEN_SWORD, "§8» §eChicken Competition", 19);
createServerItem(teleportMenu, Material.IRON_PICKAXE, "§8» §cCityBuild", 25);
createServerItem(teleportMenu, Material.CLOCK, "§8» §aSpielzeit", 38);
createServerItem(teleportMenu, Material.CHEST_MINECART, "§8» §6Onkel Pollo", 40);
createServerItem(teleportMenu, Material.EXPERIENCE_BOTTLE, "§8» §aLevel", 42);
// Slots auffüllen
fillEmptySlots(teleportMenu);
player.openInventory(teleportMenu);
}
private void createServerItem(Inventory inventory, Material material, String name, int slot) {
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
item.setItemMeta(meta);
inventory.setItem(slot, item);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Inventory inventory = event.getClickedInventory();
if (inventory != null && event.getView().getTitle().equals("§8» §cEinstellungen")) {
event.setCancelled(true);
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem != null && clickedItem.hasItemMeta() && clickedItem.getItemMeta().hasDisplayName()) {
String displayName = clickedItem.getItemMeta().getDisplayName();
Player player = (Player) event.getWhoClicked();
if (displayName.equals("§8» §eLevelbar")) {
player.performCommand("levelhide");
}
// Hier können weitere Optionen hinzugefügt werden
}
} else if (event.getView().getTitle().equals("§8» §eTeleportationsmenü")) {
event.setCancelled(true);
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem != null && clickedItem.hasItemMeta() && clickedItem.getItemMeta().hasDisplayName()) {
String displayName = clickedItem.getItemMeta().getDisplayName();
Player player = (Player) event.getWhoClicked();
switch (displayName) {
case "§8» §aSpawn":
player.teleport(new Location(player.getWorld(), 0.500, 12.25, 0.500, 180, 0 ));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 1);
break;
case "§8» §cCityBuild":
player.teleport(new Location(player.getWorld(), -21.500, 10.25, 0.500, 90, -15));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 3);
break;
case "§8» §eChicken Competition":
player.teleport(new Location(player.getWorld(), -0, 10.25, -20.5,180, 0 ));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 3);
break;
case "§8» §aSpielzeit":
player.teleport(new Location(player.getWorld(), -22.5, 10.25, 33.5,50, 0 ));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 3);
break;
case "§8» §aLevel":
player.teleport(new Location(player.getWorld(), -25.5, 10.25, -27.5,120, 0 ));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 3);
break;
case "§8» §6Onkel Pollo":
player.teleport(new Location(player.getWorld(), 3.5, 12.25, 0.5,-145, 0 ));
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 3, 3);
break;
}
}
}
}
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
event.setCancelled(true);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("build")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (player.hasPermission("lobby.build")) {
player.setGameMode(GameMode.CREATIVE);
player.sendMessage("§6Senor§fPollo§8 |§7 Du bist nun im Baumodus.");
player.getInventory().clear();
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 3, 3);
}
} else {
sender.sendMessage(ChatColor.RED + "§6Senor§fPollo§8 |§7Dieser Befehl kann nur von einem Spieler ausgeführt werden.");
}
return true;
}
return false;
}
}

View File

@@ -0,0 +1,4 @@
chickens:
"a1b2c3d4-e5f6-7890-abcd-ef1234567890": "Küken123"
"123e4567-e89b-12d3-a456-426614174000": "Huhn456"

View File

@@ -0,0 +1,8 @@
name: SenorPolloLobby
version: 1.0
main: net.senorpollo.lobbysenor.SenorPollo_sLobby
api-version: 1.20
author: Quattro
commands:
build:
description: "Enter build mode"

View File

@@ -0,0 +1,10 @@
# settings.yml
# Beispiel: UUID:
# spawnAtSpawn: true/false (ob Spieler am Spawn spawnt)
settings:
UUID1:
spawnAtSpawn: true
UUID2:
spawnAtSpawn: false