diff --git a/pom.xml b/pom.xml index 31c14e79..00a99c29 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.efnilite IP pom - 3.8.1 + 3.8.2 witp diff --git a/witp/dependency-reduced-pom.xml b/witp/dependency-reduced-pom.xml index 880b7c67..0cda4679 100644 --- a/witp/dependency-reduced-pom.xml +++ b/witp/dependency-reduced-pom.xml @@ -3,31 +3,13 @@ IP dev.efnilite - 3.8.1 + 3.8.2 4.0.0 witp - 3.8.1 + 3.8.2 - src/main/java clean package - - - . - true - src/main/resources - - lang/items-v3.yml - lang/messages-v3.yml - lang/scoreboard-v3.yml - config.yml - generation.yml - rewards-v2.yml - schematics.yml - - - - ${project.name}-${project.version} maven-compiler-plugin diff --git a/witp/pom.xml b/witp/pom.xml index 6766db84..fc9fa1c5 100644 --- a/witp/pom.xml +++ b/witp/pom.xml @@ -5,12 +5,12 @@ IP dev.efnilite - 3.8.1 + 3.8.2 4.0.0 witp - 3.8.1 + 3.8.2 16 @@ -18,25 +18,6 @@ - src/main/java - ${project.name}-${project.version} - - - src/main/resources - true - . - - lang/items-v3.yml - lang/messages-v3.yml - lang/scoreboard-v3.yml - config.yml - generation.yml - rewards-v2.yml - schematics.yml - - - - clean package diff --git a/witp/src/main/java/dev/efnilite/ip/IP.java b/witp/src/main/java/dev/efnilite/ip/IP.java index 944d27d2..f393c082 100644 --- a/witp/src/main/java/dev/efnilite/ip/IP.java +++ b/witp/src/main/java/dev/efnilite/ip/IP.java @@ -2,7 +2,7 @@ import dev.efnilite.ip.api.Gamemodes; import dev.efnilite.ip.api.Registry; -import dev.efnilite.ip.events.Handler; +import dev.efnilite.ip.api.events.Handler; import dev.efnilite.ip.hook.FloodgateHook; import dev.efnilite.ip.hook.HoloHook; import dev.efnilite.ip.hook.MultiverseHook; diff --git a/witp/src/main/java/dev/efnilite/ip/ParkourCommand.java b/witp/src/main/java/dev/efnilite/ip/ParkourCommand.java index fab35d82..39f80809 100644 --- a/witp/src/main/java/dev/efnilite/ip/ParkourCommand.java +++ b/witp/src/main/java/dev/efnilite/ip/ParkourCommand.java @@ -2,9 +2,9 @@ import dev.efnilite.ip.api.Gamemode; import dev.efnilite.ip.leaderboard.Leaderboard; -import dev.efnilite.ip.menu.LeaderboardMenu; +import dev.efnilite.ip.menu.community.LeaderboardMenu; import dev.efnilite.ip.menu.MainMenu; -import dev.efnilite.ip.menu.SingleplayerMenu; +import dev.efnilite.ip.menu.play.SingleplayerMenu; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.player.data.InventoryData; diff --git a/witp/src/main/java/dev/efnilite/ip/api/ParkourAPI.java b/witp/src/main/java/dev/efnilite/ip/api/ParkourAPI.java index d9516706..7b54742c 100644 --- a/witp/src/main/java/dev/efnilite/ip/api/ParkourAPI.java +++ b/witp/src/main/java/dev/efnilite/ip/api/ParkourAPI.java @@ -1,6 +1,7 @@ package dev.efnilite.ip.api; import dev.efnilite.ip.IP; +import dev.efnilite.ip.api.events.BlockGenerateEvent; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import org.bukkit.entity.Player; @@ -12,7 +13,7 @@ * For player joining/leaving, please view {@link ParkourUser}. * For player settings, please view {@link ParkourPlayer}. * For player spectating, please view {@link dev.efnilite.ip.player.ParkourSpectator}. - * For events, please view {@link dev.efnilite.ip.events.BlockGenerateEvent} and others in the events package. + * For events, please view {@link BlockGenerateEvent} and others in the events package. * For Sessions, please view {@link dev.efnilite.ip.session.Session}. */ @SuppressWarnings("unused") diff --git a/witp/src/main/java/dev/efnilite/ip/events/BlockGenerateEvent.java b/witp/src/main/java/dev/efnilite/ip/api/events/BlockGenerateEvent.java similarity index 94% rename from witp/src/main/java/dev/efnilite/ip/events/BlockGenerateEvent.java rename to witp/src/main/java/dev/efnilite/ip/api/events/BlockGenerateEvent.java index 968c6997..2338738e 100644 --- a/witp/src/main/java/dev/efnilite/ip/events/BlockGenerateEvent.java +++ b/witp/src/main/java/dev/efnilite/ip/api/events/BlockGenerateEvent.java @@ -1,4 +1,4 @@ -package dev.efnilite.ip.events; +package dev.efnilite.ip.api.events; import dev.efnilite.ip.generator.DefaultGenerator; import dev.efnilite.ip.player.ParkourPlayer; diff --git a/witp/src/main/java/dev/efnilite/ip/events/Handler.java b/witp/src/main/java/dev/efnilite/ip/api/events/Handler.java similarity index 99% rename from witp/src/main/java/dev/efnilite/ip/events/Handler.java rename to witp/src/main/java/dev/efnilite/ip/api/events/Handler.java index 5bebb1b4..585ba02c 100644 --- a/witp/src/main/java/dev/efnilite/ip/events/Handler.java +++ b/witp/src/main/java/dev/efnilite/ip/api/events/Handler.java @@ -1,4 +1,4 @@ -package dev.efnilite.ip.events; +package dev.efnilite.ip.api.events; import dev.efnilite.ip.IP; import dev.efnilite.ip.ParkourCommand; diff --git a/witp/src/main/java/dev/efnilite/ip/events/PlayerFallEvent.java b/witp/src/main/java/dev/efnilite/ip/api/events/PlayerFallEvent.java similarity index 91% rename from witp/src/main/java/dev/efnilite/ip/events/PlayerFallEvent.java rename to witp/src/main/java/dev/efnilite/ip/api/events/PlayerFallEvent.java index c790903a..df705b06 100644 --- a/witp/src/main/java/dev/efnilite/ip/events/PlayerFallEvent.java +++ b/witp/src/main/java/dev/efnilite/ip/api/events/PlayerFallEvent.java @@ -1,4 +1,4 @@ -package dev.efnilite.ip.events; +package dev.efnilite.ip.api.events; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.vilib.event.EventWrapper; diff --git a/witp/src/main/java/dev/efnilite/ip/events/PlayerScoreEvent.java b/witp/src/main/java/dev/efnilite/ip/api/events/PlayerScoreEvent.java similarity index 90% rename from witp/src/main/java/dev/efnilite/ip/events/PlayerScoreEvent.java rename to witp/src/main/java/dev/efnilite/ip/api/events/PlayerScoreEvent.java index fbcd1c74..55a7093d 100644 --- a/witp/src/main/java/dev/efnilite/ip/events/PlayerScoreEvent.java +++ b/witp/src/main/java/dev/efnilite/ip/api/events/PlayerScoreEvent.java @@ -1,4 +1,4 @@ -package dev.efnilite.ip.events; +package dev.efnilite.ip.api.events; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.vilib.event.EventWrapper; diff --git a/witp/src/main/java/dev/efnilite/ip/generator/DefaultGenerator.java b/witp/src/main/java/dev/efnilite/ip/generator/DefaultGenerator.java index 9d5500a2..a510c163 100644 --- a/witp/src/main/java/dev/efnilite/ip/generator/DefaultGenerator.java +++ b/witp/src/main/java/dev/efnilite/ip/generator/DefaultGenerator.java @@ -3,15 +3,15 @@ import dev.efnilite.ip.IP; import dev.efnilite.ip.api.Gamemode; import dev.efnilite.ip.api.Gamemodes; -import dev.efnilite.ip.events.BlockGenerateEvent; -import dev.efnilite.ip.events.PlayerFallEvent; -import dev.efnilite.ip.events.PlayerScoreEvent; +import dev.efnilite.ip.api.events.BlockGenerateEvent; +import dev.efnilite.ip.api.events.PlayerFallEvent; +import dev.efnilite.ip.api.events.PlayerScoreEvent; import dev.efnilite.ip.generator.base.DefaultGeneratorBase; import dev.efnilite.ip.generator.base.Direction; import dev.efnilite.ip.generator.settings.GeneratorOption; import dev.efnilite.ip.internal.gamemode.DefaultGamemode; import dev.efnilite.ip.leaderboard.Leaderboard; -import dev.efnilite.ip.menu.SettingsMenu; +import dev.efnilite.ip.menu.settings.GameSettingsMenu; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourSpectator; import dev.efnilite.ip.player.data.Score; @@ -492,7 +492,7 @@ public void fall() { @Override public void menu() { - SettingsMenu.INSTANCE.open(player); + GameSettingsMenu.INSTANCE.open(player); } @Override diff --git a/witp/src/main/java/dev/efnilite/ip/internal/gamemode/SpectatorGamemode.java b/witp/src/main/java/dev/efnilite/ip/internal/gamemode/SpectatorGamemode.java index be6396e3..0cd62851 100644 --- a/witp/src/main/java/dev/efnilite/ip/internal/gamemode/SpectatorGamemode.java +++ b/witp/src/main/java/dev/efnilite/ip/internal/gamemode/SpectatorGamemode.java @@ -2,7 +2,7 @@ import dev.efnilite.ip.api.Gamemode; import dev.efnilite.ip.leaderboard.Leaderboard; -import dev.efnilite.ip.menu.SpectatorMenu; +import dev.efnilite.ip.menu.play.SpectatorMenu; import dev.efnilite.ip.player.ParkourSpectator; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.session.Session; diff --git a/witp/src/main/java/dev/efnilite/ip/leaderboard/Leaderboard.java b/witp/src/main/java/dev/efnilite/ip/leaderboard/Leaderboard.java index f3a07c0a..215da8c4 100644 --- a/witp/src/main/java/dev/efnilite/ip/leaderboard/Leaderboard.java +++ b/witp/src/main/java/dev/efnilite/ip/leaderboard/Leaderboard.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; @@ -55,6 +56,8 @@ public Leaderboard(@NotNull String gamemode) { this.file = FOLDER + gamemode.toLowerCase() + ".json"; if (Option.SQL) { + IP.getSqlManager().validateConnection(); + IP.getSqlManager().sendQuery( """ USE `%s`; @@ -149,6 +152,10 @@ private void _writeSql() { * writes all leaderboard data to the file */ private void _writeFile() { + if (!new File(file).exists()) { + return; + } + try (FileWriter writer = new FileWriter(file)) { IP.getGson().toJson(this, writer); @@ -224,6 +231,10 @@ private void _readSql() { * read leaderboard data from the file */ private void _readFile() { + if (!new File(file).exists()) { + return; + } + try (FileReader reader = new FileReader(file)) { Leaderboard read = IP.getGson().fromJson(reader, Leaderboard.class); diff --git a/witp/src/main/java/dev/efnilite/ip/menu/MainMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/MainMenu.java index 3acda6d7..f9770012 100644 --- a/witp/src/main/java/dev/efnilite/ip/menu/MainMenu.java +++ b/witp/src/main/java/dev/efnilite/ip/menu/MainMenu.java @@ -2,6 +2,9 @@ import dev.efnilite.ip.IP; import dev.efnilite.ip.ParkourOption; +import dev.efnilite.ip.menu.community.LeaderboardMenu; +import dev.efnilite.ip.menu.play.SingleplayerMenu; +import dev.efnilite.ip.menu.play.SpectatorMenu; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.vilib.inventory.Menu; diff --git a/witp/src/main/java/dev/efnilite/ip/menu/LeaderboardMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/community/LeaderboardMenu.java similarity index 99% rename from witp/src/main/java/dev/efnilite/ip/menu/LeaderboardMenu.java rename to witp/src/main/java/dev/efnilite/ip/menu/community/LeaderboardMenu.java index cff27fea..f8daf7a8 100644 --- a/witp/src/main/java/dev/efnilite/ip/menu/LeaderboardMenu.java +++ b/witp/src/main/java/dev/efnilite/ip/menu/community/LeaderboardMenu.java @@ -1,8 +1,9 @@ -package dev.efnilite.ip.menu; +package dev.efnilite.ip.menu.community; import dev.efnilite.ip.IP; import dev.efnilite.ip.api.Gamemode; import dev.efnilite.ip.leaderboard.Leaderboard; +import dev.efnilite.ip.menu.MainMenu; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.player.data.Score; import dev.efnilite.ip.util.Stopwatch; diff --git a/witp/src/main/java/dev/efnilite/ip/menu/play/PlayMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/play/PlayMenu.java new file mode 100644 index 00000000..2bf1f8aa --- /dev/null +++ b/witp/src/main/java/dev/efnilite/ip/menu/play/PlayMenu.java @@ -0,0 +1,52 @@ +package dev.efnilite.ip.menu.play; + +import dev.efnilite.ip.IP; +import dev.efnilite.ip.ParkourOption; +import dev.efnilite.ip.menu.DynamicMenu; +import dev.efnilite.vilib.inventory.Menu; +import dev.efnilite.vilib.inventory.animation.SplitMiddleOutAnimation; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +/** + * Class for the main menu, accessed on executing /parkour + */ +public class PlayMenu extends DynamicMenu { + + public static final PlayMenu INSTANCE = new PlayMenu(); + + public PlayMenu() { + // Singleplayer if player is not found + registerMainItem(1, 0, + user -> IP.getConfiguration().getFromItemData(user, "main.singleplayer").click( + event -> SingleplayerMenu.open(event.getPlayer())), + ParkourOption.JOIN::check); + + registerMainItem(1, 2, + user -> IP.getConfiguration().getFromItemData(user, "main.spectator").click( + event -> SpectatorMenu.open(event.getPlayer())), + // display spectator if the player isn't already one + ParkourOption.JOIN::check); + + // Always allow closing of the menu + registerMainItem(3, 10, + user -> IP.getConfiguration().getFromItemData(user, "general.close") + .click(event -> event.getPlayer().closeInventory()), + player -> true); + } + + /** + * Opens the main menu. + * + * @param player + * The player to open the menu to + */ + public void open(Player player) { + Menu menu = new Menu(4, "Play") + .fillBackground(Material.GRAY_STAINED_GLASS_PANE) + .animation(new SplitMiddleOutAnimation()) + .distributeRowEvenly(0, 1, 2, 3); + + display(player, menu); + } +} \ No newline at end of file diff --git a/witp/src/main/java/dev/efnilite/ip/menu/SingleplayerMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/play/SingleplayerMenu.java similarity index 97% rename from witp/src/main/java/dev/efnilite/ip/menu/SingleplayerMenu.java rename to witp/src/main/java/dev/efnilite/ip/menu/play/SingleplayerMenu.java index 0d919762..c3e9f390 100644 --- a/witp/src/main/java/dev/efnilite/ip/menu/SingleplayerMenu.java +++ b/witp/src/main/java/dev/efnilite/ip/menu/play/SingleplayerMenu.java @@ -1,8 +1,9 @@ -package dev.efnilite.ip.menu; +package dev.efnilite.ip.menu.play; import dev.efnilite.ip.IP; import dev.efnilite.ip.api.Gamemode; import dev.efnilite.ip.api.MultiGamemode; +import dev.efnilite.ip.menu.MainMenu; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.util.config.Configuration; import dev.efnilite.ip.util.config.Option; diff --git a/witp/src/main/java/dev/efnilite/ip/menu/SpectatorMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java similarity index 98% rename from witp/src/main/java/dev/efnilite/ip/menu/SpectatorMenu.java rename to witp/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java index 53d29ef5..64ae38c5 100644 --- a/witp/src/main/java/dev/efnilite/ip/menu/SpectatorMenu.java +++ b/witp/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java @@ -1,7 +1,8 @@ -package dev.efnilite.ip.menu; +package dev.efnilite.ip.menu.play; import dev.efnilite.ip.IP; import dev.efnilite.ip.api.Gamemodes; +import dev.efnilite.ip.menu.MainMenu; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.session.Session; diff --git a/witp/src/main/java/dev/efnilite/ip/menu/SettingsMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/settings/GameSettingsMenu.java similarity index 98% rename from witp/src/main/java/dev/efnilite/ip/menu/SettingsMenu.java rename to witp/src/main/java/dev/efnilite/ip/menu/settings/GameSettingsMenu.java index 05ff2b14..31b558fe 100644 --- a/witp/src/main/java/dev/efnilite/ip/menu/SettingsMenu.java +++ b/witp/src/main/java/dev/efnilite/ip/menu/settings/GameSettingsMenu.java @@ -1,8 +1,10 @@ -package dev.efnilite.ip.menu; +package dev.efnilite.ip.menu.settings; import dev.efnilite.ip.IP; import dev.efnilite.ip.ParkourOption; import dev.efnilite.ip.api.StyleType; +import dev.efnilite.ip.menu.DynamicMenu; +import dev.efnilite.ip.menu.MainMenu; import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.util.Util; import dev.efnilite.ip.util.config.Configuration; @@ -34,11 +36,11 @@ * @since v3.0.0 * @author Efnilite */ -public class SettingsMenu extends DynamicMenu { +public class GameSettingsMenu extends DynamicMenu { - public static final SettingsMenu INSTANCE = new SettingsMenu(); + public static final GameSettingsMenu INSTANCE = new GameSettingsMenu(); - public SettingsMenu(ParkourOption... disabled) { + public GameSettingsMenu(ParkourOption... disabled) { // ---------- top row ---------- diff --git a/witp/src/main/java/dev/efnilite/ip/menu/settings/SettingsMenu.java b/witp/src/main/java/dev/efnilite/ip/menu/settings/SettingsMenu.java new file mode 100644 index 00000000..079d1be5 --- /dev/null +++ b/witp/src/main/java/dev/efnilite/ip/menu/settings/SettingsMenu.java @@ -0,0 +1,73 @@ +package dev.efnilite.ip.menu.settings; + +import dev.efnilite.ip.IP; +import dev.efnilite.ip.ParkourOption; +import dev.efnilite.ip.menu.DynamicMenu; +import dev.efnilite.ip.menu.LangMenu; +import dev.efnilite.ip.menu.community.LeaderboardMenu; +import dev.efnilite.ip.player.ParkourPlayer; +import dev.efnilite.ip.player.ParkourUser; +import dev.efnilite.vilib.inventory.Menu; +import dev.efnilite.vilib.inventory.animation.SplitMiddleOutAnimation; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +/** + * Class for the main menu, accessed on executing /parkour + */ +public class SettingsMenu extends DynamicMenu { + + public static final SettingsMenu INSTANCE = new SettingsMenu(); + + public SettingsMenu() { + + // Settings if player is active + registerMainItem(1, 9, + user -> IP.getConfiguration().getFromItemData(user, "main.settings").click(event -> { + ParkourPlayer pp = ParkourPlayer.getPlayer(event.getPlayer()); + + if (pp != null) { + pp.getGenerator().menu(); + } + }), player -> ParkourPlayer.isActive(player) && ParkourOption.SETTINGS.check(player)); + + // Quit button if player is active + registerMainItem(1, 10, + user -> IP.getConfiguration().getFromItemData(user, "main.quit").click(event -> + ParkourUser.leave(event.getPlayer())), + ParkourPlayer::isActive); + + // Leaderboard only if player has perms + registerMainItem(3, 0, + user -> IP.getConfiguration().getFromItemData(user, "main.leaderboard").click( + event -> LeaderboardMenu.open(event.getPlayer())), + ParkourOption.LEADERBOARD::check); + + // Language only if player has perms + registerMainItem(3, 1, + user -> IP.getConfiguration().getFromItemData(user, "main.language").click( + event -> LangMenu.open(ParkourPlayer.getPlayer(event.getPlayer()))), + player -> ParkourPlayer.isActive(player) && ParkourOption.LANGUAGE.check(player)); + + // Always allow closing of the menu + registerMainItem(3, 10, + user -> IP.getConfiguration().getFromItemData(user, "general.close") + .click(event -> event.getPlayer().closeInventory()), + player -> true); + } + + /** + * Opens the main menu. + * + * @param player + * The player to open the menu to + */ + public void open(Player player) { + Menu menu = new Menu(4, "Parkour") + .fillBackground(Material.GRAY_STAINED_GLASS_PANE) + .animation(new SplitMiddleOutAnimation()) + .distributeRowEvenly(0, 1, 2, 3); + + display(player, menu); + } +} \ No newline at end of file diff --git a/witp/src/main/java/dev/efnilite/ip/util/config/Configuration.java b/witp/src/main/java/dev/efnilite/ip/util/config/Configuration.java index a99161ef..4072e8a7 100644 --- a/witp/src/main/java/dev/efnilite/ip/util/config/Configuration.java +++ b/witp/src/main/java/dev/efnilite/ip/util/config/Configuration.java @@ -42,8 +42,7 @@ public class Configuration { public Configuration(Plugin plugin) { this.plugin = plugin; - List defaultFiles = Arrays.asList("config.yml", "rewards-v2.yml", "generation.yml", "schematics.yml", - "lang/messages-v3.yml", "lang/items-v3.yml", "lang/scoreboard-v3.yml"); + List defaultFiles = Arrays.asList("config.yml", "rewards-v2.yml", "generation.yml", "schematics.yml", "lang/messages-v3.yml", "lang/items-v3.yml", "lang/scoreboard-v3.yml"); for (String name : defaultFiles) { File file = new File(plugin.getDataFolder(), name);