From e630ea2e6ddbf1e0a847dddb10f3dd9b5552a42e Mon Sep 17 00:00:00 2001 From: joethei Date: Sat, 9 Jul 2016 13:17:02 +0200 Subject: [PATCH] added basic custom map renderer --- .classpath | 8 - .gitignore | 2 +- .project | 17 - .settings/org.eclipse.core.resources.prefs | 2 - .settings/org.eclipse.jdt.core.prefs | 11 - Lobby.iml | 36 ++ README.md | 5 + pom.xml | 84 +++ src/eu/univento/lobby/listeners/Teleport.java | 82 --- src/main/Lobby.iml | 19 + src/main/java/eu/univento/lobby/Lobby.java | 100 +++ .../eu/univento/lobby/commands/DropItem.java | 78 +++ .../eu/univento/lobby/commands/Setloc.java | 66 ++ .../eu/univento/lobby/listeners/Events.java | 306 +++++++++ .../univento/lobby/listeners/FoundItems.java | 108 ++++ .../univento/lobby/listeners/ItemEvents.java | 103 +++ .../eu/univento/lobby/listeners/JoinQuit.java | 98 +++ .../eu/univento/lobby/listeners/Jumppads.java | 186 ++++++ .../eu/univento/lobby/listeners/Menu.java | 58 ++ .../univento/lobby/listeners/MenuEvents.java | 297 +++++++++ .../eu/univento/lobby/listeners/Parkour.java | 91 +++ .../univento/lobby/listeners/PetInteract.java | 126 ++++ .../univento/lobby/listeners/PlayerHider.java | 132 ++++ .../lobby/listeners/PlayerInteract.java | 70 ++ .../univento/lobby/listeners/StatusSigns.java | 45 ++ .../lobby/utils/CustomMapRenderer.java | 25 + .../eu/univento/lobby/utils/Inventorys.java | 599 ++++++++++++++++++ .../eu/univento/lobby/utils/PetManager.java | 57 ++ .../java/eu/univento/lobby/utils/Pets.java | 69 ++ .../eu/univento/lobby/utils/Scoreboards.java | 68 ++ .../eu/univento/lobby/utils/StatusSign.java | 90 +++ .../lobby/utils/StatusSignManager.java | 102 +++ src/main/resources/plugin.yml | 6 + 33 files changed, 3025 insertions(+), 121 deletions(-) delete mode 100644 .classpath delete mode 100644 .project delete mode 100644 .settings/org.eclipse.core.resources.prefs delete mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 Lobby.iml create mode 100644 README.md create mode 100644 pom.xml delete mode 100644 src/eu/univento/lobby/listeners/Teleport.java create mode 100644 src/main/Lobby.iml create mode 100644 src/main/java/eu/univento/lobby/Lobby.java create mode 100644 src/main/java/eu/univento/lobby/commands/DropItem.java create mode 100644 src/main/java/eu/univento/lobby/commands/Setloc.java create mode 100644 src/main/java/eu/univento/lobby/listeners/Events.java create mode 100644 src/main/java/eu/univento/lobby/listeners/FoundItems.java create mode 100644 src/main/java/eu/univento/lobby/listeners/ItemEvents.java create mode 100644 src/main/java/eu/univento/lobby/listeners/JoinQuit.java create mode 100644 src/main/java/eu/univento/lobby/listeners/Jumppads.java create mode 100644 src/main/java/eu/univento/lobby/listeners/Menu.java create mode 100644 src/main/java/eu/univento/lobby/listeners/MenuEvents.java create mode 100644 src/main/java/eu/univento/lobby/listeners/Parkour.java create mode 100644 src/main/java/eu/univento/lobby/listeners/PetInteract.java create mode 100644 src/main/java/eu/univento/lobby/listeners/PlayerHider.java create mode 100644 src/main/java/eu/univento/lobby/listeners/PlayerInteract.java create mode 100644 src/main/java/eu/univento/lobby/listeners/StatusSigns.java create mode 100644 src/main/java/eu/univento/lobby/utils/CustomMapRenderer.java create mode 100644 src/main/java/eu/univento/lobby/utils/Inventorys.java create mode 100644 src/main/java/eu/univento/lobby/utils/PetManager.java create mode 100644 src/main/java/eu/univento/lobby/utils/Pets.java create mode 100644 src/main/java/eu/univento/lobby/utils/Scoreboards.java create mode 100644 src/main/java/eu/univento/lobby/utils/StatusSign.java create mode 100644 src/main/java/eu/univento/lobby/utils/StatusSignManager.java create mode 100644 src/main/resources/plugin.yml diff --git a/.classpath b/.classpath deleted file mode 100644 index f7b275b..0000000 --- a/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/.gitignore b/.gitignore index ae3c172..65776c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/bin/ +/bin/ \ No newline at end of file diff --git a/.project b/.project deleted file mode 100644 index 213b8d4..0000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 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 deleted file mode 100644 index ee5b8c2..0000000 --- a/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index bb35fa0..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -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/Lobby.iml b/Lobby.iml new file mode 100644 index 0000000..d031af3 --- /dev/null +++ b/Lobby.iml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bad648f --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +Lobby Plugin for univento.eu + +Written by joethei + +API Doku at: http://dev.univento.eu/docs/Lobby \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4dcc6a3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + groupId + Lobby + 1.0-SNAPSHOT + + univento.eu Lobby System + http://univento.eu + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-beta-5 + + + + eu.univento.lobby.Lobby + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + org.bukkit + craftbukkit + 1.10-R0.1-SNAPSHOT + provided + + + org.bukkit + bukkit + 1.10-R0.1-SNAPSHOT + provided + + + org.spigotmc + spigot-api + 1.10-R0.1-SNAPSHOT + provided + + + eu.univento + Core + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/src/eu/univento/lobby/listeners/Teleport.java b/src/eu/univento/lobby/listeners/Teleport.java deleted file mode 100644 index f03184b..0000000 --- a/src/eu/univento/lobby/listeners/Teleport.java +++ /dev/null @@ -1,82 +0,0 @@ -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/main/Lobby.iml b/src/main/Lobby.iml new file mode 100644 index 0000000..4ab866e --- /dev/null +++ b/src/main/Lobby.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/Lobby.java b/src/main/java/eu/univento/lobby/Lobby.java new file mode 100644 index 0000000..7d0df1b --- /dev/null +++ b/src/main/java/eu/univento/lobby/Lobby.java @@ -0,0 +1,100 @@ +package eu.univento.lobby; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import eu.univento.core.api.pet.NMSHandler; +import eu.univento.core.api.server.ServerSettings; +import eu.univento.lobby.listeners.*; +import eu.univento.lobby.utils.PetManager; +import eu.univento.lobby.utils.StatusSignManager; +import org.bukkit.Bukkit; +import org.bukkit.Difficulty; +import org.bukkit.GameMode; +import org.bukkit.World; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import eu.univento.lobby.commands.DropItem; +import eu.univento.lobby.commands.Setloc; + +/** + * main class... + * @author joethei + * @version 1.0 + */ +public class Lobby extends JavaPlugin{ + + /** + * plugin instance + */ + public static Lobby instance; + /** + * @return instance of plugin + */ + public static Lobby getInstance() { + return instance; + } + + /** + * Logger to log to + */ + private static Logger logger = Bukkit.getLogger(); + + /** + * @param level Log level + * @param string String + */ + public static void log(Level level, String string) { + if(ServerSettings.isDebug()) { + logger.log(level, "[" + Lobby.getInstance().getDescription().getName() + "] " + string); + } + } + + + @Override + public void onEnable() { + instance = this; + PluginManager pm = Bukkit.getPluginManager(); + ServerSettings.setLobby(true); + pm.registerEvents(new Jumppads(), this); + pm.registerEvents(new JoinQuit(), this); + pm.registerEvents(new MenuEvents(), this); + pm.registerEvents(new Events(), this); + pm.registerEvents(new Menu(), this); + pm.registerEvents(new PlayerHider(), this); + pm.registerEvents(new ItemEvents(), this); + pm.registerEvents(new FoundItems(), this); + pm.registerEvents(new Parkour(), this); + pm.registerEvents(new PetInteract(), this); + pm.registerEvents(new StatusSigns(), this); + pm.registerEvents(new PlayerInteract(), this); + + if(ServerSettings.isDebug()) log(Level.INFO, "Events registriert"); + + new Setloc(this, "setloc", "Setzt Teleport Punkte"); + + new DropItem(this, "dropitem", "Setzt EasterEggs"); + + if(ServerSettings.isDebug()) log(Level.INFO, "Befehle registriert"); + + for(World w : Bukkit.getWorlds()) { + w.setDifficulty(Difficulty.PEACEFUL); + } + ServerSettings.setGameMode(GameMode.ADVENTURE); + ServerSettings.setLobby(true); + StatusSignManager.loadSigns(); + StatusSignManager.updateSigns(); + NMSHandler.registerEnties(); + log(Level.INFO, " Plugin ver." + getDescription().getVersion() + " gestartet"); + + } + + @Override + public void onDisable() { + StatusSignManager.saveSigns(); + PetManager.clearPets(); + log(Level.INFO, "Plugin beendet"); + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/commands/DropItem.java b/src/main/java/eu/univento/lobby/commands/DropItem.java new file mode 100644 index 0000000..6249dec --- /dev/null +++ b/src/main/java/eu/univento/lobby/commands/DropItem.java @@ -0,0 +1,78 @@ +package eu.univento.lobby.commands; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import eu.univento.core.api.AutoCommand; +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.core.api.player.Rank; +import eu.univento.lobby.Lobby; + +/** + * drops items for easter eggs + * @author joethei + * @version 1.0 + */ +public class DropItem extends AutoCommand{ + + + /** + * @param plugin main class + * @param command command to execute + * @param description describes the command + * @param aliases aliases of command + */ + public DropItem(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()); + Messages msgs = new Messages(p); + if(p.isAllowed(Rank.Admin)) { + if(args.length == 1) { + if(args[0].equalsIgnoreCase("music_3")) { + ItemStack music_3 = new ItemStack(Material.RECORD_3); + p.getWorld().dropItem(p.getLocation(), music_3); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_DROP_ITEM()); + } + if(args[0].equalsIgnoreCase("feather")) { + ItemStack feather = new ItemStack(Material.FEATHER); + p.getWorld().dropItem(p.getLocation(), feather); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_DROP_ITEM()); + } + if(args[0].equalsIgnoreCase("hearts")) { + ItemStack hearts = new ItemStack(Material.RED_ROSE); + p.getWorld().dropItem(p.getLocation(), hearts); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_DROP_ITEM()); + } + if(args[0].equalsIgnoreCase("sugar")) { + ItemStack sugar = new ItemStack(Material.SUGAR); + p.getWorld().dropItem(p.getLocation(), sugar); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_DROP_ITEM()); + } + }else{ + p.sendMessage(msgs.PREFIX() + msgs.Lobby_DROP_ITEM_USAGE()); + } + }else{ + sender.sendMessage(msgs.NO_PERMS()); + } + }else{ + sender.sendMessage(Messages.Console.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/main/java/eu/univento/lobby/commands/Setloc.java b/src/main/java/eu/univento/lobby/commands/Setloc.java new file mode 100644 index 0000000..26e7a9c --- /dev/null +++ b/src/main/java/eu/univento/lobby/commands/Setloc.java @@ -0,0 +1,66 @@ +package eu.univento.lobby.commands; + +import java.util.ArrayList; +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.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.core.api.player.Rank; +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()); + Messages msgs = new Messages(p); + if(p.isAllowed(Rank.SrDeveloper)) { + if(args.length == 1) { + Config.write("Lobby.Locs." + args[0], p.getLocation()); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_SET_LOCATION()); + }else { + p.sendMessage(msgs.PREFIX() + msgs.Lobby_SET_LOCATION_USAGE()); + } + }else { + p.sendMessage(msgs.NO_PERMS()); + } + }else { + sender.sendMessage(Messages.Console.NOT_A_PLAYER); + } + return false; + } + + @Override + public List tabComplete(CommandSender sender, String label, String[] args) { + ArrayList list = new ArrayList<>(); + + list.add("Spawn"); + list.add("Maya"); + list.add("WoolGet"); + list.add("PremiumHub"); + + return list; + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/Events.java b/src/main/java/eu/univento/lobby/listeners/Events.java new file mode 100644 index 0000000..a5d8471 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/Events.java @@ -0,0 +1,306 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.Title; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.utils.CustomMapRenderer; +import eu.univento.lobby.utils.PetManager; +import eu.univento.lobby.utils.Pets; +import eu.univento.lobby.utils.Scoreboards; +import net.minecraft.server.v1_10_R1.EnumParticle; +import org.bukkit.*; +import org.bukkit.block.Skull; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.entity.*; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.inventory.InventoryCreativeEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.*; +import org.bukkit.event.server.MapInitializeEvent; +import org.bukkit.event.weather.WeatherChangeEvent; +import org.bukkit.event.world.StructureGrowEvent; + +import eu.univento.core.api.Config; +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.map.MapRenderer; +import org.bukkit.map.MapView; +import org.bukkit.util.Vector; + +import java.util.Set; + +/** + * some short events + * + * @author joethei + * @version 1.0 + */ +public class Events implements Listener { + + @EventHandler + public void onMapInit(MapInitializeEvent e) { + MapView map = e.getMap(); + map.getRenderers().forEach(map::removeRenderer); + map.addRenderer(new CustomMapRenderer()); + } + + /** + * 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 onWeatherChange(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); + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onItemSwapHands(PlayerSwapHandItemsEvent e) { + e.setCancelled(true); + } + + /** + * sets respawn location + * + * @param e PlayerRespawnEvent + */ + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + e.setRespawnLocation(Config.readLocation("Lobby.Locs.Spawn")); + } + + /** + * cancels inventory dropping in creative + * + * @param e InventoryCreativeEvent + */ + @EventHandler + public void onInventoryCreative(InventoryCreativeEvent e) { + e.setCancelled(false); + } + + /** + * cancels item drop + * + * @param e PlayerDropItemEvent + */ + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + e.setCancelled(true); + } + + /** + * cancels player damage + * + * @param e EntityDamageEvent + */ + @EventHandler + public void onDamage(EntityDamageEvent e) { + e.setCancelled(true); + } + + /** + * cancels explosions + * + * @param e EntityExplodeEvent + */ + @EventHandler + public void onExplode(EntityExplodeEvent e) { + e.blockList().clear(); + } + + /** + * cancels block destroying when block burns + * + * @param e BlockBurnEvent + */ + @EventHandler + public void onBurn(BlockBurnEvent e) { + e.setCancelled(true); + } + + /** + * @param e BlockIgniteEvent + */ + @EventHandler + public void onBlockIgnite(BlockIgniteEvent e) { + if (e.getCause() == IgniteCause.SPREAD) { + e.setCancelled(true); + } + } + + /** + * cancels chest opening and stuff + some easter egg + * + * @param e PlayerInteract + */ + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (e.getAction() == Action.PHYSICAL && e.getClickedBlock().getType() == Material.SOIL) + e.setCancelled(true); + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + if (e.getClickedBlock().getType() == Material.CHEST) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.FURNACE) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.BURNING_FURNACE) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.WORKBENCH) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.BREWING_STAND) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.ARMOR_STAND) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.ACACIA_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.BIRCH_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.DARK_OAK_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.JUNGLE_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.TRAP_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.SPRUCE_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.WOOD_DOOR) e.setCancelled(true); + if (e.getClickedBlock().getType() == Material.WOODEN_DOOR) e.setCancelled(true); + + if (e.getClickedBlock().getType() == Material.BEDROCK) { + p.setPlayerWeather(WeatherType.DOWNFALL); + p.setPlayerTime(15000, true); + p.sendBlockChange(e.getClickedBlock().getLocation(), Material.TNT, (byte) 0); + p.getWorld().strikeLightning(p.getTargetBlock((Set) null, 500).getLocation()); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> p.getWorld().strikeLightning(p.getTargetBlock((Set) null, 500).getLocation()), 5 * 20L); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> { + p.resetPlayerWeather(); + p.resetPlayerTime(); + p.sendBlockChange(e.getClickedBlock().getLocation(), Material.BEDROCK, (byte) 0); + p.getWorld().strikeLightning(p.getTargetBlock((Set) null, 500).getLocation()); + }, 10 * 20L); + + } + if (e.getClickedBlock().getType() == Material.SKULL) { + Skull skull = (Skull) e.getClickedBlock().getState(); + if (skull.getOwner().equals("MHF_Chest")) { + p.playSound(p.getEyeLocation(), Sound.BLOCK_PORTAL_TRAVEL, 5.0F, 1.0F); + p.playParticle(skull.getLocation().add(0.5D, 1.5D, 0.5D), EnumParticle.ENCHANTMENT_TABLE, 0.3F, 500); + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), () -> { + p.playParticle(skull.getLocation().add(0.5D, 0.0D, 0.5D), EnumParticle.SPELL_WITCH, 0.4F, 500); + + Title.sendTitle(p, 10, 50, 10, "§eDu hast ein Versteck gefunden", "§6Name hier einfügen"); + p.addCoins(100); + Scoreboards.updateScoreboard(p); + }, 3 * 20L); + + } + } + } + } + /** + * prevents item despawning + * + * @param e ItemDespawnEvent + */ + @EventHandler + public void onItemDespawn(ItemDespawnEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onHangingBreak(HangingBreakByEntityEvent e) { + if (e.getEntity() instanceof ItemFrame) { + e.setCancelled(true); + } + } + + @EventHandler + public void onBlockGrow(BlockGrowEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onStructureGrow(StructureGrowEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onArmorstandManipulate(PlayerArmorStandManipulateEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onChat(AsyncPlayerChatEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + + for (CustomPlayer players : PlayerHider.getSilentlobby()) { + e.getRecipients().remove(players); + } + + if (PlayerHider.getSilentlobby().contains(p)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onMove(PlayerMoveEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + if (PetManager.hasPet(p)) { + new Pets().followPlayer((Creature) PetManager.getPet(p), p, 1.4); + } + if ((p.getLocation().getBlock().getType() == Material.STATIONARY_WATER) && (p.getLocation().subtract(0.0D, 3.0D, 0.0D).getBlock().getType() == Material.STATIONARY_WATER) && (p.getVehicle() == null) && (p.getGameMode() != GameMode.CREATIVE) && (!p.isFlying())) { + p.setGliding(true); + }else{ + p.setGliding(false); + } + //only for debugging purposes + if(p.getLocation().getY() >= 5.0D && p.getLocation().getBlock().getType() == Material.STATIONARY_WATER) { + Vector v = p.getLocation().getDirection().multiply(0D).setY(3D); + p.setVelocity(v); + } + } + + @EventHandler + public void onEntityBlockChange(EntityChangeBlockEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onCreatureSpawn(CreatureSpawnEvent e) { + if (e.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM) { + e.setCancelled(true); + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/FoundItems.java b/src/main/java/eu/univento/lobby/listeners/FoundItems.java new file mode 100644 index 0000000..b3d000e --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/FoundItems.java @@ -0,0 +1,108 @@ +package eu.univento.lobby.listeners; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import eu.univento.core.api.languages.Messages; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPickupItemEvent; + +import eu.univento.core.Core; +import eu.univento.core.api.database.MySQL; +import eu.univento.core.api.Title; +import eu.univento.core.api.player.CustomPlayer; + +/** + * handels all posible easter eggs + * @author joethei + * @version 0.1 + */ +public class FoundItems implements Listener{ + + /** + * handels item pickup + * @param e PlayerPickupItemEvent + */ + @EventHandler + public void onItemPickup(PlayerPickupItemEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + Messages msgs = new Messages(p); + if(e.getItem().getItemStack().getType() == Material.RECORD_3) { + if(!hasFound("music_3", p)) { + setFound("music_3", p); + Title.sendTitle(p, 5, 5, 5, msgs.Lobby_FOUND_ITEM_PREFIX(), "Music_3"); + p.addExperience(5); + } + } + if(e.getItem().getItemStack().getType() == Material.SUGAR) { + if(!hasFound("sugar", p)) { + setFound("sugar", p); + Title.sendTitle(p, 5, 5, 5, msgs.Lobby_FOUND_ITEM_PREFIX(), "Sugar"); + p.addExperience(5); + } + } + if(e.getItem().getItemStack().getType() == Material.RED_ROSE) { + if(!hasFound("hearts", p)) { + setFound("hearts", p); + Title.sendTitle(p, 5, 5, 5, msgs.Lobby_FOUND_ITEM_PREFIX(), "Hearts"); + p.addExperience(3); + } + } + if(e.getItem().getItemStack().getType() == Material.FEATHER) { + if(!hasFound("feather", p)) { + setFound("feather", p); + Title.sendTitle(p, 5, 5, 5, msgs.Lobby_FOUND_ITEM_PREFIX(), "Feather"); + } + } + e.setCancelled(true); + } + + /** + * checks if player has found item + * @param item name of item + * @param p CustomPlayer + * @return boolean + */ + public static boolean hasFound(String item, CustomPlayer p) { + int id = 8; + MySQL sql = Core.getMySQL(); + try { + sql.openConnection(); + PreparedStatement st = sql.getConnection().prepareStatement("SELECT * FROM FoundItems WHERE ID='" + id + "';"); + ResultSet rs = st.executeQuery(); + if(rs.next()) { + boolean has = rs.getInt(item) == 1; + sql.closeConnection(); + return has; + }else{ + return false; + } + } catch (ClassNotFoundException | SQLException e) { + e.printStackTrace(); + return false; + } + + } + + /** + * sets item to found + * @param item name of item + * @param p CustomPlayer + */ + void setFound(String item, CustomPlayer p) { + int id = 8; + MySQL sql = Core.getMySQL(); + try { + sql.openConnection(); + PreparedStatement st = sql.getConnection().prepareStatement("UPDATE FoundItems SET " + item + "='1' WHERE ID='" + id + "';"); + st.execute(); + sql.closeConnection(); + } catch (ClassNotFoundException | SQLException e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/ItemEvents.java b/src/main/java/eu/univento/lobby/listeners/ItemEvents.java new file mode 100644 index 0000000..5128e51 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/ItemEvents.java @@ -0,0 +1,103 @@ +package eu.univento.lobby.listeners; + +import java.util.HashMap; + +import eu.univento.core.Core; +import eu.univento.core.api.player.Rank; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Location; +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.ItemStack; + +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.Lobby; +import org.bukkit.util.Vector; + +/** + * some item events + * + * @author joethei + * @version 1.0 + */ +public class ItemEvents implements Listener { + + private HashMap forcefield = new HashMap<>(); + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + ItemStack item = p.getItemInHand(); + if (item.getType() == Material.NAME_TAG) { + if (p.isAllowed(Rank.Partner)) { + if (p.isNicked()) { + p.setNicked(false); + p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_OFF()); + } else { + p.setNicked(true); + p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_ON()); + } + } + } + if (item.getType() == Material.EYE_OF_ENDER) { + if (p.isAllowed(Rank.Partner)) { + if (forcefield.containsKey(p)) { + Bukkit.getScheduler().cancelTask(forcefield.get(p)); + forcefield.remove(p); + p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_OFF()); + } else { + forcefield.put(p, force(p)); + p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_ON()); + } + } + + e.setCancelled(true); + } + } + } + + private int force(CustomPlayer p) { + return Bukkit.getScheduler().scheduleSyncRepeatingTask(Lobby.getInstance(), () -> { + if (forcefield.containsKey(p)) { + playEffect(p.getLocation(), Effect.ENDER_SIGNAL, true); + + Core.getOnlinePlayers().stream().filter(players -> !p.getName().equals(players.getName()) && + p.getLocation().distance(players.getLocation()) <= 5 && + !Parkour.getPlayers().contains(players) && + !PlayerHider.getSilentlobby().contains(p)).forEach(players -> { + + int aX = p.getLocation().getBlockX(); + int aY = p.getLocation().getBlockY(); + int aZ = p.getLocation().getBlockZ(); + + int bX = p.getLocation().getBlockX(); + int bY = p.getLocation().getBlockY(); + int bZ = p.getLocation().getBlockZ(); + + int x = aX - bX; + int y = aY - bY; + int z = aZ - bZ; + + Vector v = new Vector(x, y, z).normalize(); + v.multiply(2.0D); + v.setY(1.5D); + players.setVelocity(v); + players.playEffect(p.getEyeLocation(), Effect.SMOKE, 3); + players.playSound(players.getLocation(), Sound.ENTITY_FIREWORK_BLAST, 3.0F, 3.0F); + }); + } + + }, 0L, 5L); + } + + private void playEffect(Location loc, Effect effect, boolean v) { + for (int i = 0; i <= 8; i += ((!v) && (i == 3) ? 2 : 1)) + Core.getOnlinePlayers().stream().filter(p -> p.hasEffects()).forEach(p -> p.playEffect(loc, effect, 1.0F)); + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/JoinQuit.java b/src/main/java/eu/univento/lobby/listeners/JoinQuit.java new file mode 100644 index 0000000..2f72683 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/JoinQuit.java @@ -0,0 +1,98 @@ +package eu.univento.lobby.listeners; + +import java.sql.SQLException; + +import eu.univento.core.api.*; +import eu.univento.core.api.player.Rank; +import eu.univento.lobby.utils.PetManager; +import eu.univento.lobby.utils.Scoreboards; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.utils.Inventorys; +import net.minecraft.server.v1_10_R1.EnumParticle; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +/** + * @author joethei + * @version 1.5 + */ +public class JoinQuit implements Listener { + + @EventHandler(priority = EventPriority.HIGH) + public void onJoin(PlayerJoinEvent e) throws ClassNotFoundException, SQLException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + + e.setJoinMessage(null); + + p.setMaxHealth(10.0D); + p.setHealth(10.0D); + p.setFoodLevel(20); + p.setExp(0F); + p.setLevel(0); + + if (!p.hasPlayedBefore()) { + p.teleport(Config.readLocation("Lobby.Locs.Spawn")); + } + + Inventorys invs = new Inventorys(p); + p.playParticle(p.getEyeLocation(), EnumParticle.SPELL_MOB, 2.0F, 500); + p.giveExp(p.getExperience()); + + Title.sendTitle(p, 10, 50, 10, p.getMessages().Lobby_JOIN_TITLE_1(), p.getMessages().Lobby_JOIN_TITLE_2()); + invs.setMainInventory(false); + + + if (!p.isAllowed(Rank.Supporter)) { + for (CustomPlayer players : PlayerHider.getHidden()) { + players.hidePlayer(p); + } + } + for (CustomPlayer players : PlayerHider.getSilentlobby()) { + players.hidePlayer(p); + p.hidePlayer(players); + } + + String[] text = {"§e@univentoEU"}; + Hologram holo = new Hologram(text, p.getWorld().getSpawnLocation()); + holo.showPlayer(p); + + BossBar bar = Bukkit.createBossBar("§cAchtung, frisch gestrichen", BarColor.GREEN, BarStyle.SEGMENTED_6, BarFlag.CREATE_FOG); + bar.addPlayer(p); + + Actionbar.send(p, p.getMessages().LobbyBoard_NEW() + " " + p.getMessages().LobbyBoard_NEWS()); + + Scoreboards.updateScoreboard(p); + + } + + + /** + * removes player from lists + * + * @param e PlayerQuitEvent + */ + @EventHandler + public void onQuit(PlayerQuitEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + p.getInventory().clear(); + p.getInventory().setChestplate(null); + e.setQuitMessage(null); + if (PlayerHider.getHidden().contains(p)) + PlayerHider.getHidden().remove(p); + if (PetManager.hasPet(p)) + PetManager.removePet(p); + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/Jumppads.java b/src/main/java/eu/univento/lobby/listeners/Jumppads.java new file mode 100644 index 0000000..96bdcd9 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/Jumppads.java @@ -0,0 +1,186 @@ +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.player.CustomPlayer; +import eu.univento.core.api.player.Rank; +import eu.univento.lobby.Lobby; + +/** + * fun for player + * @author joethei + * @version 1.0 + */ +public class Jumppads implements Listener{ + + /** + * contains players flying from premium lobby to spawn + */ + private ArrayList flySpawn = new ArrayList<>(); + /** + * contains players flying from spawn to premium lobby + */ + private ArrayList flyPremium = new ArrayList<>(); + + /** + * lets players jump over pads + * @param e PlayerMoveEvent + * @throws InterruptedException thread closed + */ + @EventHandler + public void onMove(PlayerMoveEvent e) throws InterruptedException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + + Block block = p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock(); + + if(p.getLocation().getBlock().getType() == Material.STONE_PLATE) { + + if(block.getType() == Material.REDSTONE_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(3D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.BEDROCK) { + Vector v = p.getLocation().getDirection().multiply(0D).setY(3D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.IRON_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(3D).setY(4D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.DIAMOND_BLOCK) { + if(p.isAllowed(Rank.Premium)) { + if(!flyPremium.contains(p)) { + Vector v = p.getLocation().getDirection().multiply(1D).setY(3D); + p.setVelocity(v); + p.setHealth(1.0); + flyPremium.add(p); + runTimer(p); + p.playEffect(p.getLocation(), Effect.BLAZE_SHOOT, 10); + p.playSound(p.getEyeLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1.0F, 1.0F); + } + } + } + + if(block.getType() == Material.OBSIDIAN) { + Vector v = p.getLocation().getDirection().multiply(4D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.WOOL) { + p.setWalkSpeed(0.2F); + + Vector v = p.getLocation().getDirection().multiply(1.5D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.LAPIS_BLOCK) { + Vector v = p.getLocation().getDirection().multiply(6D).setY(1D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + } + + if(block.getType() == Material.EMERALD_BLOCK) { + if(!flySpawn.contains(p)) { + Vector v = p.getLocation().getDirection().multiply(3.0D).setY(1.0D); + p.setVelocity(v); + flySpawn.add(p); + p.setHealth(1.0); + runTimer(p); + } + + } + } + if(block.getType() == Material.STATIONARY_WATER) { + if(flySpawn.contains(p)) { + flySpawn.remove(p); + teleport("Spawn", p); + } + if(flyPremium.contains(p)) { + flyPremium.remove(p); + teleport("PremiumHub", p); + } + } + if(block.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.ENTITY_PLAYER_SPLASH, 5.0F, 1.0F); + p.playEffect(p.getEyeLocation(), Effect.BLAZE_SHOOT, 200); + Block tempBlock = p.getLocation().add(0.0D, 5.0D, 0.0D).getBlock(); + tempBlock.setType(Material.WATER); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> tempBlock.setType(Material.AIR), 20L); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> { + b.setType(Material.SPONGE); + for(Player players : Bukkit.getOnlinePlayers()) { + players.playSound(b.getLocation(), Sound.BLOCK_PISTON_EXTEND, 5.0F, 1.0F); + players.playEffect(b.getLocation(), Effect.BOW_FIRE, 200); + } + }, 100L); + } + } + + /** + * 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); + } + } + } + + /** + * teleports player to location + * @param loc name of location + * @param p CustomPlayer + */ + private void teleport(String loc, CustomPlayer p) { + p.teleport(Config.readLocation("Lobby.Locs." + loc)); + p.playSound(p.getEyeLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 5.0F, 1.0F); + p.playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 20); + p.playEffect(p.getEyeLocation(), Effect.BLAZE_SHOOT, 20); + p.setHealth(10.0); + } + + /** + * runs cancel timer + * @param p CustomPlayer + */ + private void runTimer(CustomPlayer p) { + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> { + if(flyPremium.contains(p)) { + teleport("PremiumHub", p); + flyPremium.remove(p); + } + if(flySpawn.contains(p)) { + teleport("Spawn", p); + flySpawn.remove(p); + } + }, 20L * 10); + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/Menu.java b/src/main/java/eu/univento/lobby/listeners/Menu.java new file mode 100644 index 0000000..002ce24 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/Menu.java @@ -0,0 +1,58 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.utils.Inventorys; +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.ItemStack; + +/** + * opens menus + * @author joethei + * @version 1.0 + */ +public class Menu implements Listener{ + + /** + * opens and creates menus + * @param e PlayerInteract + */ + @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) { + ItemStack item = p.getItemInHand(); + if(!p.hasOpenInventory()) { + Inventorys invs = new Inventorys(p); + if(item.getType() == Material.WORKBENCH) { + p.setOpenInventory(true); + p.openInventory(invs.getNavigatorInventory()); + } + if(item.getType() == Material.CHEST) { + p.setOpenInventory(true); + p.openInventory(invs.getFunChestInventory()); + e.getPlayer().playSound(p.getEyeLocation(), Sound.BLOCK_CHEST_OPEN, 10.0F, 1.0F); + } + if(item.getType() == Material.SKULL_ITEM) { + p.setOpenInventory(true); + p.openInventory(invs.getProfileInventory()); + } + if(item.getType() == Material.EXP_BOTTLE) { + e.setCancelled(true); + invs.setYoutuberInventory(); + } + if(item.getType() == Material.BARRIER) { + invs.setMainInventory(true); + }if(item.getType() == Material.BLAZE_ROD) { + p.setOpenInventory(true); + p.openInventory(invs.getLobbySwitcherInventory()); + } + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/MenuEvents.java b/src/main/java/eu/univento/lobby/listeners/MenuEvents.java new file mode 100644 index 0000000..7226ee0 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/MenuEvents.java @@ -0,0 +1,297 @@ +package eu.univento.lobby.listeners; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import eu.univento.core.Core; +import eu.univento.core.api.effects.Effects; +import eu.univento.core.api.languages.Messages; +import eu.univento.lobby.utils.PetManager; +import net.minecraft.server.v1_10_R1.EnumParticle; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +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.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import eu.univento.core.api.Config; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.utils.Inventorys; + +/** + * handles teleport menus + * @author joethei + * @version 1.0 + */ +public class MenuEvents implements Listener { + + private ArrayList heartPlayers = new ArrayList<>(); + private ArrayList lavaPlayers = new ArrayList<>(); + + + /** + * clicking items + * @param e InventoryClickEvent + */ + @EventHandler + public void onClick(InventoryClickEvent e) { + if (e.getWhoClicked() instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(e.getWhoClicked().getName()); + Inventorys invs = new Inventorys(p); + Messages msgs = new Messages(p); + if(!e.getSlotType().equals(SlotType.OUTSIDE)) { + if (e.getInventory().getName().equals(invs.getNavigatorInventory().getName())) { + if (e.getCurrentItem().getType() == Material.GOLD_BLOCK) { + teleport(p, "TheBlock"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.SNOW_BALL) { + teleport(p, "FlagAttack"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.LEATHER_HELMET) { + teleport(p, "TrashGames"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.MAGMA_CREAM) { + teleport(p, "Spawn"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.EYE_OF_ENDER) { + teleport(p, "PremiumHub"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.LEATHER_BOOTS) { + teleport(p, "TempleRun"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.SLIME_BALL) { + teleport(p, "HulkFight"); + p.closeInventory(); + } + if (e.getCurrentItem().getType() == Material.FLOWER_POT_ITEM) { + p.closeInventory(); + p.connectToServer("build"); + } else { + e.setCancelled(true); + } + } + if (e.getInventory().getName().equals(invs.getProfileInventory().getName())) { + if (e.getCurrentItem().getType() == Material.COMPASS) { + p.closeInventory(); + p.openInventory(invs.getStatsInventory()); + } + if (e.getCurrentItem().getType() == Material.PUMPKIN) { + p.closeInventory(); + p.openInventory(invs.getFriendsInventory()); + } + if (e.getCurrentItem().getType() == Material.NAME_TAG) { + p.closeInventory(); + p.openInventory(invs.getSettingsInventory()); + } else { + e.setCancelled(true); + } + } + + if (e.getInventory().getName().equals(invs.getSettingsInventory().getName())) { + if(e.getSlot() == 0) { + p.setPartyRequests(!p.hasPartyRequests()); + p.closeInventory(); + p.openInventory(invs.getSettingsInventory()); + } + } + + if(e.getInventory().getName().equals(invs.getLanguagesInventory().getName())) { + if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eDeutsch")) { + p.setLanguage("DE"); + p.closeInventory(); + p.sendMessage(msgs.PREFIX() + "§7Sprache auf §eDeutsch §7geändert"); + invs.setMainInventory(true); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eEnglish")) { + p.setLanguage("EN"); + p.closeInventory(); + p.sendMessage(msgs.PREFIX() + "§7Language changed to §eenglish"); + invs.setMainInventory(true); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eitaliano")) { + p.setLanguage("IT"); + p.closeInventory(); + p.sendMessage(msgs.PREFIX() + "§7Da fehlt doch noch was"); + invs.setMainInventory(true); + } + } + + if (e.getInventory().getName().equals(invs.getFunChestInventory().getName())) { + e.setCancelled(true); + if (e.getCurrentItem().getType() == Material.RECORD_3) { + p.closeInventory(); + p.openInventory(invs.getMusicInventory()); + } + if (e.getCurrentItem().getType() == Material.ARMOR_STAND) { + p.closeInventory(); + p.openInventory(invs.getGadgetsInventory()); + } + if (e.getCurrentItem().getType() == Material.NOTE_BLOCK) { + p.closeInventory(); + p.openInventory(invs.getParticleInventory()); + } + if(e.getCurrentItem().getType() == Material.MONSTER_EGG) { + p.closeInventory(); + p.openInventory(invs.getPetsInventory()); + } + } + + if (e.getInventory().getName().equals(invs.getStatsInventory().getName())) { + e.setCancelled(true); + } + + if (e.getInventory().getName().equals(invs.getFriendsInventory().getName())) { + e.setCancelled(true); + } + if (e.getInventory().getName().equals(invs.getMusicInventory().getName())) { + e.setCancelled(true); + if (e.getCurrentItem().getType() == Material.RECORD_3) { + p.closeInventory(); + p.playSound(p.getEyeLocation(), "records.11", 100000000000.0F, 1.0F); + p.sendActionBar(msgs.Lobby_PLAYING_MUSIC_PREFIX() + ": Milky Way Stars | Janji feat. TR"); + } + } + if (e.getInventory().getName().equals(invs.getGadgetsInventory().getName())) { + e.setCancelled(true); + if (e.getCurrentItem().getType() == Material.SUGAR) { + p.closeInventory(); + if (p.getWalkSpeed() == 0.2F) { + p.setWalkSpeed(0.5F); + } else { + p.setWalkSpeed(0.2F); + } + } + if (e.getCurrentItem().getType() == Material.FEATHER) { + p.closeInventory(); + } + } + if (e.getInventory().getName().equals(invs.getParticleInventory().getName())) { + e.setCancelled(true); + if (e.getCurrentItem().getType() == Material.RED_ROSE) { + if (heartPlayers.contains(p)) { + heartPlayers.remove(p); + } else { + heartPlayers.add(p); + } + }else if(e.getCurrentItem().getType() == Material.LAVA_BUCKET) { + if(lavaPlayers.contains(p)) { + lavaPlayers.remove(p); + }else{ + lavaPlayers.add(p); + } + } + + + + }if (e.getInventory().getName().equals(invs.getPetsInventory().getName())) { + e.setCancelled(true); + if(e.getCurrentItem().getItemMeta().getDisplayName().contains(msgs.LobbyItems_PETS_PIG())) { + p.closeInventory(); + PetManager.setPet(p, EntityType.PIG); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().contains(msgs.LobbyItems_PETS_COW())) { + p.closeInventory(); + PetManager.setPet(p, EntityType.COW); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().contains(msgs.LobbyItems_PETS_CHICKEN())) { + p.closeInventory(); + PetManager.setPet(p, EntityType.CHICKEN); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().contains(msgs.LobbyItems_PETS_RABBIT())) { + p.closeInventory(); + PetManager.setPet(p, EntityType.RABBIT); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().contains(msgs.LobbyItems_PETS_MUSHROM_COW())) { + p.closeInventory(); + PetManager.setPet(p, EntityType.MUSHROOM_COW); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().equals("Horse")) { + p.closeInventory(); + PetManager.setPet(p, EntityType.HORSE); + Horse horse = (Horse) PetManager.getPet(p); + horse.setJumpStrength(20.0D); + horse.setVariant(Horse.Variant.UNDEAD_HORSE); + horse.setTamed(true); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getItemMeta().getDisplayName().equals("PolarBear")) { + p.closeInventory(); + PetManager.setPet(p, EntityType.POLAR_BEAR); + PolarBear polarBear = (PolarBear) PetManager.getPet(p); + polarBear.setAI(false); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_ADD()); + } + if(e.getCurrentItem().getType() == Material.BARRIER) { + p.closeInventory(); + PetManager.removePet(p); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_REMOVE()); + } + }else { + e.setCancelled(true); + } + } + } + } + + /** + * plays effects on player move + * @param e PlayerMoveEvent + */ + @EventHandler + public void onMove(PlayerMoveEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + List players = Core.getOnlinePlayers().stream().map(CustomPlayer::getPLAYER).collect(Collectors.toList()); + + if(heartPlayers.contains(p)) + Effects.playEffect(p.getLocation(), EnumParticle.HEART, 5, 5); + if(lavaPlayers.contains(p)) + Effects.playEffect(p.getLocation(), EnumParticle.DRIP_LAVA, 5, 5); + } + + /** + * teleports player with effects to location + * @param p CustomPlayer + * @param location String + */ + private void teleport(CustomPlayer p, String location) { + Vector v = p.getLocation().getDirection().multiply(0D).setY(2D); + p.setVelocity(v); + p.playSound(p.getEyeLocation(), Sound.ENTITY_GENERIC_EXPLODE, 5.0F, 1.0F); + p.playEffect(p.getEyeLocation(), Effect.CHORUS_FLOWER_DEATH, 20); + Location loc = Config.readLocation("Lobby.Locs." + location); + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), () -> { + for (Player players : Bukkit.getOnlinePlayers()) { + players.playSound(p.getEyeLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1.0F, 1.0F); + players.playEffect(p.getEyeLocation(), Effect.DRAGON_BREATH, 20); + p.teleport(loc); + players.playSound(p.getEyeLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1.0F, 1.0F); + players.playEffect(p.getEyeLocation(), Effect.SMOKE, 20); + } + + }, 40L); + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/Parkour.java b/src/main/java/eu/univento/lobby/listeners/Parkour.java new file mode 100644 index 0000000..e1d4595 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/Parkour.java @@ -0,0 +1,91 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.Core; +import eu.univento.core.api.events.MoveEventFilter; +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.utils.PetManager; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * @author joethei + * @version 0.1 + */ +public class Parkour implements Listener{ + + static ArrayList players = new ArrayList<>(); + public static ArrayList getPlayers() { + return players; + } + + @EventHandler + public void onBlockMove(MoveEventFilter.PlayerBlockMoveEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + Messages msgs = new Messages(p); + Block block = p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock(); + if (block.getType() == Material.STAINED_CLAY) { + if (players.contains(p)) { + spawnRandomBlock(block.getLocation()); + }else if(p.getLocation().getBlock().getType() == Material.IRON_PLATE) { + players.add(p); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PARKOUR_ON()); + spawnRandomBlock(block.getLocation()); + p.setWalkSpeed(0.2F); + if(PetManager.hasPet(p)) PetManager.removePet(p); + } + } else { + if (block.getType() != Material.AIR && players.contains(p) && block.getType() != Material.IRON_PLATE) { + players.remove(p); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PARKOUR_OFF()); + } + } + } + + void spawnRandomBlock(Location loc) { + List locations = circle(loc, 3, 1, false, false, 1); + Random r = new Random(); + Block block = locations.get(r.nextInt(locations.size())).getBlock(); + if(block.getType() == Material.AIR) { + Random cr = new Random(); + int color = cr.nextInt(15); + block.setType(Material.STAINED_CLAY); + block.setData((byte) color); + Bukkit.getScheduler().scheduleSyncDelayedTask(Lobby.getInstance(), () -> { + block.setType(Material.AIR); + for(CustomPlayer players : Core.getOnlinePlayers()) { + players.playSound(block.getLocation(), Sound.BLOCK_NOTE_BASS, 1.0F, 1.0F); + } + }, 20L * 10); + } + else{ + spawnRandomBlock(loc); + } + } + + List circle (Location loc, Integer r, Integer h, Boolean hollow, Boolean sphere, int plus_y) { + List circleblocks = new ArrayList<>(); + int cx = loc.getBlockX(); + int cy = loc.getBlockY(); + int cz = loc.getBlockZ(); + for (int x = cx - r; x <= cx +r; x++) + for (int z = cz - r; z <= cz +r; z++) + for (int y = (sphere ? cy - r : cy); y < (sphere ? cy + r : cy + h); y++) { + double dist = (cx - x) * (cx - x) + (cz - z) * (cz - z) + (sphere ? (cy - y) * (cy - y) : 0); + if (dist < r*r && !(hollow && dist < (r-1)*(r-1))) { + Location l = new Location(loc.getWorld(), x, y + plus_y, z); + circleblocks.add(l); + } + } + + return circleblocks; + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/PetInteract.java b/src/main/java/eu/univento/lobby/listeners/PetInteract.java new file mode 100644 index 0000000..dd4000b --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/PetInteract.java @@ -0,0 +1,126 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.gui.AnvilGUI; +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.lobby.utils.PetManager; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Ageable; +import org.bukkit.entity.Entity; +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.player.PlayerInteractEntityEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +/** + * @author joethei + * @version 0.1 + */ +public class PetInteract implements Listener { + + @EventHandler + public void onEntityInteract(PlayerInteractEntityEvent e) { + e.setCancelled(true); + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + Entity entity = e.getRightClicked(); + if (PetManager.getPet(p) == entity) { + p.openInventory(getInventory(p)); + } + } + + Inventory getInventory(CustomPlayer p) { + Messages msgs = new Messages(p); + Inventory inv = Bukkit.createInventory(p, 9, msgs.LobbyItems_YOUR_PET()); + + ItemStack name = new ItemStack(Material.NAME_TAG); + ItemMeta nameMeta = name.getItemMeta(); + nameMeta.setDisplayName(msgs.LobbyItems_PETS_NAME()); + name.setItemMeta(nameMeta); + + ItemStack baby = new ItemStack(Material.SUGAR); + ItemMeta babyMeta = baby.getItemMeta(); + babyMeta.setDisplayName(msgs.LobbyItems_PETS_AGE()); + baby.setItemMeta(babyMeta); + + ItemStack mount = new ItemStack(Material.SADDLE); + ItemMeta mountMeta = mount.getItemMeta(); + mountMeta.setDisplayName(msgs.LobbyItems_PETS_RIDE()); + mount.setItemMeta(mountMeta); + + ItemStack delete = new ItemStack(Material.BARRIER); + ItemMeta deleteMeta = delete.getItemMeta(); + deleteMeta.setDisplayName(msgs.LobbyItems_PETS_REMOVE()); + delete.setItemMeta(deleteMeta); + + inv.setItem(0, name); + inv.setItem(1, baby); + inv.setItem(2, mount); + inv.setItem(8, delete); + + return inv; + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (e.getWhoClicked() instanceof Player) { + CustomPlayer p = CustomPlayer.getPlayer(e.getWhoClicked().getName()); + Messages msgs = new Messages(p); + if (e.getInventory().getName().equals(getInventory(p).getName())) { + if (e.getCurrentItem().getType() == Material.NAME_TAG) { + assert p != null; + p.closeInventory(); + AnvilGUI gui = new AnvilGUI(p, event -> { + if(event.getSlot() == AnvilGUI.AnvilSlot.OUTPUT) { + event.setWillClose(true); + event.setWillDestroy(true); + PetManager.setName(p, p.getColor() + event.getName()); + p.refreshExperience(); + }else{ + event.setWillDestroy(true); + event.setWillClose(true); + } + }); + + ItemStack name = new ItemStack(Material.NAME_TAG); + ItemMeta nameMeta = name.getItemMeta(); + nameMeta.setDisplayName(PetManager.getName(p)); + name.setItemMeta(nameMeta); + + gui.setSlot(AnvilGUI.AnvilSlot.INPUT_LEFT, name); + + gui.open(); + + } + if(e.getCurrentItem().getType() == Material.SUGAR) { + p.closeInventory(); + Entity pet = PetManager.getPet(p); + Ageable age = (Ageable) pet; + if(age.isAdult()) { + age.setBaby(); + }else { + age.setAdult(); + } + } + if(e.getCurrentItem().getType() == Material.SADDLE) { + p.closeInventory(); + Entity pet = PetManager.getPet(p); + if(pet.getPassenger() != null) { + pet.setPassenger(null); + }else { + pet.setPassenger(p); + } + } + if (e.getCurrentItem().getType() == Material.BARRIER) { + p.closeInventory(); + PetManager.removePet(p); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PET_REMOVE()); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/PlayerHider.java b/src/main/java/eu/univento/lobby/listeners/PlayerHider.java new file mode 100644 index 0000000..0c4ae76 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/PlayerHider.java @@ -0,0 +1,132 @@ +package eu.univento.lobby.listeners; + +import java.util.ArrayList; + +import eu.univento.lobby.utils.Inventorys; +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.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.core.api.player.Rank; + +/** + * lets players show/hide other players + * @author joethei + * @version 1.0 + */ +public class PlayerHider implements Listener{ + + + private static ArrayList hidden = new ArrayList<>(); + public static ArrayList getHidden() { + return hidden; + } + + private static ArrayList silentlobby = new ArrayList<>(); + public static ArrayList getSilentlobby() { + return silentlobby; + } + /** + * item to hide + * @return ItemStack + */ + private ItemStack getHide(CustomPlayer p) { + Messages msgs = new Messages(p); + ItemStack hide = new ItemStack(Material.GLOWSTONE_DUST); + ItemMeta hideMeta = hide.getItemMeta(); + hideMeta.setDisplayName(msgs.LobbyItems_PLAYER_HIDER_ON()); + hide.setItemMeta(hideMeta); + + return hide; + } + + /** + * item to show + * @return ItemStack + */ + private ItemStack getShow(CustomPlayer p) { + Messages msgs = new Messages(p); + ItemStack show = new ItemStack(Material.SUGAR); + ItemMeta showMeta = show.getItemMeta(); + showMeta.setDisplayName(msgs.LobbyItems_PLAYER_HIDER_OFF()); + show.setItemMeta(showMeta); + + return show; + } + + /** + * player interacts with item + * @param e PlayerInteract + * @throws InterruptedException threads closed + */ + @EventHandler + public void onInteract(PlayerInteractEvent e) throws InterruptedException { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName()); + Messages msgs = new Messages(p); + if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + ItemStack item = p.getItemInHand(); + if(item.getType() == Material.SUGAR) { + hidden.remove(p); + + Bukkit.getOnlinePlayers().stream().filter(players -> !silentlobby.contains(players)).forEach(p::showPlayer); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PLAYERS_SHOW()); + + p.getInventory().remove(getShow(p)); + p.getInventory().addItem(getHide(p)); + + p.playSound(p.getEyeLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1.0F, 1.0F); + } + if(item.getType() == Material.GLOWSTONE_DUST) { + hidden.add(p); + + for(Player players : Bukkit.getOnlinePlayers()) { + CustomPlayer player = CustomPlayer.getPlayer(players.getName()); + if(!player.isAllowed(Rank.Supporter)) { + p.hidePlayer(players); + } + } + p.sendMessage(msgs.PREFIX() + msgs.Lobby_PLAYERS_HIDE()); + + p.getInventory().remove(getHide(p)); + p.getInventory().addItem(getShow(p)); + + p.playSound(p.getEyeLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1.0F, 1.0F); + + } + if(item.getType() == Material.TNT) { + if(p.isAllowed(Rank.Partner)) { + if(silentlobby.contains(p)) { + silentlobby.remove(p); + Inventorys invs = new Inventorys(p); + p.getInventory().clear(); + invs.setMainInventory(true); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_SILENT_LOBBY_OFF()); + for(Player players : Bukkit.getOnlinePlayers()) { + p.showPlayer(players); + if(!hidden.contains(players)) { + players.showPlayer(p); + } + } + }else { + silentlobby.add(p); + p.sendMessage(msgs.PREFIX() + msgs.Lobby_SILENT_LOBBY_ON()); + for(Player players : Bukkit.getOnlinePlayers()) { + p.hidePlayer(players); + players.hidePlayer(p); + } + } + } + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/listeners/PlayerInteract.java b/src/main/java/eu/univento/lobby/listeners/PlayerInteract.java new file mode 100644 index 0000000..4dd3e91 --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/PlayerInteract.java @@ -0,0 +1,70 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +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.player.PlayerInteractEntityEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +/** + * @author joethei + * @version 0.1 + */ +public class PlayerInteract implements Listener{ + + @EventHandler + public void onInteractPlayer(PlayerInteractEntityEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + Entity entity = e.getRightClicked(); + if(entity instanceof Player) { + CustomPlayer clicked = CustomPlayer.getPlayer(e.getRightClicked().getName()); + openInventory(p, clicked); + } + } + + private void openInventory(CustomPlayer p, CustomPlayer clicked) { + Inventory inv = Bukkit.createInventory(p, 9, clicked.getColor() + clicked.getName() + "'s " + p.getMessages().LobbyItems_PLAYER_MENU()); + + ItemStack friend = new ItemStack(Material.PUMPKIN); + ItemMeta friendMeta = friend.getItemMeta(); + friendMeta.setDisplayName(p.getMessages().LobbyItems_PLAYER_FRIEND()); + friend.setItemMeta(friendMeta); + + ItemStack party = new ItemStack(Material.FIREWORK); + ItemMeta partyMeta = party.getItemMeta(); + partyMeta.setDisplayName(p.getMessages().LobbyItems_PLAYER_PARTY()); + party.setItemMeta(partyMeta); + + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(clicked.getName()); + meta.setDisplayName(p.getMessages().LobbyItems_PLAYER_PROFILE()); + skull.setItemMeta(meta); + + ItemStack stats = new ItemStack(Material.GOLD_SWORD); + ItemMeta statsMeta = stats.getItemMeta(); + statsMeta.setDisplayName(p.getMessages().LobbyItems_PLAYER_STATS()); + stats.setItemMeta(statsMeta); + + inv.setItem(0, friend); + inv.setItem(1, party); + inv.setItem(4, skull); + inv.setItem(5, stats); + + p.openInventory(inv); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getWhoClicked().getName()); + //TODO: add functionality here + } +} diff --git a/src/main/java/eu/univento/lobby/listeners/StatusSigns.java b/src/main/java/eu/univento/lobby/listeners/StatusSigns.java new file mode 100644 index 0000000..7aa27be --- /dev/null +++ b/src/main/java/eu/univento/lobby/listeners/StatusSigns.java @@ -0,0 +1,45 @@ +package eu.univento.lobby.listeners; + +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.core.api.player.Rank; +import eu.univento.lobby.utils.StatusSign; +import eu.univento.lobby.utils.StatusSignManager; +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.block.SignChangeEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +/** + * @author joethei + * @version 0.1 + */ +public class StatusSigns implements Listener{ + + @EventHandler + public void onSignChange(SignChangeEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + if(e.getLine(0).equals("[join]") && p.isAllowed(Rank.Developer)) { + StatusSignManager.addSign(e.getLine(1), e.getBlock().getLocation()); + Messages msgs = new Messages(p); + p.sendMessage(msgs.Lobby_SET_SIGN()); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { + Block block = e.getClickedBlock(); + if(block.getType() == Material.WALL_SIGN) { + if(StatusSignManager.isStatusSign(block.getLocation())) { + StatusSign sign = StatusSignManager.getSign(block.getLocation()); + p.connectToServer(sign.getServerName()); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/CustomMapRenderer.java b/src/main/java/eu/univento/lobby/utils/CustomMapRenderer.java new file mode 100644 index 0000000..364c102 --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/CustomMapRenderer.java @@ -0,0 +1,25 @@ +package eu.univento.lobby.utils; + +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.entity.Player; +import org.bukkit.map.MapCanvas; +import org.bukkit.map.MapRenderer; +import org.bukkit.map.MapView; +import org.bukkit.map.MinecraftFont; + +/** + * @author joethei + * @version 0.1 + * created on 05.07.2016 + */ +public class CustomMapRenderer extends MapRenderer{ + + @Override + public void render(MapView mapView, MapCanvas mapCanvas, Player player) { + CustomPlayer p = CustomPlayer.getPlayer(player); + mapCanvas.drawText(1, 10, MinecraftFont.Font, "Hallo " + p.getName()); + mapCanvas.drawText(1, 20, MinecraftFont.Font, "Du bist ein " + p.getRank().name()); + mapCanvas.drawText(1, 30, MinecraftFont.Font, p.getFirstLogin().toString()); + mapCanvas.drawText(1, 40, MinecraftFont.Font, "Sprache " + p.getLanguage()); + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/Inventorys.java b/src/main/java/eu/univento/lobby/utils/Inventorys.java new file mode 100644 index 0000000..e8508b1 --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/Inventorys.java @@ -0,0 +1,599 @@ +package eu.univento.lobby.utils; + +import java.util.ArrayList; +import java.util.List; + +import eu.univento.core.api.server.ServerInfo; +import org.bukkit.Bukkit; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import eu.univento.core.api.player.CustomPlayer; +import eu.univento.core.api.player.Rank; +import eu.univento.lobby.Lobby; +import eu.univento.lobby.listeners.FoundItems; +import org.bukkit.material.Dye; + +/** + * opens inventorys for players + * + * @author joethei + * @version 1.0 + */ +public class Inventorys { + + private CustomPlayer player; + private ItemStack empty = new ItemStack(Material.AIR); + + + public Inventorys(CustomPlayer player) { + this.player = player; + } + + public void setMainInventory(boolean forcetime) { + Inventory inv = player.getInventory(); + + ItemStack nav = new ItemStack(Material.WORKBENCH); + ItemMeta navMeta = nav.getItemMeta(); + navMeta.setDisplayName(player.getMessage("Lobby.Item.Navigator")); + nav.setItemMeta(navMeta); + + ItemStack lobby = new ItemStack(Material.BLAZE_POWDER); + ItemMeta lobbyMeta = lobby.getItemMeta(); + lobbyMeta.setDisplayName(player.getMessage("Lobby.Item.LobbySwitcher")); + lobby.setItemMeta(lobbyMeta); + + ItemStack adventure = new ItemStack(Material.GLOWSTONE_DUST); + ItemMeta adventureMeta = adventure.getItemMeta(); + adventureMeta.setDisplayName(player.getMessage("Lobby.Item.Adventure")); + adventure.setItemMeta(adventureMeta); + + ItemStack fun = new ItemStack(Material.CHEST); + ItemMeta funMeta = fun.getItemMeta(); + funMeta.setDisplayName(player.getMessage("Lobby.Item.FunChest")); + fun.setItemMeta(funMeta); + + ItemStack youtube = new ItemStack(Material.EXP_BOTTLE); + ItemMeta youtubeMeta = youtube.getItemMeta(); + youtubeMeta.setDisplayName(player.getMessage("Lobby.Item.Youtuber")); + youtube.setItemMeta(youtubeMeta); + + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(player.getName()); + meta.setDisplayName(player.getMessage("Lobby.Item.Profile")); + skull.setItemMeta(meta); + + inv.setItem(2, empty); + inv.setItem(3, empty); + inv.setItem(4, empty); + inv.setItem(6, empty); + timeItem(inv, 0, nav, Sound.ENTITY_CHICKEN_EGG, 20L, false, forcetime); + timeItem(inv, 8, skull, Sound.ENTITY_CHICKEN_EGG, 40L, false, forcetime); + timeItem(inv, 1, lobby, Sound.ENTITY_CHICKEN_EGG, 60L, false, forcetime); + timeItem(inv, 7, fun, Sound.ENTITY_CHICKEN_EGG, 80L, false, forcetime); + if (player.isAllowed(Rank.Partner)) { + timeItem(inv, 5, youtube, Sound.ENTITY_CHICKEN_EGG, 120L, false, forcetime); + timeItem(inv, 3, adventure, Sound.ENTITY_CHICKEN_DEATH, 140L, false, forcetime); + } else { + timeItem(inv, 5, adventure, Sound.ENTITY_CHICKEN_EGG, 120L, false, forcetime); + } + + } + + /** + * gets inventory for navigation + * + * @return Inventory + */ + public Inventory getNavigatorInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_NAVIGATOR()); + + ItemStack spawn = new ItemStack(Material.FIREWORK_CHARGE); + ItemMeta spawnMeta = spawn.getItemMeta(); + spawnMeta.setDisplayName(player.getMessage("Lobby.Menu.Nav.Spawn")); + spawnMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + spawn.setItemMeta(spawnMeta); + + ItemStack strive = new ItemStack(Material.WOOL, 1, (byte) 11); + ItemMeta striveMeta = strive.getItemMeta(); + striveMeta.setDisplayName(player.getMessage("Lobby.Menu.Nav.Strive")); + strive.setItemMeta(striveMeta); + + ItemStack hustle = new ItemStack(Material.CHAINMAIL_BOOTS); + ItemMeta hustleMeta = hustle.getItemMeta(); + hustleMeta.setDisplayName(player.getMessage("Lobby.Menu.Nav.Hustle")); + hustleMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + hustle.setItemMeta(hustleMeta); + + + ItemStack build = new ItemStack(Material.FLOWER_POT_ITEM); + ItemMeta buildMeta = build.getItemMeta(); + buildMeta.setDisplayName(player.getMessage("Lobby.Menu.Nav.Build")); + ArrayList buildLore = new ArrayList<>(); + ServerInfo buildInfo = new ServerInfo("build"); + buildLore.add(buildInfo.getOnlinePlayers() + player.getMessages().LobbyItems_PLAYERS_ONLINE()); + buildMeta.setLore(buildLore); + build.setItemMeta(buildMeta); + + inv.setItem(21, hustle); + inv.setItem(23, strive); + inv.setItem(31, spawn); + if (player.isAllowed(Rank.Supporter)) inv.setItem(26, build); + + return inv; + } + + public Inventory getLobbySwitcherInventory() { + Inventory inv = Bukkit.createInventory(player, 18, "Lobbys"); + + for (int i = 1; i <= 19; i++) { + ServerInfo info = new ServerInfo("Lobby" + i); + Material material; + if (!info.isOnline()) material = Material.BARRIER; + if (info.getOnlinePlayers() >= 50) material = Material.CHEST; + if (info.getOnlinePlayers() < 50) material = Material.ANVIL; + else material = Material.GRASS; + + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("Lobby" + i); + ArrayList lore = new ArrayList<>(); + lore.add(info.getOnlinePlayers() + " | " + info.getMaxPlayers()); + meta.setLore(lore); + item.setItemMeta(meta); + + inv.addItem(item); + } + + return inv; + } + + public void setYoutuberInventory() { + Inventory inv = player.getInventory(); + + String nickState; + if(player.isNicked()) nickState = "on"; else nickState = "off"; + + ItemStack nick = new ItemStack(Material.NAME_TAG); + ItemMeta nickMeta = nick.getItemMeta(); + nickMeta.setDisplayName(player.getMessage("Lobby.Item.YT.Nick." + nickState)); + nick.setItemMeta(nickMeta); + + ItemStack silent = new ItemStack(Material.TNT); + ItemMeta silentMeta = silent.getItemMeta(); + silentMeta.setDisplayName(player.getMessage("Lobby.Item.YT.SilentLobby")); + silent.setItemMeta(silentMeta); + + ItemStack force = new ItemStack(Material.EYE_OF_ENDER); + ItemMeta forceMeta = force.getItemMeta(); + forceMeta.setDisplayName(player.getMessage("Lobby.Item.YT.Forcefield")); + force.setItemMeta(forceMeta); + + ItemStack extras = new ItemStack(Material.MILK_BUCKET); + ItemMeta extrasMeta = extras.getItemMeta(); + extrasMeta.setDisplayName(player.getMessage("Lobby.Item.YT.Extras")); + extras.setItemMeta(extrasMeta); + + Dye dye = new Dye(); + dye.setColor(DyeColor.RED); + ItemStack back = dye.toItemStack(); + ItemMeta backMeta = back.getItemMeta(); + backMeta.setDisplayName(player.getMessage("Lobby.Item.YT.Back")); + back.setItemMeta(backMeta); + + inv.setItem(0, force); + inv.setItem(1, empty); + inv.setItem(2, nick); + inv.setItem(3, empty); + inv.setItem(4, silent); + inv.setItem(5, empty); + inv.setItem(6, extras); + inv.setItem(7, empty); + inv.setItem(8, back); + } + + /** + * gets inventory for funchest + * + * @return Inventory + */ + public Inventory getFunChestInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_FUN_CHEST()); + + ItemStack music = new ItemStack(Material.RECORD_3); + ItemMeta musicMeta = music.getItemMeta(); + musicMeta.setLore(null); + musicMeta.setDisplayName(player.getMessages().LobbyItems_MUSIC()); + music.setItemMeta(musicMeta); + + ItemStack gadgets = new ItemStack(Material.ARMOR_STAND); + ItemMeta gadgetsMeta = gadgets.getItemMeta(); + gadgetsMeta.setDisplayName(player.getMessages().LobbyItems_GADGETS()); + gadgets.setItemMeta(gadgetsMeta); + + ItemStack particle = new ItemStack(Material.NOTE_BLOCK); + ItemMeta particleMeta = particle.getItemMeta(); + particleMeta.setDisplayName(player.getMessages().LobbyItems_PARTICLE()); + particle.setItemMeta(particleMeta); + + ItemStack pets = new ItemStack(Material.MONSTER_EGG); + ItemMeta petsMeta = pets.getItemMeta(); + petsMeta.setDisplayName(player.getMessages().LobbyItems_PETS()); + pets.setItemMeta(petsMeta); + + inv.setItem(11, music); + inv.setItem(15, gadgets); + inv.setItem(29, particle); + inv.setItem(33, pets); + + return inv; + } + + /** + * gets inventory for music + * + * @return Inventory + */ + public Inventory getMusicInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_MUSIC()); + + + ItemStack music_3 = new ItemStack(Material.RECORD_3); + ItemMeta music_3Meta = music_3.getItemMeta(); + List music_3Lore = new ArrayList<>(); + music_3Lore.add("§6Jetzt abspielen"); + music_3Meta.setDisplayName("§5Milky Way Stars | Janji feat. TR"); + music_3Meta.setLore(music_3Lore); + music_3.setItemMeta(music_3Meta); + + + if (FoundItems.hasFound("music_3", player)) inv.setItem(2, music_3); + + return inv; + } + + /** + * gets inventory for gadgets + * + * @return Inventory + */ + public Inventory getGadgetsInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_GADGETS()); + + ItemStack sugar = new ItemStack(Material.SUGAR); + ItemMeta sugarMeta = sugar.getItemMeta(); + sugarMeta.setDisplayName("§6Einen Teelöffel Zucker"); + sugar.setItemMeta(sugarMeta); + + ItemStack feather = new ItemStack(Material.FEATHER); + ItemMeta featherMeta = feather.getItemMeta(); + featherMeta.setDisplayName("§6Federleicht"); + feather.setItemMeta(featherMeta); + + if (FoundItems.hasFound("sugar", player)) inv.setItem(0, sugar); + if (FoundItems.hasFound("feather", player)) inv.setItem(1, feather); + + return inv; + } + + /** + * gets inventory for particle effects + * + * @return Inventory + */ + public Inventory getParticleInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_PARTICLE()); + + ItemStack hearts = new ItemStack(Material.RED_ROSE); + ItemMeta heartsMeta = hearts.getItemMeta(); + heartsMeta.setDisplayName("§6Herzen"); + hearts.setItemMeta(heartsMeta); + + ItemStack lava = new ItemStack(Material.LAVA_BUCKET); + ItemMeta lavaMeta = lava.getItemMeta(); + lavaMeta.setDisplayName("§6Lava"); + lava.setItemMeta(lavaMeta); + + if (FoundItems.hasFound("hearts", player)) inv.setItem(0, hearts); + //if(FoundItems.hasFound("lava", player)) inv.setItem(1, lava); + + return inv; + } + + public Inventory getPetsInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_PETS()); + + ItemStack pig = new ItemStack(Material.MONSTER_EGG, 1, (short) 90); + ItemMeta pigMeta = pig.getItemMeta(); + pigMeta.setDisplayName(player.getMessages().LobbyItems_PETS_PIG()); + pig.setItemMeta(pigMeta); + + ItemStack cow = new ItemStack(Material.MONSTER_EGG, 1, (short) 92); + ItemMeta cowMeta = cow.getItemMeta(); + cowMeta.setDisplayName(player.getMessages().LobbyItems_PETS_COW()); + cow.setItemMeta(cowMeta); + + ItemStack chicken = new ItemStack(Material.MONSTER_EGG, 1, (short) 93); + ItemMeta chickenMeta = chicken.getItemMeta(); + chickenMeta.setDisplayName(player.getMessages().LobbyItems_PETS_CHICKEN()); + chicken.setItemMeta(chickenMeta); + + ItemStack rabbit = new ItemStack(Material.MONSTER_EGG, 1, (short) 101); + ItemMeta rabbitMeta = rabbit.getItemMeta(); + rabbitMeta.setDisplayName(player.getMessages().LobbyItems_PETS_RABBIT()); + rabbit.setItemMeta(rabbitMeta); + + ItemStack mushroom = new ItemStack(Material.MONSTER_EGG, 1, (short) 96); + ItemMeta mushroomMeta = mushroom.getItemMeta(); + mushroomMeta.setDisplayName(player.getMessages().LobbyItems_PETS_MUSHROM_COW()); + mushroom.setItemMeta(mushroomMeta); + + ItemStack horse = new ItemStack(Material.MONSTER_EGG, 1, (short) 101); + ItemMeta horseMeta = horse.getItemMeta(); + horseMeta.setDisplayName("Horse"); + horse.setItemMeta(horseMeta); + + ItemStack polar = new ItemStack(Material.MONSTER_EGG, 1, (short) 101); + ItemMeta polarMeta = polar.getItemMeta(); + polarMeta.setDisplayName("PolarBear"); + polar.setItemMeta(polarMeta); + + ItemStack delete = new ItemStack(Material.BARRIER); + ItemMeta deleteMeta = delete.getItemMeta(); + deleteMeta.setDisplayName(player.getMessages().LobbyItems_PETS_REMOVE()); + delete.setItemMeta(deleteMeta); + + inv.setItem(0, pig); + inv.setItem(1, cow); + inv.setItem(2, chicken); + inv.setItem(3, rabbit); + inv.setItem(4, mushroom); + inv.setItem(5, horse); + inv.setItem(6, polar); + inv.setItem(44, delete); + + return inv; + } + + /** + * gets inventory for profile + * + * @return Inventory + */ + public Inventory getProfileInventory() { + Inventory inv = Bukkit.createInventory(player, 9, player.getMessages().LobbyItems_PROFILE()); + + ItemStack stats = new ItemStack(Material.COMPASS); + ItemMeta statsMeta = stats.getItemMeta(); + statsMeta.setDisplayName(player.getMessages().LobbyItems_STATS()); + stats.setItemMeta(statsMeta); + + ItemStack quests = new ItemStack(Material.PRISMARINE_SHARD); + + ItemStack secrets = new ItemStack(Material.CHEST); + + ItemStack friends = new ItemStack(Material.PUMPKIN); + ItemMeta friendsMeta = friends.getItemMeta(); + friendsMeta.setDisplayName(player.getMessages().LobbyItems_FRIENDS()); + friends.setItemMeta(friendsMeta); + + ItemStack settings = new ItemStack(Material.NAME_TAG); + ItemMeta settingsMeta = settings.getItemMeta(); + settingsMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS()); + settings.setItemMeta(settingsMeta); + + inv.setItem(0, stats); + inv.setItem(1, friends); + inv.setItem(2, quests); + inv.setItem(3, secrets); + inv.setItem(8, settings); + + return inv; + } + + /** + * gets inventory for settings + * + * @return Inventory + */ + public Inventory getSettingsInventory() { + Inventory inv = Bukkit.createInventory(player, 18, player.getMessages().LobbyItems_SETTINGS()); + + ArrayList on = new ArrayList<>(); + on.add(player.getMessages().LobbyItems_SETTINGS_ON()); + + ArrayList off = new ArrayList<>(); + off.add(player.getMessages().LobbyItems_SETTINGS_OFF()); + + ItemStack fastMenu = new ItemStack(Material.ANVIL); + ItemMeta fastMenuMeta = fastMenu.getItemMeta(); + fastMenuMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_FASTMENU()); + if (player.hasInventoryAnimation()) fastMenuMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasInventoryAnimation()) fastMenuMeta.setLore(on); + else fastMenuMeta.setLore(off); + fastMenu.setItemMeta(fastMenuMeta); + + ItemStack teleport = new ItemStack(Material.ENDER_PEARL); + ItemMeta teleportMeta = teleport.getItemMeta(); + teleportMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_SERVER_TELEPORT()); + if (player.hasTeleportAnimation()) teleportMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasTeleportAnimation()) teleportMeta.setLore(on); + else fastMenuMeta.setLore(off); + teleport.setItemMeta(teleportMeta); + + ItemStack requestsParty = new ItemStack(Material.FIREWORK); + ItemMeta requestsPartyMeta = requestsParty.getItemMeta(); + requestsPartyMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_PARTY_REQUESTS()); + if (player.hasPartyRequests()) requestsPartyMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasPartyRequests()) requestsPartyMeta.setLore(on); + else requestsPartyMeta.setLore(off); + requestsParty.setItemMeta(requestsPartyMeta); + + ItemStack requestsFriends = new ItemStack(Material.PUMPKIN); + ItemMeta requestsFriendsMeta = requestsFriends.getItemMeta(); + requestsFriendsMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_FRIEND_REQUESTS()); + if (player.hasFriendRequests()) requestsFriendsMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasFriendRequests()) requestsFriendsMeta.setLore(on); + else requestsFriendsMeta.setLore(off); + requestsFriends.setItemMeta(requestsFriendsMeta); + + ItemStack friendJump = new ItemStack(Material.ELYTRA); + ItemMeta friendJumpMeta = friendJump.getItemMeta(); + friendJumpMeta.setDisplayName("Freunde springen nicht gerne"); + if (player.hasFriendJump()) friendJumpMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasFriendJump()) friendJumpMeta.setLore(on); + else friendJumpMeta.setLore(off); + friendJump.setItemMeta(friendJumpMeta); + + ItemStack chat = new ItemStack(Material.SIGN); + ItemMeta chatMeta = chat.getItemMeta(); + chatMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_CHATSOUNDS()); + if (player.hasChatSounds()) chatMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasChatSounds()) chatMeta.setLore(on); + else chatMeta.setLore(off); + chat.setItemMeta(chatMeta); + + ItemStack effects = new ItemStack(Material.BLAZE_POWDER); + ItemMeta effectsMeta = effects.getItemMeta(); + effectsMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_EFFECTS()); + if (player.hasEffects()) effectsMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasEffects()) effectsMeta.setLore(on); + else effectsMeta.setLore(off); + effects.setItemMeta(effectsMeta); + + ItemStack storyMode = new ItemStack(Material.BOOK_AND_QUILL); + ItemMeta storyModeMeta = storyMode.getItemMeta(); + storyModeMeta.setDisplayName("Geschichtsmodus ist auch noch da"); + if (player.hasStoryMode()) storyModeMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + if (player.hasStoryMode()) storyModeMeta.setLore(on); + else storyModeMeta.setLore(off); + storyMode.setItemMeta(storyModeMeta); + + ItemStack languages = new ItemStack(Material.BOOK); + ItemMeta languagesMeta = languages.getItemMeta(); + languagesMeta.setDisplayName(player.getMessages().LobbyItems_SETTINGS_LANGUAGES()); + languages.setItemMeta(languagesMeta); + + + inv.setItem(0, fastMenu); + inv.setItem(1, teleport); + inv.setItem(2, requestsParty); + inv.setItem(3, requestsFriends); + inv.setItem(4, friendJump); + inv.setItem(5, chat); + inv.setItem(6, effects); + inv.setItem(7, storyMode); + inv.setItem(17, languages); + + return inv; + } + + public Inventory getLanguagesInventory() { + Inventory inv = Bukkit.createInventory(player, 9, player.getMessages().LobbyItems_SETTINGS_LANGUAGES()); + + ItemStack de = new ItemStack(Material.PAPER); + ItemMeta deMeta = de.getItemMeta(); + deMeta.setDisplayName("§eDeutsch"); + if (player.getLanguage().equals("DE")) deMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + de.setItemMeta(deMeta); + + ItemStack en = new ItemStack(Material.PAPER); + ItemMeta enMeta = en.getItemMeta(); + enMeta.setDisplayName("§eEnglish"); + if (player.getLanguage().equals("EN")) enMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + en.setItemMeta(enMeta); + + ItemStack it = new ItemStack(Material.PAPER); + ItemMeta itMeta = it.getItemMeta(); + itMeta.setDisplayName("§eitaliano"); + if (player.getLanguage().equals("IT")) itMeta.addEnchant(Enchantment.ARROW_DAMAGE, 10, false); + it.setItemMeta(itMeta); + + inv.setItem(0, de); + inv.setItem(1, en); + inv.setItem(2, it); + + return inv; + } + + /** + * gets friends inventory + * + * @return Inventory + */ + public Inventory getFriendsInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_FRIENDS()); + /** + ArrayList list = player.getFriends(); + + for(int i = 0; i >= list.size(); i++) { + OfflinePlayer p = Bukkit.getOfflinePlayer(list.get(i)); + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(p.getName()); + meta.setDisplayName(p.getName()); + skull.setItemMeta(meta); + + inv.addItem(skull); + } + */ + + return inv; + } + + public Inventory getStatsInventory() { + Inventory inv = Bukkit.createInventory(player, 45, player.getMessages().LobbyItems_STATS()); + + return inv; + } + + /** + * time item appearance of item + * + * @param inv inventory + * @param slot Inventory slot + * @param item ItemStack + * @param sound Sound + * @param time long + * @param menu is menu ? + * @param forcedtime if true settings will be ignored + */ + private void timeItem(Inventory inv, int slot, ItemStack item, Sound sound, long time, boolean menu, boolean forcedtime) { + if (!player.hasInventoryAnimation() || forcedtime) { + addItem(inv, slot, item, null, menu); + } else { + Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), () -> addItem(inv, slot, item, sound, menu), time); + } + } + + /** + * add item to inventory + * + * @param inv inventory + * @param slot Inventory slot + * @param item ItemStack + * @param sound Sound + * @param menu is menu ? + */ + public void addItem(Inventory inv, int slot, ItemStack item, Sound sound, boolean menu) { + if (menu) { + String name = inv.getTitle(); + if (player.getOpenInventory().getTitle().equals(name)) { + inv.setItem(slot, item); + player.playSound(player.getEyeLocation(), sound, 1.0F, 1.0F); + } + } else { + inv.setItem(slot, item); + player.playSound(player.getEyeLocation(), sound, 1.0F, 1.0F); + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/PetManager.java b/src/main/java/eu/univento/lobby/utils/PetManager.java new file mode 100644 index 0000000..3b1e506 --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/PetManager.java @@ -0,0 +1,57 @@ +package eu.univento.lobby.utils; + +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +import java.util.HashMap; + +/** + * @author joethei + * @version 0.1 + */ +public class PetManager { + + private static HashMap pets = new HashMap<>(); + + public static HashMap getPets() { + return pets; + } + + public static boolean hasPet(CustomPlayer p) { + return pets.containsKey(p); + } + + public static Entity getPet(CustomPlayer p) { + return pets.get(p); + } + + public static void removePet(CustomPlayer p) { + pets.get(p).remove(); + } + + public static void setPet(CustomPlayer p, EntityType e) { + if(hasPet(p)) { + removePet(p); + } + new Pets().createPet(p, e); + } + + public static void setName(CustomPlayer p, String name) { + if(hasPet(p)) { + getPet(p).setCustomName(name); + } + } + + public static String getName(CustomPlayer p) { + if(hasPet(p)) { + return getPet(p).getCustomName(); + }else { + return null; + } + } + + public static void clearPets() { + pets.values().forEach(Entity::remove); + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/Pets.java b/src/main/java/eu/univento/lobby/utils/Pets.java new file mode 100644 index 0000000..7778294 --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/Pets.java @@ -0,0 +1,69 @@ +package eu.univento.lobby.utils; + +import eu.univento.core.api.pet.NMSHandler; +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftCreature; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Random; + +/** + * @author joethei + * @version 0.1 + */ +public class Pets { + + public Pets(){ + } + + void createPet(CustomPlayer p, EntityType type){ + Entity entity = NMSHandler.spawn(type, p.getLocation()); + assert entity != null; + entity.setCustomName(p.getColor() + p.getDisplayName() + "'s"); + entity.setCustomNameVisible(true); + PetManager.getPets().put(p, entity); + } + + public void followPlayer(Creature creature, Player player, double speed){ + Location location = player.getLocation(); + + + Random rnd = new Random(); + int rand = rnd.nextInt(6); + switch(rand){ + case 0: + location.add(1.5,0,1.5); + break; + case 1: + location.add(0,0,1.5); + break; + case 2: + location.add(1.5,0,0); + break; + case 3: + location.subtract(1.5,0,1.5); + break; + case 4: + location.subtract(0,0,1.5); + break; + case 5: + location.subtract(1.5,0,0); + break; + } + + + if(location.distanceSquared(creature.getLocation()) > 100){ + if(player.isFlying()){ + return; + } + creature.teleport(location); + }else{ + ((CraftCreature)creature).getHandle().getNavigation().a(location.getX(),location.getY(),location.getZ(),speed); + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/Scoreboards.java b/src/main/java/eu/univento/lobby/utils/Scoreboards.java new file mode 100644 index 0000000..6a740df --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/Scoreboards.java @@ -0,0 +1,68 @@ +package eu.univento.lobby.utils; + +import eu.univento.core.api.languages.Messages; +import eu.univento.core.api.player.CustomPlayer; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; + +/** + * @author joethei + * @version 0.1 + */ +public class Scoreboards { + + public static void updateScoreboard(CustomPlayer p) { + Messages msgs = p.getMessages(); + Scoreboard board = p.getScoreboard(); + if(board.getObjective("Lobby") != null) board.getObjective("Lobby").unregister(); + + Objective obj = board.registerNewObjective("Lobby", "dummy"); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + obj.setDisplayName(msgs.TAB_PREFIX()); + + Score empty = obj.getScore(" "); + empty.setScore(13); + + Score coinsMsg = obj.getScore(msgs.LobbyBoard_COINS()); + coinsMsg.setScore(12); + + Score coins = obj.getScore("§7" + p.getCoins()); + coins.setScore(11); + + Score empty1 = obj.getScore(" "); + empty1.setScore(10); + + Score foundMsg = obj.getScore(msgs.LobbyBoard_FOUND_SECRETS()); + foundMsg.setScore(9); + + Score found = obj.getScore("§7" + p.getSecrets()); + found.setScore(8); + + Score empty2 = obj.getScore(" "); + empty2.setScore(7); + + Score forumMsg = obj.getScore(msgs.LobbyBoard_FORUM()); + forumMsg.setScore(6); + + Score forum = obj.getScore("§7forum.univento.eu"); + forum.setScore(5); + + Score empty3 = obj.getScore(" "); + empty3.setScore(4); + + Score tsMsg = obj.getScore(msgs.LobbyBoard_TS()); + tsMsg.setScore(3); + + Score ts = obj.getScore("§7ts.univento.eu"); + ts.setScore(2); + + Score empty4 = obj.getScore(" "); + empty4.setScore(1); + + Score end = obj.getScore(" §8-*-"); + end.setScore(0); + + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/StatusSign.java b/src/main/java/eu/univento/lobby/utils/StatusSign.java new file mode 100644 index 0000000..f7fb2cf --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/StatusSign.java @@ -0,0 +1,90 @@ +package eu.univento.lobby.utils; + +import eu.univento.core.api.server.ServerInfo; +import org.bukkit.DyeColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; + +/** + * @author joethei + * @version 0.2 + */ +public class StatusSign { + + String name; + Location loc; + + public StatusSign(String name, Location loc) { + this.name = name; + this.loc = loc; + } + + public void update() { + ServerInfo info = new ServerInfo(this.name); + Block block = loc.getBlock(); + if(block.getType() == Material.WALL_SIGN) { + Sign sign = (Sign) block.getState(); + org.bukkit.material.Sign s = (org.bukkit.material.Sign) block.getState().getData(); + Block behind = block.getRelative(s.getAttachedFace()); + if(info.isOnline()) { + if(info.getMotd().contains("Ingame")) { + sign.setLine(0, "§8-§6*§8-"); + sign.setLine(1, "§6" + info.getName()); + sign.setLine(2, "§e" + info.getOnlinePlayers() + "§8/§6" + info.getMaxPlayers()); + sign.setLine(3, "§6Ingame"); + sign.update(); + behind.setData(DyeColor.CYAN.getWoolData()); + } + else if(info.getMotd().contains("Lobby")) { + if(info.getMaxPlayers() >= info.getOnlinePlayers()) { + sign.setLine(0, "§8-§2*§8-"); + sign.setLine(1, "§a" + info.getName()); + sign.setLine(2, "§a" + info.getOnlinePlayers() + "§8/§2" + info.getMaxPlayers()); + sign.setLine(3, "§aLobby"); + sign.update(); + behind.setData(DyeColor.LIME.getWoolData()); + }else{ + sign.setLine(0, "§8-§6*§8-"); + sign.setLine(1, "§7" + info.getName()); + sign.setLine(2, "§a" + info.getOnlinePlayers() + "§8/§3" + info.getMaxPlayers()); + sign.setLine(3, "§aLobby"); + sign.update(); + behind.setData(DyeColor.YELLOW.getWoolData()); + } + } + else if(info.getMotd().contains("Restart")) { + sign.setLine(0, "§8-§6*§8-"); + sign.setLine(1, "§cRestart"); + sign.setLine(2, "§c" + info.getName()); + sign.setLine(3, "§8-§6*§8-"); + sign.update(); + behind.setData(DyeColor.ORANGE.getWoolData()); + }else{ + sign.setLine(0, "§8-§6*§8-"); + sign.setLine(1, "§6" + info.getName()); + sign.setLine(2, "§e" + info.getOnlinePlayers() + "§8/§6" + info.getMaxPlayers()); + sign.setLine(3, "§8-§6*§8-"); + sign.update(); + behind.setData(DyeColor.GREEN.getWoolData()); + } + }else { + sign.setLine(0, "§8-§6*§8-"); + sign.setLine(1, "§4Offline"); + sign.setLine(2, "§e" + info.getName()); + sign.setLine(3, "§8-§6*§8-"); + sign.update(); + behind.setData(DyeColor.RED.getWoolData()); + } + } + } + + public Location getLocation() { + return loc; + } + + public String getServerName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/eu/univento/lobby/utils/StatusSignManager.java b/src/main/java/eu/univento/lobby/utils/StatusSignManager.java new file mode 100644 index 0000000..b040469 --- /dev/null +++ b/src/main/java/eu/univento/lobby/utils/StatusSignManager.java @@ -0,0 +1,102 @@ +package eu.univento.lobby.utils; + +import eu.univento.lobby.Lobby; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +/** + * @author joethei + * @version 0.1 + */ +public class StatusSignManager { + + static File file = new File("plugins/Core", "signs.yml"); + static FileConfiguration cfg = YamlConfiguration.loadConfiguration(file); + + static ArrayList signs = new ArrayList<>(); + + public static StatusSign getSign(String name) { + for(StatusSign sign : signs) { + if(sign.getServerName().equals(name)) { + return sign; + } + } + return null; + } + + public static StatusSign getSign(Location loc) { + for(StatusSign sign : signs) { + if(sign.getLocation().equals(loc)) { + return sign; + } + } + return null; + } + + public static boolean isStatusSign(Location loc) { + return getSign(loc) != null; + } + + public static void addSign(String name, Location loc) { + StatusSign sign = new StatusSign(name, loc); + signs.add(sign); + } + + public static void removeSign(String name) { + signs.remove(getSign(name)); + } + + public static void updateSigns() { + Bukkit.getScheduler().scheduleSyncRepeatingTask(Lobby.getInstance(), () -> signs.forEach(StatusSign::update), 20 * 20L, 5L); + } + + public static void saveSigns() { + for(String key : cfg.getKeys(false)){ + cfg.set(key,null); + } + for(StatusSign sign : signs) { + cfg.set("Sign." + sign.getServerName() + ".World", sign.getLocation().getWorld().getName()); + cfg.set("Sign." + sign.getServerName() + ".X", sign.getLocation().getX()); + cfg.set("Sign." + sign.getServerName() + ".Y", sign.getLocation().getY()); + cfg.set("Sign." + sign.getServerName() + ".Z", sign.getLocation().getZ()); + } + try { + cfg.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void loadSigns() { + for(String key : cfg.getConfigurationSection("Sign").getKeys(false)) { + String world = cfg.getString("Sign." + key + ".World"); + double x = cfg.getDouble("Sign." + key + ".X"); + double y = cfg.getDouble("Sign." + key + ".Y"); + double z = cfg.getDouble("Sign." + key + ".Z"); + Location loc = new Location(Bukkit.getWorld(world), x, y, z); + addSign(key, loc); + } + } + + public void loadSign(String name) { + if(cfg.contains("Sign." + name)) { + String world = cfg.getString("Sign." + name + ".World"); + double x = cfg.getDouble("Sign." + name + ".X"); + double y = cfg.getDouble("Sign." + name + ".Y"); + double z = cfg.getDouble("Sign." + name + ".Z"); + Location loc = new Location(Bukkit.getWorld(world), x, y, z); + if(!isStatusSign(loc)) { + addSign(name, loc); + } + } + + } + +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..b897089 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +main: eu.univento.lobby.Lobby +name: Lobby +version: 0.6 +author: joethei +website: http://joethei.de +depend: [Core] \ No newline at end of file