diff --git a/src/main/java/xyz/twovb/sgm/SGM.java b/src/main/java/xyz/twovb/sgm/SGM.java index 46bcbee..efa2116 100644 --- a/src/main/java/xyz/twovb/sgm/SGM.java +++ b/src/main/java/xyz/twovb/sgm/SGM.java @@ -1,5 +1,10 @@ package xyz.twovb.sgm; + +/* + * Created by 2vb - 5/7/2024 + */ + import dev.rollczi.litecommands.bukkit.LiteBukkitMessages; import dev.rollczi.litecommands.bukkit.LiteCommandsBukkit; import lombok.Getter; @@ -85,6 +90,8 @@ public final class SGM extends JavaPlugin { saveResource("guis/initgame.xml", false); saveResource("guis/mapgui.xml", false); saveResource("guis/teampicker.xml", false); + saveResource("guis/activegames.xml", false); + saveResource("guis/joingame.xml", false); } private void registerPlaceholders() { diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java index d707f3c..d303336 100644 --- a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java +++ b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java @@ -1,6 +1,12 @@ package xyz.twovb.sgm.commands.impl; + +/* + * Created by 2vb - 5/7/2024 + */ + + /* * Created by 2vb - 5/7/2024 */ @@ -16,12 +22,11 @@ import dev.rollczi.litecommands.annotations.execute.Execute; import dev.rollczi.litecommands.annotations.permission.Permission; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.games.Minigame; import xyz.twovb.sgm.games.impl.capturethebrick.guis.TeamGui; import xyz.twovb.sgm.guis.InitGameGui; +import xyz.twovb.sgm.guis.JoinGameGui; import xyz.twovb.toolbox.api.CustomPlayer; import xyz.twovb.toolbox.utils.ChatUtils; @@ -70,10 +75,10 @@ public class GameCommand { new TeamGui(targetPlayer).getGui().show(player); } -// @Execute(name = "join") -// void join(@Context Player player) { -// -// } + @Execute(name = "testjoin") + void testjoin(@Context Player player) { + new JoinGameGui().getGui().show(player); + } @Execute(name = "join") void join(@Context Player player, @Arg("id") String id) { diff --git a/src/main/java/xyz/twovb/sgm/games/Minigame.java b/src/main/java/xyz/twovb/sgm/games/Minigame.java index a767969..a03b945 100644 --- a/src/main/java/xyz/twovb/sgm/games/Minigame.java +++ b/src/main/java/xyz/twovb/sgm/games/Minigame.java @@ -1,5 +1,10 @@ package xyz.twovb.sgm.games; + +/* + * Created by 2vb - 5/7/2024 + */ + /* * Created by 2vb - 4/6/2024 */ @@ -9,7 +14,6 @@ import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.WorldCreator; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import xyz.twovb.sgm.SGM; @@ -43,6 +47,8 @@ public interface Minigame extends Listener { GameState getState(); + World getWorld(); + default void sendMessageToAllPlayers(String message) { for (Player player : getPlayers()) { CustomPlayer cPlayer = new CustomPlayer(player); diff --git a/src/main/java/xyz/twovb/sgm/games/impl/TestGame.java b/src/main/java/xyz/twovb/sgm/games/impl/TestGame.java index b1f47bf..235f062 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/TestGame.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/TestGame.java @@ -1,5 +1,10 @@ package xyz.twovb.sgm.games.impl; + +/* + * Created by 2vb - 5/7/2024 + */ + /* * Created by 2vb - 26/6/2024 */ @@ -117,6 +122,12 @@ public class TestGame implements Minigame { return state; } + + @Override + public World getWorld() { + return gameWorld; + } + @Override public void onTick() { if (state == GameState.STARTED && players.size() <= 1) { diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java index 6eda805..35013ff 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -1,6 +1,12 @@ package xyz.twovb.sgm.games.impl.capturethebrick; + +/* + * Created by 2vb - 5/7/2024 + */ + + /* * Created by 2vb - 5/7/2024 */ @@ -17,9 +23,9 @@ import net.megavex.scoreboardlibrary.api.sidebar.component.ComponentSidebarLayou import net.megavex.scoreboardlibrary.api.sidebar.component.SidebarComponent; import net.megavex.scoreboardlibrary.api.sidebar.component.animation.CollectionSidebarAnimation; import net.megavex.scoreboardlibrary.api.sidebar.component.animation.SidebarAnimation; +import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; import net.megavex.scoreboardlibrary.api.team.TeamDisplay; import net.megavex.scoreboardlibrary.api.team.TeamManager; -import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -33,8 +39,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.scoreboard.Team; +import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.games.GameManager; @@ -55,18 +62,22 @@ public class CTB implements Minigame { private final ArrayList blueBrickSpawns = new ArrayList(); private final ArrayList redSpawnArea = new ArrayList(); private final ArrayList blueSpawnArea = new ArrayList(); + private final FileConfiguration messages; private World gameWorld; private GameState state; private int bricks; private int territoryLevel; private int boundsLevel; private Location spawnLoc; - private FileConfiguration messages; private TeamManager teamManager; private ScoreboardTeam redTeam; private ScoreboardTeam blueTeam; private Sidebar sb; + private SidebarAnimation titleAnimation; + // private @NotNull SidebarComponent title; + private ComponentSidebarLayout layout; + private int taskId; // private List redTeam = new ArrayList(); // private List blueTeam = new ArrayList(); @@ -86,16 +97,23 @@ public class CTB implements Minigame { gameWorld.setAutoSave(false); if (applyOptions(world)) { teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager(); - sb = SGM.getInstance().getScoreboardLibrary().createSidebar(); - Bukkit.getPluginManager().registerEvents(this, SGM.getInstance()); - this.redTeam = teamManager.createIfAbsent("red_team"); this.blueTeam = teamManager.createIfAbsent("blue_team"); + Bukkit.getPluginManager().registerEvents(this, SGM.getInstance()); setupTeamDisplay(redTeam, "Red Team", NamedTextColor.RED); setupTeamDisplay(blueTeam, "Blue Team", NamedTextColor.BLUE); - buildScoreboard(); + this.sb = SGM.getInstance().getScoreboardLibrary().createSidebar(); + this.titleAnimation = createGradientAnimation(Component.text("Capture The Brick", Style.style(TextDecoration.BOLD))); + var title = SidebarComponent.animatedLine(titleAnimation); + + SidebarComponent gameInfo = SidebarComponent.builder().addDynamicLine(() -> Component.text("Players Alive: " + getAlivePlayersCount(), NamedTextColor.YELLOW)).addDynamicLine(() -> Component.text("Red Team: " + getTeamSize(redTeam), NamedTextColor.RED)).addDynamicLine(() -> Component.text("Blue Team: " + getTeamSize(blueTeam), NamedTextColor.BLUE)).addDynamicLine(() -> Component.text("Bricks Remaining: " + bricks, NamedTextColor.GREEN)).build(); + + this.layout = new ComponentSidebarLayout(title, gameInfo); + layout.apply(sb); + +// buildScoreboard(); // Ready state = GameState.READY; owner.sendMessage(ChatUtils.translate(messages.getString("system.game.ready").replace("%game%", name))); @@ -111,27 +129,31 @@ public class CTB implements Minigame { display.playerColor(color); } - private void buildScoreboard() { - @NotNull SidebarAnimation titleAnimation = createGradientAnimation(Component.text("Capture The Brick", Style.style(TextDecoration.BOLD))); - var title = SidebarComponent.animatedLine(titleAnimation); - SidebarComponent lines = SidebarComponent.builder() - .addDynamicLine(() -> Component.text("Red Team: " + redTeam.teamManager().players().size(), NamedTextColor.RED)) - .addDynamicLine(() -> Component.text("Blue Team: " + blueTeam.teamManager().players().size(), NamedTextColor.BLUE)) - .addDynamicLine(() -> Component.text("Bricks Remaining: " + bricks, NamedTextColor.GREEN)) - .build(); - ComponentSidebarLayout layout = new ComponentSidebarLayout(title, lines); - layout.apply(sb); - } +// private void buildScoreboard() { +// titleAnimation = createGradientAnimation(Component.text("Capture The Brick", Style.style(TextDecoration.BOLD))); +// title = SidebarComponent.animatedLine(titleAnimation); +// SidebarComponent lines = SidebarComponent.builder().addDynamicLine(() -> Component.text("Red Team: " + redTeam.teamManager().players().size(), NamedTextColor.RED)).addDynamicLine(() -> Component.text("Blue Team: " + blueTeam.teamManager().players().size(), NamedTextColor.BLUE)).addDynamicLine(() -> Component.text("Bricks Remaining: " + bricks, NamedTextColor.GREEN)).build(); +// layout = new ComponentSidebarLayout(title, lines); +// layout.apply(sb); +// } private @NotNull SidebarAnimation createGradientAnimation(@NotNull Component text) { float step = 1f / 8f; TagResolver.Single textPlaceholder = Placeholder.component("text", text); List frames = new ArrayList<>((int) (2f / step)); float phase = -1f; - while (phase < 1) { - frames.add(MiniMessage.miniMessage().deserialize("", textPlaceholder)); + + SGM.getInstance().getCLogger().log("Creating gradient animation"); + + while (phase <= 1) { + String gradientTag = String.format("", phase); + Component frame = MiniMessage.miniMessage().deserialize(gradientTag + "", textPlaceholder); + frames.add(frame); + SGM.getInstance().getCLogger().log("Phase: " + phase + ", Tag: " + gradientTag); phase += step; } + + SGM.getInstance().getCLogger().log("Total frames: " + frames.size()); return new CollectionSidebarAnimation<>(frames); } @@ -217,6 +239,7 @@ public class CTB implements Minigame { sendMessageToAllPlayers("The game has started!"); for (Player player : players) { player.teleport(this.spawnLoc); + sb.addPlayer(player); } for (int i = 0; i <= bricks; i++) { for (Location brickLoc : redBrickSpawns) { @@ -226,11 +249,13 @@ public class CTB implements Minigame { placeBrick(brickLoc, "blue"); } } - Bukkit.getScheduler().runTaskTimer(SGM.getInstance(), this::onTick, 0L, 1L); + BukkitTask task = Bukkit.getScheduler().runTaskTimer(SGM.getInstance(), this::onTick, 0L, 1L); + this.taskId = task.getTaskId(); } } public void addPlayerToTeam(Player player, boolean isRedTeam) { + //TODO: make this shit fuckin better bor if (isRedTeam) { redTeam.defaultDisplay().addEntry(player.getName()); } else { @@ -284,13 +309,16 @@ public class CTB implements Minigame { if (teamManager != null) { teamManager.close(); } - sb.close();; + if (sb != null) { + sb.close(); + } + Bukkit.getScheduler().cancelTask(this.taskId); } @Override public void addPlayer(Player player) { players.add(player); - sb.addPlayer(player); +// sb.addPlayer(player); player.teleport(this.spawnLoc); sendMessageToAllPlayers(messages.getString("system.player.join").replace("%player%", player.getName())); } @@ -298,6 +326,8 @@ public class CTB implements Minigame { @Override public void removePlayer(Player player) { players.remove(player); + sb.removePlayer(player); + sendMessageToAllPlayers(messages.getString("system.player.left").replace("%player%", player.getName())); } @EventHandler @@ -308,6 +338,14 @@ public class CTB implements Minigame { } } + @EventHandler + void onWorldChange(PlayerChangedWorldEvent event) { + Player player = event.getPlayer(); + if (players.contains(player)) { + removePlayer(event.getPlayer()); + } + } + @EventHandler void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getPlayer(); @@ -333,21 +371,31 @@ public class CTB implements Minigame { return uuid; } - public ScoreboardTeam getRedTeam() { - return redTeam; - } - @Override public GameState getState() { return state; } + @Override + public World getWorld() { + return gameWorld; + } + @Override public void onTick() { - buildScoreboard(); + for (Player player : gameWorld.getPlayers()) { + if (!players.contains(player)) { + sendMessageToAllPlayers(player.getName() + " IS A IMPOSTER"); + } + } if (state == GameState.STARTED && players.size() <= 1) { this.stop(); } + try { + titleAnimation.nextFrame(); + layout.apply(sb); + } catch (IllegalStateException ignored) { + } } } \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/guis/TeamGui.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/guis/TeamGui.java index fdad501..faedbc7 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/guis/TeamGui.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/guis/TeamGui.java @@ -1,5 +1,10 @@ package xyz.twovb.sgm.games.impl.capturethebrick.guis; + +/* + * Created by 2vb - 5/7/2024 + */ + import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; import lombok.Getter; import org.bukkit.Material; @@ -7,8 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import xyz.twovb.sgm.SGM; -import xyz.twovb.sgm.games.Minigame; -import xyz.twovb.sgm.guis.MapGui; +import xyz.twovb.sgm.games.impl.capturethebrick.CTB; import java.io.ByteArrayInputStream; import java.io.File; @@ -47,10 +51,12 @@ public class TeamGui { public void pickTeam(InventoryClickEvent event) { Player player = (Player) event.getWhoClicked(); ItemStack clickedItem = event.getCurrentItem(); - Minigame game = SGM.getInstance().getGameManager().findGame(player); + CTB game = (CTB) SGM.getInstance().getGameManager().findGame(player); if (clickedItem.getType().equals(Material.RED_WOOL)) { + game.addPlayerToTeam(target, true); game.sendMessageToAllPlayers(target.getName() + " RED"); } else if (clickedItem.getType().equals(Material.BLUE_WOOL)) { + game.addPlayerToTeam(target, false); game.sendMessageToAllPlayers(target.getName() + " BLUE"); } } diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/scoreboards/CTBSidebar.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/scoreboards/CTBSidebar.java deleted file mode 100644 index b07dca1..0000000 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/scoreboards/CTBSidebar.java +++ /dev/null @@ -1,70 +0,0 @@ -//package xyz.twovb.sgm.games.impl.capturethebrick.scoreboards; -// -//import net.kyori.adventure.text.Component; -//import net.kyori.adventure.text.format.NamedTextColor; -//import net.kyori.adventure.text.format.Style; -//import net.kyori.adventure.text.format.TextDecoration; -//import net.kyori.adventure.text.minimessage.MiniMessage; -//import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -//import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -//import net.megavex.scoreboardlibrary.api.sidebar.Sidebar; -//import net.megavex.scoreboardlibrary.api.sidebar.component.ComponentSidebarLayout; -//import net.megavex.scoreboardlibrary.api.sidebar.component.SidebarComponent; -//import net.megavex.scoreboardlibrary.api.sidebar.component.animation.CollectionSidebarAnimation; -//import net.megavex.scoreboardlibrary.api.sidebar.component.animation.SidebarAnimation; -//import org.bukkit.plugin.Plugin; -//import org.jetbrains.annotations.NotNull; -//import xyz.twovb.sgm.games.impl.capturethebrick.CTB; -// -//import java.util.ArrayList; -//import java.util.List; -// -//public class CTBSidebar { -// private final Sidebar sidebar; -// private final ComponentSidebarLayout componentSidebar; -// private final SidebarAnimation titleAnimation; -// private final CTB minigame; -// -// public CTBSidebar(@NotNull Plugin plugin, @NotNull Sidebar sidebar, @NotNull CTB minigame) { -// this.sidebar = sidebar; -// this.minigame = minigame; -// -// this.titleAnimation = createGradientAnimation(Component.text("Capture The Brick", Style.style(TextDecoration.BOLD))); -// var title = SidebarComponent.animatedLine(titleAnimation); -// -// SidebarComponent gameInfo = SidebarComponent.builder() -// .addDynamicLine(() -> Component.text("Players Alive: " + getAlivePlayersCount(), NamedTextColor.YELLOW)) -// .addDynamicLine(() -> Component.text("Red Team: " + getTeamSize(minigame.g), NamedTextColor.RED)) -// .addDynamicLine(() -> Component.text("Blue Team: " + getTeamSize(minigame.blueTeam), NamedTextColor.BLUE)) -// .addDynamicLine(() -> Component.text("Bricks Remaining: " + minigame.bricks, NamedTextColor.GREEN)) -// .build(); -// -// this.componentSidebar = new ComponentSidebarLayout(title, gameInfo); -// } -// -// public void onTick() { -// titleAnimation.nextFrame(); -// componentSidebar.apply(sidebar); -// } -// -// private int getAlivePlayersCount() { -// return (int) minigame.players.stream().filter(Player::isOnline).count(); -// } -// -// private int getTeamSize(ScoreboardTeam team) { -// return team.defaultDisplay().entries().size(); -// } -// -// private @NotNull SidebarAnimation createGradientAnimation(@NotNull Component text) { -// float step = 1f / 8f; -// TagResolver.Single textPlaceholder = Placeholder.component("text", text); -// List frames = new ArrayList<>((int) (2f / step)); -// float phase = -1f; -// while (phase < 1) { -// frames.add(MiniMessage.miniMessage().deserialize("", textPlaceholder)); -// phase += step; -// } -// return new CollectionSidebarAnimation<>(frames); -// } -//} -// diff --git a/src/main/java/xyz/twovb/sgm/guis/ActiveGamesGui.java b/src/main/java/xyz/twovb/sgm/guis/ActiveGamesGui.java new file mode 100644 index 0000000..55d4502 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/guis/ActiveGamesGui.java @@ -0,0 +1,110 @@ +package xyz.twovb.sgm.guis; + +/* + * Created by 2vb - 5/7/2024 + */ + +/* + * Created by 2vb - 5/7/2024 + */ + +import com.github.stefvanschie.inventoryframework.gui.GuiItem; +import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; +import com.github.stefvanschie.inventoryframework.pane.OutlinePane; +import lombok.Getter; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.twovb.sgm.SGM; +import xyz.twovb.sgm.games.GameManager; +import xyz.twovb.sgm.games.Minigame; +import xyz.twovb.toolbox.utils.ChatUtils; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; + +public class ActiveGamesGui { + + @Getter + private final ChestGui gui; + + private final String game; + private OutlinePane mapPane; + + public ActiveGamesGui(String game) { + this.game = game; + ChestGui loadedGui = null; + try { + File guiFile = new File(SGM.getInstance().getDataFolder(), "guis/activegames.xml"); + if (guiFile.exists()) { + byte[] fileContent = Files.readAllBytes(guiFile.toPath()); + InputStream inputStream = new ByteArrayInputStream(fileContent); + loadedGui = ChestGui.load(this, inputStream); + mapPane = new OutlinePane(1, 1, 7, 1); // Define your pane layout + loadedGui.addPane(mapPane); + addMaps(); + } else { + SGM.getInstance().getLogger().log(Level.WARNING, "Could not find activegames.xml file."); + } + } catch (Exception e) { + SGM.getInstance().getLogger().log(Level.SEVERE, "Error loading activegames.xml", e); + } + gui = loadedGui; + } + + public void globalClick(InventoryClickEvent event) { + event.setCancelled(true); + } + + public void addMaps() { + for (Minigame game : GameManager.getActiveGames().values()) { +// SGM.getInstance().getCLogger().log(game.getName()); +// SGM.getInstance().getCLogger().log(this.game); + Material itemType; + switch (game.getState()) { + case PRESTART: +// mapItem.setType(Material.YELLOW_WOOL); + itemType = Material.YELLOW_WOOL; + break; + case READY: +// mapItem.setType(Material.LIME_WOOL); + itemType = Material.LIME_WOOL; + break; + case STARTED: + case ENDING: + default: +// mapItem.setType(Material.RED_WOOL); + itemType = Material.RED_WOOL; + break; + } + ItemStack joinItem = new ItemStack(itemType); + ItemMeta meta = joinItem.getItemMeta(); + meta.displayName(ChatUtils.translate(game.getName())); + List lore = new ArrayList(); + lore.add(0, ChatUtils.translate("&r&7" + game.getGameId().toString())); + if (!game.getPlayers().isEmpty()) { + lore.add(ChatUtils.translate("&r&7Players:")); + for (Player player : game.getPlayers()) { + lore.add(ChatUtils.translate("&r&a" + player.getName())); + } + } + meta.lore(lore); + joinItem.setItemMeta(meta); + mapPane.addItem(new GuiItem(joinItem, event -> { + Player player = (Player) event.getWhoClicked(); + if (game.getState() == Minigame.GameState.READY) { + SGM.getInstance().getGameManager().addPlayerToGame(player, game.getGameId()); + } + player.closeInventory(); + })); + } + } +} diff --git a/src/main/java/xyz/twovb/sgm/guis/JoinGameGui.java b/src/main/java/xyz/twovb/sgm/guis/JoinGameGui.java new file mode 100644 index 0000000..1a5ef6b --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/guis/JoinGameGui.java @@ -0,0 +1,59 @@ +package xyz.twovb.sgm.guis; + +/* + * Created by 2vb - 5/7/2024 + */ + +/* + * Created by 2vb - 5/7/2024 + */ + +import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import xyz.twovb.sgm.SGM; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.logging.Level; + +public class JoinGameGui { + + @Getter + private final ChestGui gui; + + public JoinGameGui() { + ChestGui loadedGui = null; + try { + File guiFile = new File(SGM.getInstance().getDataFolder(), "guis/joingame.xml"); + if (guiFile.exists()) { + byte[] fileContent = Files.readAllBytes(guiFile.toPath()); + InputStream inputStream = new ByteArrayInputStream(fileContent); + loadedGui = ChestGui.load(this, inputStream); + } else { + SGM.getInstance().getLogger().log(Level.WARNING, "Could not find joingame.xml file."); + } + } catch (Exception e) { + SGM.getInstance().getLogger().log(Level.SEVERE, "Error loading joingame.xml", e); + } + gui = loadedGui; + } + + public void globalClick(InventoryClickEvent event) { + event.setCancelled(true); + } + + public void joinGame(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + String itemName = event.getCurrentItem().getItemMeta().getDisplayName().replaceAll("\\W+", ""); + player.closeInventory(); + if (SGM.getInstance().getGameManager().getRegisteredGames().contains(itemName.toLowerCase())) { + new ActiveGamesGui(itemName).getGui().show(player); + } else { + player.sendMessage("Please check xml"); + } + } +} diff --git a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java index 669575e..e60893c 100644 --- a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java +++ b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java @@ -1,6 +1,12 @@ package xyz.twovb.sgm.levels; + +/* + * Created by 2vb - 5/7/2024 + */ + + /* * Created by 2vb - 5/7/2024 */ @@ -113,6 +119,7 @@ public class LevelManager { File yamlFile = new File(path, "sgm.yml"); try (FileWriter writer = new FileWriter(yamlFile)) { yaml.dump(data, writer); + this.cancel(); } catch (IOException e) { SGM.getInstance().getCLogger().error("Error writing data file: " + e.getMessage()); } @@ -144,7 +151,10 @@ public class LevelManager { YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); String gameIntName = config.getString("game"); if (SGM.getInstance().getGameManager().getRegisteredGames().contains(gameIntName)) { - enabledMaps.get(gameIntName).add(name); + List maps = enabledMaps.get(gameIntName); + if (!maps.contains(name)) { + enabledMaps.get(gameIntName).add(name); + } } FileUtils.copyDirectory(levelDir, mapDir); FileUtils.delete(new File(mapDir + "/uid.dat")); diff --git a/src/main/resources/guis/activegames.xml b/src/main/resources/guis/activegames.xml new file mode 100644 index 0000000..2c3d4f7 --- /dev/null +++ b/src/main/resources/guis/activegames.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/guis/joingame.xml b/src/main/resources/guis/joingame.xml new file mode 100644 index 0000000..2332b4a --- /dev/null +++ b/src/main/resources/guis/joingame.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + Capture The Brick + + + TestGame + + + \ No newline at end of file