diff --git a/src/main/java/fr/efreicraft/eclobby/Main.java b/src/main/java/fr/efreicraft/eclobby/Main.java index 394cd50..2259e0e 100644 --- a/src/main/java/fr/efreicraft/eclobby/Main.java +++ b/src/main/java/fr/efreicraft/eclobby/Main.java @@ -2,20 +2,22 @@ import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; +import fr.efreicraft.eclobby.commands.Join; +import fr.efreicraft.eclobby.commands.Lobby; +import fr.efreicraft.eclobby.commands.Menu; +import fr.efreicraft.eclobby.listeners.*; +import fr.efreicraft.eclobby.utils.Utils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; -import fr.efreicraft.eclobby.commands.*; -import fr.efreicraft.eclobby.listeners.*; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandExecutor; import java.util.Collections; import java.util.Objects; @@ -44,6 +46,7 @@ public void onEnable() { registerCommand("lobby", new Lobby()); registerCommand("join", new Join()); registerCommand("menu", new Menu()); + for (Player player : Bukkit.getOnlinePlayers()) { fr.efreicraft.eclobby.utils.HUDManager.setScoreboard(player); Location loc = player.getLocation(); @@ -64,6 +67,13 @@ void registerCommand(String command, CommandExecutor executor) { } public static void sendPlayerToServer(Player player, String server) { + if (!player.hasPermission("server." + server.toLowerCase())) { + Component nope = Component.text("Vous ne pouvez pas aller sur ce serveur !").color(NamedTextColor.RED); + player.sendMessage(nope); + INSTANCE.getLogger().info(player.getName() + " tried to join " + server + " but doesn't have permission to do so."); + return; + } + ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF(server); @@ -76,13 +86,10 @@ void setupBoussole() { ItemMeta meta = menuBoussole.getItemMeta(); meta.displayName(Component.text("Menu", NamedTextColor.GREEN, TextDecoration.BOLD)); - meta.lore(Collections.singletonList(Component.text(colorize("&a&lClic droit pour ouvrir le menu !")))); + meta.lore(Collections.singletonList(Component.text(Utils.colorize("&a&lClic droit pour ouvrir le menu !")))); menuBoussole.setItemMeta(meta); Login.menuBoussole = menuBoussole; } - public static String colorize(String msg) { - return ChatColor.translateAlternateColorCodes('&', msg); - } } diff --git a/src/main/java/fr/efreicraft/eclobby/listeners/Click.java b/src/main/java/fr/efreicraft/eclobby/listeners/Click.java index 372d8da..827dcc0 100644 --- a/src/main/java/fr/efreicraft/eclobby/listeners/Click.java +++ b/src/main/java/fr/efreicraft/eclobby/listeners/Click.java @@ -1,8 +1,9 @@ package fr.efreicraft.eclobby.listeners; -import net.kyori.adventure.text.Component; +import fr.efreicraft.eclobby.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -12,11 +13,19 @@ import org.bukkit.event.player.PlayerInteractEvent; public class Click implements Listener { + + // D'où à où s'étendent les banrooms? + final Location corner1 = new Location(Bukkit.getServer().getWorld("world"),32, 300, 100); + final Location corner2 = new Location(Bukkit.getServer().getWorld("world"), -32, 210, -100); + @EventHandler public void onClick(PlayerInteractEvent event) { if (event.getPlayer().getGameMode() == GameMode.ADVENTURE) { - // Cancel all click events - event.setCancelled(true); + if (event.getAction() == Action.PHYSICAL && event.getClickedBlock().getType().name().contains("_PLATE")) { + if (Utils.isInside(event.getPlayer().getLocation(), corner1, corner2)) + event.setCancelled(false); + } else + event.setCancelled(true); } if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { // If player is right-clicking if (event.getItem() != null) { // If item in player's hand is not null diff --git a/src/main/java/fr/efreicraft/eclobby/listeners/Login.java b/src/main/java/fr/efreicraft/eclobby/listeners/Login.java index 7534283..c7fa838 100644 --- a/src/main/java/fr/efreicraft/eclobby/listeners/Login.java +++ b/src/main/java/fr/efreicraft/eclobby/listeners/Login.java @@ -1,24 +1,15 @@ package fr.efreicraft.eclobby.listeners; import fr.efreicraft.eclobby.Main; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.CompassMeta; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.Collections; - -import static fr.efreicraft.eclobby.Main.colorize; +import org.bukkit.scheduler.BukkitRunnable; public class Login implements Listener { @@ -34,13 +25,20 @@ public void onPlayerJoin(PlayerJoinEvent event) { } player.teleport(new Location(player.getWorld(), 0.5, 1, 0.5, 90, 0)); }, 1L); - Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.INSTANCE, () -> { - fr.efreicraft.eclobby.utils.HUDManager.setScoreboard(player); - Location loc = player.getLocation(); - if (loc.getY() < -30) { - player.teleport(new Location(player.getWorld(), 0.5, 1, 0.5, 90, 0)); + + BukkitRunnable runnable = new BukkitRunnable() { + @Override + public void run() { + fr.efreicraft.eclobby.utils.HUDManager.setScoreboard(player); + Location loc = player.getLocation(); + if (loc.getY() < -30) { + player.teleport(new Location(player.getWorld(), 0.5, 1, 0.5, 90, 0)); + } } - }, 0L, 20L); + }; + runnable.run(); + + runnable.runTaskTimer(Main.INSTANCE,0,20L); player.getInventory().setItem(0, menuBoussole); } diff --git a/src/main/java/fr/efreicraft/eclobby/utils/HUDManager.java b/src/main/java/fr/efreicraft/eclobby/utils/HUDManager.java index 2440d82..2db8399 100644 --- a/src/main/java/fr/efreicraft/eclobby/utils/HUDManager.java +++ b/src/main/java/fr/efreicraft/eclobby/utils/HUDManager.java @@ -3,22 +3,20 @@ import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Score; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; +import org.bukkit.scoreboard.*; public class HUDManager { public static void setScoreboard(Player player) { ScoreboardManager manager = Bukkit.getScoreboardManager(); - player.setScoreboard(manager.getNewScoreboard()); + final Scoreboard board = manager.getNewScoreboard(); - final Objective objective = board.registerNewObjective("efreicraft-" + player.getName(), "dummy", + final Objective objective = board.registerNewObjective("efreicraft-" + player.getName(), Criteria.DUMMY, Component.text(" §e§lEFREI CRAFT ")); objective.setDisplaySlot(org.bukkit.scoreboard.DisplaySlot.SIDEBAR); Score score10 = objective.getScore("§r "); score10.setScore(9); - Score score9 = objective.getScore("§7Votre rôle : " + player.getDisplayName().split("§l")[0].split("\\[")[0] + player.getDisplayName().split("\\[")[1].split("]")[0]); +// Score score9 = objective.getScore("§7Votre rôle : " + player.getDisplayName().split("§l")[0].split("\\[")[0] + player.getDisplayName().split("\\[")[1].split("]")[0]); + Score score9 = objective.getScore("§7Votre rôle : " + player.getDisplayName().replaceAll("§l|\\[|\\].*", "")); score9.setScore(8); Score score8 = objective.getScore("§r "); score8.setScore(7); diff --git a/src/main/java/fr/efreicraft/eclobby/utils/Utils.java b/src/main/java/fr/efreicraft/eclobby/utils/Utils.java new file mode 100644 index 0000000..f63a6b0 --- /dev/null +++ b/src/main/java/fr/efreicraft/eclobby/utils/Utils.java @@ -0,0 +1,36 @@ +package fr.efreicraft.eclobby.utils; + +import org.bukkit.ChatColor; +import org.bukkit.Location; + +/** + * Classe générique utilitaire + */ +public class Utils { + + /** + * @param location the location that is checked + * @param corner1 one of the corner of the bounding box created by corner1 and corner2 + * @param corner2 the other one of the corner of the bounding box created by corner1 and corner2 + * @return {@code true} if location is inside the bounding box + */ + public static boolean isInside(Location location, Location corner1, Location corner2) { + double x = location.getX(); + double y = location.getY(); + double z = location.getZ(); + + return (inRange(x, corner1.getX(), corner2.getX())) && + (inRange(y, corner1.getY(), corner2.getY())) && + (inRange(z, corner1.getZ(), corner2.getZ())); + } + + // Dites moi dans quel monde ça existe pas cette fonction + public static boolean inRange(double x, double a, double b) { + return Math.min(a,b) <= x + && Math.max(a,b) >= x; + } + + public static String colorize(String msg) { + return ChatColor.translateAlternateColorCodes('&', msg); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c416d0a..1d90e71 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,11 +2,11 @@ name: ECLobby version: '${version}' main: fr.efreicraft.eclobby.Main api-version: 1.19 -authors: [ DocSystem ] +authors: [ DocSystem, Niilyx ] description: Efrei Craft Lobby Plugin website: https://github.com/efrei-craft/eclobby -loadbefore: # load eclobby before ECATUP +depend: # load eclobby AFTER ECATUP - ECATUP commands: