From 33de068972ae23b416d7c5b714128e1c548ce41d Mon Sep 17 00:00:00 2001 From: Johannes Theiner Date: Sun, 6 Dec 2015 11:09:51 +0100 Subject: [PATCH] first commit --- .classpath | 8 + .gitignore | 1 + .project | 17 ++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 11 + src/eu/univento/lobby/Lobby.java | 124 +++++++++ src/eu/univento/lobby/commands/SetNPC.java | 118 +++++++++ src/eu/univento/lobby/commands/Setloc.java | 58 +++++ .../univento/lobby/commands/StatusSign.java | 83 ++++++ src/eu/univento/lobby/listeners/Events.java | 118 +++++++++ .../univento/lobby/listeners/ItemEvents.java | 53 ++++ src/eu/univento/lobby/listeners/JoinQuit.java | 64 +++++ src/eu/univento/lobby/listeners/Jumppads.java | 166 ++++++++++++ src/eu/univento/lobby/listeners/Menu.java | 91 +++++++ .../univento/lobby/listeners/PlayerHider.java | 127 +++++++++ .../univento/lobby/listeners/StatusSigns.java | 38 +++ src/eu/univento/lobby/listeners/Teleport.java | 82 ++++++ src/eu/univento/lobby/utils/Inventorys.java | 240 ++++++++++++++++++ .../univento/lobby/utils/StatusSignUtil.java | 109 ++++++++ src/plugin.yml | 5 + 20 files changed, 1515 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 src/eu/univento/lobby/Lobby.java create mode 100644 src/eu/univento/lobby/commands/SetNPC.java create mode 100644 src/eu/univento/lobby/commands/Setloc.java create mode 100644 src/eu/univento/lobby/commands/StatusSign.java create mode 100644 src/eu/univento/lobby/listeners/Events.java create mode 100644 src/eu/univento/lobby/listeners/ItemEvents.java create mode 100644 src/eu/univento/lobby/listeners/JoinQuit.java create mode 100644 src/eu/univento/lobby/listeners/Jumppads.java create mode 100644 src/eu/univento/lobby/listeners/Menu.java create mode 100644 src/eu/univento/lobby/listeners/PlayerHider.java create mode 100644 src/eu/univento/lobby/listeners/StatusSigns.java create mode 100644 src/eu/univento/lobby/listeners/Teleport.java create mode 100644 src/eu/univento/lobby/utils/Inventorys.java create mode 100644 src/eu/univento/lobby/utils/StatusSignUtil.java create mode 100644 src/plugin.yml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..f7b275b --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/.project b/.project new file mode 100644 index 0000000..213b8d4 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Lobby + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..ee5b8c2 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/eu/univento/lobby/utils/StatusSignUtil.java=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bb35fa0 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/src/eu/univento/lobby/Lobby.java b/src/eu/univento/lobby/Lobby.java new file mode 100644 index 0000000..9e7f24e --- /dev/null +++ b/src/eu/univento/lobby/Lobby.java @@ -0,0 +1,124 @@ +package eu.univento.lobby; + +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Difficulty; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import eu.univento.core.api.Messages; +import eu.univento.core.api.Settings; +import eu.univento.lobby.commands.SetNPC; +import eu.univento.lobby.commands.Setloc; +import eu.univento.lobby.commands.StatusSign; +import eu.univento.lobby.listeners.Events; +import eu.univento.lobby.listeners.ItemEvents; +import eu.univento.lobby.listeners.JoinQuit; +import eu.univento.lobby.listeners.Jumppads; +import eu.univento.lobby.listeners.Menu; +import eu.univento.lobby.listeners.PlayerHider; +import eu.univento.lobby.listeners.StatusSigns; +import eu.univento.lobby.listeners.Teleport; +import eu.univento.lobby.utils.StatusSignUtil; + +/** + * main class... + * @author joethei + * @version 1.0 + */ +public class Lobby extends JavaPlugin{ + + /** + * list of StatusSigns + */ + private static ArrayList signs = new ArrayList(); + /** + * @return list of StatusSigns + */ + public static ArrayList returnSigns() { + return signs; + } + + /** + * opened Inventorys + */ + private static ArrayList openInventorys = new ArrayList(); + /** + * @return list of players that have a inventory open + */ + public static ArrayList getOpenInventorys() { + return openInventorys; + } + + /** + * plugin instance + */ + public static Lobby instance; + /** + * @return instance of plugin + */ + public static Lobby getInstance() { + return instance; + } + + /** + * Logger to log to + */ + private static Logger log = Bukkit.getLogger(); + + /** + * Prefix for messages + */ + + /** + * @param level Log level + * @param string String + */ + public static void log(Level level, String string) { + log.log(level, "[" + Messages.CONSOLE_PREFIX + Lobby.getInstance().getDescription().getName() + "] " + string); + } + + + @Override + public void onEnable() { + instance = this; + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new Jumppads(), this); + pm.registerEvents(new JoinQuit(), this); + pm.registerEvents(new Teleport(), this); + pm.registerEvents(new Events(), this); + pm.registerEvents(new Menu(), this); + pm.registerEvents(new PlayerHider(), this); + pm.registerEvents(new StatusSigns(), this); + pm.registerEvents(new ItemEvents(), this); + if(Settings.isDebug()) log.log(Level.INFO, "Events registriert"); + + String[] setloc = {""}; + new Setloc(this, "setloc", "Setzt Teleport Punkte", setloc); + + String[] statussign = {""}; + new StatusSign(this, "statussign", "Setzt Server Status Schilder", statussign); + + String[] setnpc = {""}; + new SetNPC(this, "setnpc", "Setzt NPC für Server Auswahl", setnpc); + + if(Settings.isDebug()) log.log(Level.INFO, "Befehle registriert"); + + for(World w : Bukkit.getWorlds()) { + w.setDifficulty(Difficulty.PEACEFUL); + } + + log.log(Level.INFO, " Plugin ver." + getDescription().getVersion() + " gestartet"); + } + + @Override + public void onDisable() { + log.log(Level.INFO, "[Lobby] Plugin beendet"); + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/commands/SetNPC.java b/src/eu/univento/lobby/commands/SetNPC.java new file mode 100644 index 0000000..6f5f128 --- /dev/null +++ b/src/eu/univento/lobby/commands/SetNPC.java @@ -0,0 +1,118 @@ +package eu.univento.lobby.commands; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import eu.univento.core.api.AutoCommand; +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Messages; +import eu.univento.core.api.NPC; +import eu.univento.core.api.Perms.Ranks; +import eu.univento.lobby.Lobby; + +/** + * spawns NPCs + * @author joethei + * @version 1.0 + */ +public class SetNPC extends AutoCommand{ + + /** + * configuration file + */ + static File file = new File("plugins/Lobby", "NPCs.yml"); + /** + * configuration + */ + static FileConfiguration cfg = YamlConfiguration.loadConfiguration(file); + + /** + * @param plugin main class + * @param command command to execute + * @param description describes the command + * @param aliases aliases of command + */ + public SetNPC(Lobby plugin, String command, String description, String[] aliases) { + super(plugin, command, description, aliases); + } + + @Override + public boolean execute(CommandSender sender, String label, String[] args) { + if(sender instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(sender.getName()); + if(p.isAllowed(Ranks.Admin)) { + if (args.length == 1) { + cfg.set(args[0] + ".World", p.getWorld().getName()); + cfg.set(args[0] + ".X", Double.valueOf(p.getLocation().getX())); + cfg.set(args[0] + ".Y", Double.valueOf(p.getLocation().getY())); + cfg.set(args[0] + ".Z", Double.valueOf(p.getLocation().getY())); + + try { + cfg.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + + spawnNPC(args[0], p.getLocation()); + } + p.sendMessage("§cNutze /setnpc "); + }else { + sender.sendMessage(Messages.NO_PERMS); + } + }else { + sender.sendMessage(Messages.NOT_A_PLAYER); + } + return false; + } + + @Override + public List tabComplete(CommandSender sender, String label, String[] args) { + return null; + } + + /** + * @param name name of npc + * @param loc location to spawn + */ + static void spawnNPC(String name, Location loc) { + Bukkit.getScheduler().runTaskAsynchronously(Lobby.getInstance(), new Runnable() { + + @Override + public void run() { + NPC npc = new NPC(name, loc, true); + npc.setItemInHand(Material.IRON_SWORD); + npc.spawn(); + + } + }); + } + + /** + * @param what name of the npc + */ + public static void startNPCs(String what) { + String world = cfg.getString(what + ".World"); + double x = cfg.getDouble(what + ".X"); + double y = cfg.getDouble(what + ".Y"); + double z = cfg.getDouble(what + ".Z"); + + World w = Bukkit.getWorld(world); + + Location loc = new Location(w, x, y, z); + Chunk chunk = loc.getChunk(); + chunk.load(); + spawnNPC(what, loc); + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/commands/Setloc.java b/src/eu/univento/lobby/commands/Setloc.java new file mode 100644 index 0000000..5b176d8 --- /dev/null +++ b/src/eu/univento/lobby/commands/Setloc.java @@ -0,0 +1,58 @@ +package eu.univento.lobby.commands; + +import java.util.List; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import eu.univento.core.api.AutoCommand; +import eu.univento.core.api.Config; +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Messages; +import eu.univento.core.api.Perms.Ranks; +import eu.univento.lobby.Lobby; + +/** + * sets teleport locations + * @author joethei + * @version 1.0 + */ +public class Setloc extends AutoCommand{ + + /** + * @param plugin main class + * @param command command to execute + * @param description describes the command + * @param aliases aliases of command + */ + public Setloc(Lobby plugin, String command, String description, String[] aliases) { + super(plugin, command, description, aliases); + } + + @Override + public boolean execute(CommandSender sender, String label, String[] args) { + if(sender instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(sender.getName()); + if(p.isAllowed(Ranks.Admin)) { + if(args.length == 1) { + Config.write("Lobby.Locs." + args[0], p.getLocation()); + p.sendMessage("§aLocation gesetzt"); + System.out.println("Location gesetzt " + args[0]); + }else { + p.sendMessage("§6Nutze /setloc "); + } + }else { + p.sendMessage(Messages.NO_PERMS); + } + }else { + sender.sendMessage(Messages.NOT_A_PLAYER); + } + return false; + } + + @Override + public List tabComplete(CommandSender sender, String label, String[] args) { + return null; + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/commands/StatusSign.java b/src/eu/univento/lobby/commands/StatusSign.java new file mode 100644 index 0000000..dc3ba09 --- /dev/null +++ b/src/eu/univento/lobby/commands/StatusSign.java @@ -0,0 +1,83 @@ +package eu.univento.lobby.commands; + +import eu.univento.core.api.AutoCommand; +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Messages; +import eu.univento.core.api.Servers; +import eu.univento.core.api.Perms.Ranks; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.utils.StatusSignUtil; + +import java.util.HashSet; +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * sets status signs + * @author joethei + * @version 1.0 + */ +public class StatusSign extends AutoCommand { + + /** + * @param plugin main class + * @param command command to execute + * @param description describes the command + * @param aliases aliases of command + */ + public StatusSign(Lobby plugin, String command, String description, String[] aliases) { + super(plugin, command, description, aliases); + } + + @Override + public boolean execute(CommandSender sender, String label, String[] args) { + { + if ((sender instanceof Player)) { + CustomPlayer p = CustomPlayer.getPlayer(sender.getName()); + if (p.isAllowed(Ranks.Admin)) { + if (args.length < 1) { + p.sendMessage("§4/statussign "); + return true; + } + String ip = Servers.getServerIP(args[0]); + + int port = Servers.getServerPort(args[1]); + + String name = args[0]; + + HashSet hash = new HashSet(); + Block block = p.getTargetBlock(hash, 10); + if (block == null) { + p.sendMessage("§4Da ist ja gar kein Block :|:"); + return true; + } + + if ((block.getType() != Material.SIGN) && (block.getType() != Material.SIGN_POST) && (block.getType() != Material.WALL_SIGN)) { + p.sendMessage("§4Du musst schon auf ein Schild schauen"); + return true; + } + + StatusSignUtil statusSign = new StatusSignUtil(block.getLocation(), name, ip, port); + + p.sendMessage("§aDu hast erfolgreich ein Status Schild erstellt"); + + Lobby.returnSigns().add(statusSign); + StatusSignUtil.save(statusSign); + } + p.sendMessage(Messages.NO_PERMS); + } else { + sender.sendMessage(Messages.NOT_A_PLAYER); + } + return true; + } + } + + @Override + public List tabComplete(CommandSender sender, String label, String[] args) { + return null; + } +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/Events.java b/src/eu/univento/lobby/listeners/Events.java new file mode 100644 index 0000000..661e192 --- /dev/null +++ b/src/eu/univento/lobby/listeners/Events.java @@ -0,0 +1,118 @@ +package eu.univento.lobby.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.InventoryCreativeEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.weather.WeatherChangeEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import eu.univento.core.api.CustomPlayer; + +/** + * some short events + * @author joethei + * @version 1.0 + */ +public class Events implements Listener{ + + /** + * cancels food level changes + * @param e FoodLevelChangeEvent + */ + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent e) { + e.setCancelled(true); + } + + /** + * cancels weather changes + * @param e WeatherChangeEvent + */ + @EventHandler + public void onWeather(WeatherChangeEvent e) { + e.setCancelled(true); + } + + /** + * cancels item consume + * @param e PlayerItemConsumeEvent + */ + @EventHandler + public void onConsume(PlayerItemConsumeEvent e) { + e.setCancelled(true); + } + + /** + * cancels death message and drops + * @param e PlayerDeathEvent + */ + @EventHandler + public void onDeath(PlayerDeathEvent e) { + e.setDeathMessage(null); + e.setKeepInventory(true); + e.setKeepLevel(true); + } + + /** + * sets respawn location + * @param e PlayerRespawnEvent + */ + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + e.setRespawnLocation(Bukkit.getWorld("world").getSpawnLocation()); + } + + /** + * cancels inventory dropping in creative + * @param e InventoryCreativeEvent + */ + @EventHandler + public void onCreative(InventoryCreativeEvent e) { + e.setCancelled(false); + } + + /** + * cancels item pickup + * @param e PlayerPickupEvent + */ + @EventHandler + public void onPickup(PlayerPickupItemEvent e) { + e.setCancelled(true); + } + + /** + * cancels item drop + * @param e PlayerDropItemEvent + */ + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + e.setCancelled(true); + } + + /** + * some fun with player hitting + * @param e EntityDamageByEntityEvent + */ + @EventHandler + public void onHit(EntityDamageByEntityEvent e) { + if(e.getEntity() instanceof Player) { + if(e.getDamager() instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(e.getEntity().getName()); + CustomPlayer d = CustomPlayer.getPlayer(e.getDamager().getName()); + d.setHealthScale(0.5D); + p.setMaxHealth(60.0D); + p.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 5000, 2)); + } + } + } +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/ItemEvents.java b/src/eu/univento/lobby/listeners/ItemEvents.java new file mode 100644 index 0000000..f63c8e6 --- /dev/null +++ b/src/eu/univento/lobby/listeners/ItemEvents.java @@ -0,0 +1,53 @@ +package eu.univento.lobby.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Messages; +import eu.univento.core.api.Perms.Ranks; + +/** + * some item events + * @author joethei + * @version 1.0 + */ +public class ItemEvents implements Listener{ + + /** + * @param e PlayerInteractEvent + */ + @EventHandler + public void onInteract(PlayerInteractEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if(e.getItem().getType() == Material.NAME_TAG) { + if(p.isAllowed(Ranks.Youtuber)) { + if(p.isNicked()) { + p.setNick(false); + p.sendMessage(Messages.PREFIX + "§cDu hast nun keinen Nicknamen mehr"); + }else { + p.setNick(true); + p.sendMessage(Messages.PREFIX + "§aDu hast ab jetzt einen Nicknamen"); + } + } + } + if(e.getItem().getType() == Material.TNT) { + if(p.isAllowed(Ranks.Youtuber)) { + if(Bukkit.getServerName() == "SilentLobby") { + p.connectToServer("Lobby01"); + }else { + p.connectToServer("SilentLobby"); + } + } + } + if(e.getItem().getType() == Material.EYE_OF_ENDER) { + //TODO: add forcefield + } + } + } +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/JoinQuit.java b/src/eu/univento/lobby/listeners/JoinQuit.java new file mode 100644 index 0000000..7d94b38 --- /dev/null +++ b/src/eu/univento/lobby/listeners/JoinQuit.java @@ -0,0 +1,64 @@ +package eu.univento.lobby.listeners; + +import java.sql.SQLException; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Title; +import eu.univento.lobby.utils.Inventorys; + +/** + * some join / quit events + * @author joethei + * @version 1.0 + */ +public class JoinQuit implements Listener{ + + /** + * handles player joining + * @param e PlayerJoinEvent + * @throws ClassNotFoundException Class could not be found + * @throws SQLException SQL server is not available or throws error + */ + @EventHandler + public void onJoin(PlayerJoinEvent e) throws ClassNotFoundException, SQLException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + //NPC.injectNetty(p.getPLAYER()); + + p.setGameMode(GameMode.ADVENTURE); + p.setFoodLevel(10); + p.setMaxHealth(10.0D); + p.setHealth(1.0D); + p.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 2)); + p.teleport(Bukkit.getWorld("world").getSpawnLocation()); + for(int i = 0; i <= 100; i++) { + p.sendMessage(" "); + } + p.sendMessage("§6Willkommen auf §3univento.eu"); + Title.sendTitle(p, 10, 50, 10, "§3univento.eu", "§6Das Netzwerk mit Style"); + Title.sendTabTitle(p, "§6" + Bukkit.getServerName(), "§3univento.eu"); + + Inventorys.openMainInventory(p); + + } + + /** + * removes player from lists + * @param e PlayerQuitEvent + */ + @EventHandler + public void onQuit(PlayerQuitEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + p.getInventory().clear(); + //NPC.ejectNetty(p.getPLAYER()); + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/Jumppads.java b/src/eu/univento/lobby/listeners/Jumppads.java new file mode 100644 index 0000000..bac1b8a --- /dev/null +++ b/src/eu/univento/lobby/listeners/Jumppads.java @@ -0,0 +1,166 @@ +package eu.univento.lobby.listeners; + +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import eu.univento.core.api.Config; +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Messages; +import eu.univento.core.api.Perms.Ranks; +import eu.univento.lobby.Lobby; + +/** + * fun for player + * @author joethei + * @version 1.0 + */ +public class Jumppads implements Listener{ + + /** + * contains players flying from premium lobby + */ + private ArrayList fly = new ArrayList(); + + /** + * lets players jump over pads + * @param e PlayerMoveEvent + * @throws InterruptedException thread closed + */ + @SuppressWarnings("deprecation") + @EventHandler + public void onMove(PlayerMoveEvent e) throws InterruptedException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + + if(p.getLocation().getBlock().getType() == Material.STONE_PLATE) { + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.REDSTONE_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(3D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.BEDROCK) { + Vector v = p.getLocation().getDirection().multiply(0D).setY(3D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.IRON_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(3D).setY(4D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.DIAMOND_BLOCK) { + if(p.isAllowed(Ranks.Premium)) { + Vector v = p.getLocation().getDirection().multiply(6D).setY(3D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), new Runnable() { + + @Override + public void run() { + p.teleport(Config.readLocation("Lobby.Locs.PremiumHub")); + } + + }, 60L); + }else { + p.sendMessage(Messages.readString("Messages.Commands.NoPerms")); + } + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.OBSIDIAN) { + Vector v = p.getLocation().getDirection().multiply(3D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.LAPIS_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(6D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.LEVEL_UP, 1.0F, 1.0F); + } + + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.EMERALD_BLOCK) { + if(!fly.contains(p)) { + Vector v = p.getLocation().getDirection().multiply(10.0D).setY(10.0D); + p.setVelocity(v); + fly.add(p); + p.setHealth(1.0); + p.setFoodLevel(20); + for(Player players : Bukkit.getOnlinePlayers()) { + players.playSound(p.getEyeLocation(), Sound.EXPLODE, 5.0F, 1.0F); + players.playEffect(p.getEyeLocation(), Effect.EXPLOSION_HUGE, 20); + } + } + + } + } + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.STATIONARY_WATER) { + if(fly.contains(p)) { + fly.remove(p); + p.teleport(Bukkit.getWorld("world").getSpawnLocation()); + p.playSound(p.getEyeLocation(), Sound.ENDERMAN_TELEPORT, 5.0F, 1.0F); + p.playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 20); + p.playEffect(p.getEyeLocation(), Effect.HEART, 20); + p.setHealth(10.0); + p.setFoodLevel(10); + } + } + if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.SPONGE) { + Vector v = p.getLocation().getDirection().multiply(0.0D).setY(1.0D); + Block b = p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock(); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.SPLASH, 5.0F, 1.0F); + p.playEffect(p.getEyeLocation(), Effect.SPLASH, 200); + Block block = p.getLocation().add(0.0D, 5.0D, 0.0D).getBlock(); + block.setType(Material.WATER); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), new Runnable() { + + @Override + public void run() { + block.setType(Material.AIR); + + } + + }, 20L); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), new Runnable() { + + @Override + public void run() { + b.setType(Material.SPONGE); + for(Player players : Bukkit.getOnlinePlayers()) { + players.playSound(b.getLocation(), Sound.PISTON_EXTEND, 1.0F, 1.0F); + players.playEffect(b.getLocation(), Effect.LARGE_SMOKE, 10); + } + } + + }, 60L); + } + } + + /** + * cancels fall damage + * @param e EntityDamageEvent + */ + @EventHandler + public void onDamage(EntityDamageEvent e) { + if(e.getEntity() instanceof Player) { + if(e.getCause() == DamageCause.FALL) { + e.setCancelled(true); + } + } + } +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/Menu.java b/src/eu/univento/lobby/listeners/Menu.java new file mode 100644 index 0000000..d501cb4 --- /dev/null +++ b/src/eu/univento/lobby/listeners/Menu.java @@ -0,0 +1,91 @@ +package eu.univento.lobby.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import eu.univento.lobby.Lobby; + +/** + * opens menus + * @author joethei + * @version 1.0 + */ +public class Menu implements Listener{ + + /** + * opens and creates menus + * @param e PlayerInteractEvent + */ + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_AIR) { + if(!Lobby.getOpenInventorys().contains(e.getPlayer())) { + if(e.getItem().getType() == Material.COMPASS) { + Inventory inv = Bukkit.createInventory(e.getPlayer(), 45, "§6Server-Menü"); + + ItemStack spawn = new ItemStack(Material.MAGMA_CREAM); + ItemMeta spawnMeta = spawn.getItemMeta(); + spawnMeta.setDisplayName("§6Spawn"); + spawn.setItemMeta(spawnMeta); + + ItemStack theblock = new ItemStack(Material.GOLD_BLOCK); + ItemMeta theblockMeta = theblock.getItemMeta(); + theblockMeta.setDisplayName("§6TheBlock"); + theblock.setItemMeta(theblockMeta); + + ItemStack flagattack = new ItemStack(Material.SNOW_BALL); + ItemMeta flagattackMeta = flagattack.getItemMeta(); + flagattackMeta.setDisplayName("§6FlagAttack"); + flagattack.setItemMeta(flagattackMeta); + + ItemStack trashgames = new ItemStack(Material.LEATHER_HELMET); + ItemMeta trashgamesMeta = trashgames.getItemMeta(); + trashgamesMeta.setDisplayName("§6TrashGames"); + trashgames.setItemMeta(trashgamesMeta); + + ItemStack settings = new ItemStack(Material.NAME_TAG); + ItemMeta settingsMeta = settings.getItemMeta(); + settingsMeta.setDisplayName("§3Einstellungen"); + settings.setItemMeta(settingsMeta); + + ItemStack filler = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short)15); + ItemMeta fillerMeta = filler.getItemMeta(); + fillerMeta.setDisplayName("§0Nichts"); + filler.setItemMeta(fillerMeta); + + inv.setItem(22, spawn); + inv.setItem(4, theblock); + inv.setItem(26, flagattack); + inv.setItem(18, trashgames); + inv.setItem(44, settings); + + for(int i = 0; i <= 44; i++) { + if(inv.getItem(i) == null) { + inv.setItem(i, filler); + } + } + + e.getPlayer().openInventory(inv); + } + + if(e.getItem().getType() == Material.CHEST) { + Inventory inv = Bukkit.createInventory(e.getPlayer(), 45, "§6Fun-Chest"); + + + + e.getPlayer().openInventory(inv); + e.getPlayer().playSound(e.getPlayer().getEyeLocation(), Sound.CHEST_OPEN, 10.0F, 1.0F); + } + } + } + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/PlayerHider.java b/src/eu/univento/lobby/listeners/PlayerHider.java new file mode 100644 index 0000000..7ad8653 --- /dev/null +++ b/src/eu/univento/lobby/listeners/PlayerHider.java @@ -0,0 +1,127 @@ +package eu.univento.lobby.listeners; + +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.Perms.Ranks; + +/** + * lets players show/hide other players + * @author joethei + * @version 1.0 + */ +public class PlayerHider implements Listener{ + + /** + * contains all player witch hide other players from their view + */ + private ArrayList hidden = new ArrayList(); + + /** + * item to hide + * @return ItemStack + */ + private ItemStack getHide() { + ItemStack hide = new ItemStack(Material.BLAZE_ROD); + ItemMeta hideMeta = hide.getItemMeta(); + hideMeta.setDisplayName("§cSpieler verstecken"); + hide.setItemMeta(hideMeta); + + return hide; + } + + /** + * item to show + * @return ItemStack + */ + private ItemStack getShow() { + ItemStack show = new ItemStack(Material.STICK); + ItemMeta showMeta = show.getItemMeta(); + showMeta.setDisplayName("§aSpieler anzeigen"); + show.setItemMeta(showMeta); + + return show; + } + + /** + * player interacts with item + * @param e PlayerInteractEvent + * @throws InterruptedException threads closed + */ + @EventHandler + public void onInteract(PlayerInteractEvent e) throws InterruptedException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if(e.getItem().getType() == Material.STICK) { + hidden.remove(p); + + for(Player players : Bukkit.getOnlinePlayers()) { + p.showPlayer(players); + } + p.sendMessage("§aDu kannst nun alle Spieler sehen"); + + p.getInventory().remove(getShow()); + p.getInventory().addItem(getHide()); + + p.playSound(p.getEyeLocation(), Sound.ZOMBIE_WOODBREAK, 10.0F, 1.0F); + } + if(e.getItem().getType() == Material.BLAZE_ROD) { + hidden.add(p); + + for(Player players : Bukkit.getOnlinePlayers()) { + if(!p.isAllowed(Ranks.Supporter)) { + p.hidePlayer(players); + } + } + p.sendMessage("§cDu kannst keine Spieler mehr sehen"); + + p.getInventory().remove(getHide()); + p.getInventory().addItem(getShow()); + + p.playSound(p.getEyeLocation(), Sound.ZOMBIE_WOODBREAK, 10.0F, 1.0F); + + } + } + } + + /** + * hides player to other players + * @param e PlayerJoinEvent + */ + @EventHandler + public void onJoin(PlayerJoinEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + if(!p.isAllowed(Ranks.Supporter)) { + for(CustomPlayer players : hidden) { + players.hidePlayer(p); + } + } + } + + /** + * removes players from lists + * @param e PlayerQuitEvent + */ + @EventHandler + public void onQuit(PlayerQuitEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + if(hidden.contains(p)) { + hidden.remove(p); + } + + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/StatusSigns.java b/src/eu/univento/lobby/listeners/StatusSigns.java new file mode 100644 index 0000000..8ea9d4c --- /dev/null +++ b/src/eu/univento/lobby/listeners/StatusSigns.java @@ -0,0 +1,38 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.Servers; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.utils.StatusSignUtil; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +/** + * handles status sign clicking + * @author joethei + * @version 1.0 + */ +public class StatusSigns implements Listener{ + +/** + * clicking status signs + * @param e PlayerInteractEvent + */ +@EventHandler + public void onPlayerInteract(PlayerInteractEvent e) + { + if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; + + Block block = e.getClickedBlock(); + + if ((block.getType() != Material.SIGN) && (block.getType() != Material.SIGN_POST) && (block.getType() != Material.WALL_SIGN)) return; + + for (StatusSignUtil s : Lobby.returnSigns()) + if (s.getLocation().equals(block.getLocation())) + Servers.connectServer(e.getPlayer(), s.getName()); + } +} \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/Teleport.java b/src/eu/univento/lobby/listeners/Teleport.java new file mode 100644 index 0000000..f03184b --- /dev/null +++ b/src/eu/univento/lobby/listeners/Teleport.java @@ -0,0 +1,82 @@ +package eu.univento.lobby.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +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.SlotType; +import org.bukkit.util.Vector; + +import eu.univento.core.api.Config; +import eu.univento.core.api.CustomPlayer; +import eu.univento.lobby.Lobby; + +/** + * handles teleport menus + * @author joethei + * @version 1.0 + */ +public class Teleport implements Listener { + + /** + * clicking items + * @param e InventoryClickEvent + */ + @EventHandler + public void onClick(InventoryClickEvent e) { + if (e.getWhoClicked() instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(e.getWhoClicked().getName()); + if(e.getInventory().getName() == "§6Server-Menü") { + if(!e.getSlotType().equals(SlotType.OUTSIDE)) { + if(e.getCurrentItem().getType() == Material.GOLD_BLOCK) { + teleport(p, "TheBlock"); + p.closeInventory(); + } + if(e.getCurrentItem().getType() == Material.SNOW_BALL) { + teleport(p, "FlagAttack"); + p.closeInventory(); + } + } + } + } + } + + /** + * teleports player with effects to location + * @param p CustomPlayer + * @param location String + */ + @SuppressWarnings("deprecation") + private void teleport(CustomPlayer p, String location) { + Vector v = p.getLocation().getDirection().multiply(0D).setY(4D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.EXPLODE, 5.0F, 1.0F); + p.playEffect(p.getEyeLocation(), Effect.EXPLOSION_HUGE, 20); + Location loc = Config.readLocation("Lobby.Locs." + location); + Lobby.getOpenInventorys().add(p); + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), new Runnable() { + + @Override + public void run() { + for (Player players : Bukkit.getOnlinePlayers()) { + players.playSound(p.getEyeLocation(), Sound.EXPLODE, 5.0F, 1.0F); + players.playEffect(p.getEyeLocation(), Effect.EXPLOSION_HUGE, 20); + } + p.teleport(loc); + for (Player players : Bukkit.getOnlinePlayers()) { + players.playSound(p.getEyeLocation(), Sound.EXPLODE, 5.0F, 1.0F); + players.playEffect(p.getEyeLocation(), Effect.EXPLOSION_HUGE, 20); + } + Lobby.getOpenInventorys().remove(p); + + } + + }, 80L); + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/utils/Inventorys.java b/src/eu/univento/lobby/utils/Inventorys.java new file mode 100644 index 0000000..9c4db08 --- /dev/null +++ b/src/eu/univento/lobby/utils/Inventorys.java @@ -0,0 +1,240 @@ +package eu.univento.lobby.utils; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import eu.univento.core.Core; +import eu.univento.core.api.CustomPlayer; +import eu.univento.core.api.MySQL; +import eu.univento.core.api.ServerPinger; +import eu.univento.core.api.Perms.Ranks; +import eu.univento.lobby.Lobby; + +/** + * opens inventorys for players + * @author joethei + * @version 1.0 + */ +public class Inventorys { + + /** + * opens inventory with servers of gamemode + * @param p CustomPlayer + * @param name name of gamemodes + * @param lines lines of servers + */ + @SuppressWarnings("deprecation") + public static void getGameServers(CustomPlayer p, String name, int lines) { + Inventory inv = Bukkit.createInventory(p, lines * 9, "§6" + name); + p.openInventory(inv); + + for (int i = 0; i < lines * 9; i++) { + inv.setItem(i, getServer(name + (i + 1) + ".univento.eu", name + " " + (i + 1))); + p.playSound(p.getEyeLocation(), Sound.CHICKEN_EGG_POP, 1.0F, 1.0F); + p.updateInventory(); + } + } + + /** + * gets item for single server + * @param ip ip of server + * @param name name of server + * @return ItemStack + */ + public static ItemStack getServer(String ip, String name) { + ServerPinger server = new ServerPinger(ip, 25565); + if ((server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) == null) && (server.parseData(ServerPinger.Connection.MAX_PLAYERS) == null)) { + ItemStack item = new ItemStack(Material.NETHER_BRICK_ITEM); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(ChatColor.AQUA + name); + itemMeta.setLore(Arrays.asList(new String[] { "§8Offline", "§7--§e/§7--" })); + item.setItemMeta(itemMeta); + return item; + } + if (server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) == server.parseData(ServerPinger.Connection.MAX_PLAYERS)) { + ItemStack item = new ItemStack(Material.CLAY_BRICK); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(ChatColor.AQUA + name); + itemMeta.setLore(Arrays.asList(new String[] { "§4Voll", "§7" + server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) + "§e/§7" + server.parseData(ServerPinger.Connection.MAX_PLAYERS) })); + item.setItemMeta(itemMeta); + return item; + } + if (server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) != server.parseData(ServerPinger.Connection.MAX_PLAYERS)) { + ItemStack item = new ItemStack(Material.GOLD_INGOT); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(ChatColor.AQUA + name); + itemMeta.setLore(Arrays.asList(new String[] { "§aOnline", "§7" + server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) + "§e/§7" + server.parseData(ServerPinger.Connection.MAX_PLAYERS) })); + item.setItemMeta(itemMeta); + return item; + } + if (server.parseData(ServerPinger.Connection.ONLINE_PLAYERS) == null) { + ItemStack item = new ItemStack(Material.NETHER_BRICK_ITEM); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(ChatColor.AQUA + name); + itemMeta.setLore(Arrays.asList(new String[] { "§8Offline", "§7--§e/§7--" })); + item.setItemMeta(itemMeta); + return item; + } + ItemStack item = new ItemStack(Material.NETHER_BRICK_ITEM); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(ChatColor.AQUA + name); + itemMeta.setLore(Arrays.asList(new String[] { "§8Offline", "§7--§e/§7--" })); + item.setItemMeta(itemMeta); + return item; + } + + /** + * open main inventory for player + * @param p CustomPlayer + * @throws ClassNotFoundException class could not be found + * @throws SQLException SQL Server not available or throwing error + */ + public static void openMainInventory(CustomPlayer p) throws ClassNotFoundException, SQLException { + Inventory inv = p.getInventory(); + + ItemStack nav = new ItemStack(Material.COMPASS); + ItemMeta navMeta = nav.getItemMeta(); + navMeta.setDisplayName("§eNavigator"); + nav.setItemMeta(navMeta); + + ItemStack hide = new ItemStack(Material.BLAZE_ROD); + ItemMeta hideMeta = hide.getItemMeta(); + hideMeta.setDisplayName("§cSpieler verstecken"); + hide.setItemMeta(hideMeta); + + ItemStack nick = new ItemStack(Material.NAME_TAG); + ItemMeta nickMeta = nick.getItemMeta(); + nickMeta.setDisplayName("§5AutoNick"); + nick.setItemMeta(nickMeta); + + ItemStack force = new ItemStack(Material.EYE_OF_ENDER); + ItemMeta forceMeta = force.getItemMeta(); + forceMeta.setDisplayName("§aSchutzschild"); + force.setItemMeta(forceMeta); + + ItemStack silent = new ItemStack(Material.TNT); + ItemMeta silentMeta = silent.getItemMeta(); + silentMeta.setDisplayName("§cSilent-Lobby"); + silent.setItemMeta(silentMeta); + + ItemStack fun = new ItemStack(Material.ENDER_CHEST); + ItemMeta funMeta = fun.getItemMeta(); + funMeta.setDisplayName("§cF§aU§eN§3Chest"); + fun.setItemMeta(funMeta); + + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(p.getName()); + meta.setDisplayName("§eDein Profil"); + skull.setItemMeta(meta); + + timeItem(p, inv, 0, nav, Sound.CHICKEN_EGG_POP, 50L, false); + timeItem(p, inv, 8, skull, Sound.CHICKEN_EGG_POP, 100L, false); + timeItem(p, inv, 1, hide, Sound.CHICKEN_EGG_POP, 150L, false); + timeItem(p, inv, 7, fun, Sound.CHICKEN_EGG_POP, 200L, false); + if (p.isAllowed(Ranks.Youtuber)) { + timeItem(p, inv, 3, nick, Sound.CHICKEN_EGG_POP, 250L, false); + timeItem(p, inv, 5, force, Sound.CHICKEN_EGG_POP, 300L, false); + timeItem(p, inv, 4, silent, Sound.CHICKEN_EGG_POP, 350L, false); + } + + } + + /** + * returns if setting is set + * @param p CustomPlayer + * @param what what setting is set + * @return boolean + * @throws ClassNotFoundException class could not be found + * @throws SQLException SQL Server not available or throwing error + */ + public static boolean isSet(CustomPlayer p, String what) throws SQLException, ClassNotFoundException { + MySQL sql = Core.returnSQL(); + sql.openConnection(); + String uuid = p.getUniqueId().toString(); + ResultSet rs = Core.returnSQL().getConnection().createStatement().executeQuery("SELECT * FROM PlayerData WHERE player_uuid = '" + uuid + "';"); + if (rs.next()) { + boolean is = rs.getInt(what) == 1; + sql.closeConnection(); + return is; + } + sql.closeConnection(); + return false; + } + + /** + * sets setting + * @param p CustomPlayer + * @param bool boolean to set to + * @param what what to set + * @throws ClassNotFoundException class could not be found + * @throws SQLException SQL Server not available or throwing error + */ + public static void set(CustomPlayer p, boolean bool, String what) throws SQLException, ClassNotFoundException { + MySQL sql = Core.returnSQL(); + sql.openConnection(); + String uuid = p.getUniqueId().toString(); + if (bool) + Core.returnSQL().getConnection().createStatement().executeUpdate("UPDATE PlayerData SET " + what + " = '1' WHERE player_uuid = '" + uuid + "';"); + else + Core.returnSQL().getConnection().createStatement().executeUpdate("UPDATE PlayerData SET " + what + " = '0' WHERE player_uuid = '" + uuid + "';"); + sql.closeConnection(); + } + + /** + * time item appearance of item + * @param p CustomPlayer + * @param inv inventory + * @param slot Inventory slot + * @param item ItemStack + * @param sound Sound + * @param time long + * @param menu is menu ? + * @throws ClassNotFoundException class could not be found + * @throws SQLException SQL Server not available or throwing error + */ + @SuppressWarnings("deprecation") + public static void timeItem(CustomPlayer p, Inventory inv, int slot, ItemStack item, Sound sound, long time, boolean menu) throws ClassNotFoundException, SQLException { + if (isSet(p, "FastMenu")) { + addItem(p, inv, slot, item, null, menu); + } else { + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), new Runnable() { + public void run() { + addItem(p, inv, slot, item, sound, menu); + } + }, time); + } + } + + /** + * @param p CustomPlayer + * @param inv inventory + * @param slot Inventory slot + * @param item ItemStack + * @param sound Sound + * @param menu is menu ? + */ + private static void addItem(CustomPlayer p, Inventory inv, int slot, ItemStack item, Sound sound, boolean menu) { + if (menu) { + String name = inv.getTitle(); + if (p.getOpenInventory().getTitle().equals(name)) { + inv.setItem(slot, item); + p.playSound(p.getEyeLocation(), sound, 1.0F, 1.0F); + } + } else { + inv.setItem(slot, item); + p.playSound(p.getEyeLocation(), sound, 1.0F, 1.0F); + } + } + +} \ No newline at end of file diff --git a/src/eu/univento/lobby/utils/StatusSignUtil.java b/src/eu/univento/lobby/utils/StatusSignUtil.java new file mode 100644 index 0000000..1f884bc --- /dev/null +++ b/src/eu/univento/lobby/utils/StatusSignUtil.java @@ -0,0 +1,109 @@ +package eu.univento.lobby.utils; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import org.bukkit.Location; +import org.bukkit.block.Sign; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +public class StatusSignUtil{ + + private Location location; + private Sign sign; + private String name; + private String ip; + private int port; + + private static File file = new File("plugins/Lobby/signs.yml"); + private static FileConfiguration cfg = YamlConfiguration.loadConfiguration(file); + + public StatusSignUtil(Location location, String name, String ip, int port) { + this.location = location; + this.sign = ((Sign)location.getBlock().getState()); + this.name = name; + this.ip = ip; + this.port = port; + } + + public Location getLocation() { + return this.location; + } + + public String getName() { + return this.name; + } + + public String getIP() { + return this.ip; + } + + public int getPort() { + return this.port; + } + + public void update() { + try { + Socket socket = new Socket(); + socket.connect(new InetSocketAddress(this.ip, this.port), 1000); + + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + DataInputStream in = new DataInputStream(socket.getInputStream()); + + out.write(254); + + StringBuilder str = new StringBuilder(); + int b; + while ((b = in.read()) != -1) + { + if ((b != 1) && (b > 16) && (b != 255) && (b != 23) && (b != 24)) { + str.append((char)b); + } + + } + + String[] data = str.toString().split("§"); + String motd = data[0]; + int onlinePlayers = Integer.valueOf(data[1]).intValue(); + int maxPlayers = Integer.valueOf(data[2]).intValue(); + + socket.close(); + + this.sign.setLine(0, "§a[Beitreten]"); + this.sign.setLine(1, "§9" + this.name); + this.sign.setLine(2, "§6" + motd); + this.sign.setLine(3, "§1" + onlinePlayers + "/" + maxPlayers); + } + catch (Exception e) + { + this.sign.setLine(0, "§4████████"); + this.sign.setLine(1, "§4Neustart.."); + this.sign.setLine(2, "§9" + this.name); + this.sign.setLine(3, "§4████████"); + } + + this.sign.update(); + } + public static void save(StatusSignUtil sign) { + int size = cfg.getKeys(false).size() + 1; + + cfg.set(size + ".loc.world", sign.getLocation().getWorld().getName()); + cfg.set(size + ".loc.x", Double.valueOf(sign.getLocation().getX())); + cfg.set(size + ".loc.y", Double.valueOf(sign.getLocation().getY())); + cfg.set(size + ".loc.z", Double.valueOf(sign.getLocation().getZ())); + + cfg.set(size + ".name", sign.getName()); + cfg.set(size + ".ip", sign.getIP()); + cfg.set(size + ".port", Integer.valueOf(sign.getPort())); + try + { + cfg.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml new file mode 100644 index 0000000..0dc672d --- /dev/null +++ b/src/plugin.yml @@ -0,0 +1,5 @@ +main: eu.univento.lobby.Lobby +name: Lobby +version: 0.1 +author: joethei +website: http://joethei.de \ No newline at end of file