From 4ca58d85afe9b3362fa643f3575a6cbe4c35ab94 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Tue, 10 Feb 2026 11:51:38 +0100 Subject: [PATCH 1/5] Dream Milestone Part.1 --- src/main/java/fr/openmc/core/OMCPlugin.java | 2 +- .../commands/CityMilestoneCommands.java | 2 +- .../displays/bossbar/BossbarManager.java | 4 +- .../core/features/dream/DreamManager.java | 8 +- .../features/dream/events/AltarBindEvent.java | 35 +++++++++ .../altar => events}/AltarCraftingEvent.java | 12 +-- .../dream/events/DreamEnterEvent.java | 29 +++++++ .../events/PlayerEnterStructureEvent.java | 33 ++++++++ .../events/PlayerExitStructureEvent.java | 33 ++++++++ .../structures/DreamStructuresManager.java | 3 +- .../dream/PlayerCommandListener.java | 3 +- .../listeners/dream/PlayerSleepListener.java | 7 +- .../dream/listeners/orb/PlayerObtainOrb.java | 2 +- .../PlayerEnterStructureListener.java | 37 +++++++++ .../PlayerExitStructureListener.java | 37 +++++++++ .../dream/mecanism/altar/AltarManager.java | 5 +- .../dream/milestone/DreamMilestone.java | 51 +++++++++++++ .../features/dream/milestone/DreamSteps.java | 40 ++++++++++ .../commands/DreamMilestoneCommand.java | 5 ++ .../quests/AltarDominationOrbQuest.java | 56 ++++++++++++++ .../quests/CraftDominationOrbQuest.java | 55 ++++++++++++++ .../milestone/quests/CraftingTableQuest.java | 54 +++++++++++++ .../dream/milestone/quests/CraftsQuest.java | 51 +++++++++++++ .../milestone/quests/CubeTempleQuest.java | 48 ++++++++++++ .../dream/milestone/quests/GetHeartQuest.java | 57 ++++++++++++++ .../dream/milestone/quests/OldAxeQuest.java | 57 ++++++++++++++ .../dream/milestone/quests/SleepQuest.java | 51 +++++++++++++ .../dream/milestone/quests/SoulOrbQuest.java | 56 ++++++++++++++ .../dream/milestone/quests/SoulsQuest.java | 58 ++++++++++++++ .../dream/registries/DreamItemRegistry.java | 4 +- .../features/milestones/MilestoneCommand.java | 5 +- .../features/milestones/MilestoneModel.java | 6 +- .../features/milestones/MilestoneSnake.java | 65 ++++++++++++++++ .../features/milestones/MilestoneType.java | 14 +++- ...TutorialUtils.java => MilestoneUtils.java} | 12 +-- .../milestones/MilestonesManager.java | 31 ++++---- .../milestones/menus/MainMilestonesMenu.java | 21 ++--- .../milestones/menus/MilestoneMenu.java | 76 ++----------------- .../listeners/TutorialBossBarEvent.java | 4 +- .../tutorial/quests/BreakAyweniteQuest.java | 4 +- .../tutorial/quests/CityCreateQuest.java | 4 +- .../tutorial/quests/CityLevelTwoQuest.java | 4 +- .../tutorial/quests/ClaimLetterQuest.java | 4 +- .../tutorial/quests/FinishQuestQuest.java | 4 +- .../tutorial/quests/HomeCreateQuest.java | 4 +- .../tutorial/quests/HomeUpgradeQuest.java | 4 +- .../quests/OpenAdminShopMenuQuest.java | 4 +- .../tutorial/quests/OpenContestMenuQuest.java | 4 +- .../tutorial/quests/OpenQuestMenuQuest.java | 4 +- .../quests/OpenSettingsMenuQuest.java | 4 +- .../tutorial/quests/SellBuyQuest.java | 4 +- .../tutorial/quests/SpareBankQuest.java | 4 +- .../core/features/quests/objects/Quest.java | 40 +++++++++- .../openmc/core/utils/world/WorldUtils.java | 13 ++++ 54 files changed, 1070 insertions(+), 164 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java rename src/main/java/fr/openmc/core/features/dream/{mecanism/altar => events}/AltarCraftingEvent.java (72%) create mode 100644 src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java create mode 100644 src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java create mode 100644 src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java create mode 100644 src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerEnterStructureListener.java create mode 100644 src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerExitStructureListener.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java create mode 100644 src/main/java/fr/openmc/core/features/milestones/MilestoneSnake.java rename src/main/java/fr/openmc/core/features/milestones/{tutorial/utils/TutorialUtils.java => MilestoneUtils.java} (86%) diff --git a/src/main/java/fr/openmc/core/OMCPlugin.java b/src/main/java/fr/openmc/core/OMCPlugin.java index 7974063fc..3d9e0c57b 100644 --- a/src/main/java/fr/openmc/core/OMCPlugin.java +++ b/src/main/java/fr/openmc/core/OMCPlugin.java @@ -149,12 +149,12 @@ public void onEnable() { public void loadWithItemsAdder() { CustomItemRegistry.init(); CustomUsableItemRegistry.init(); - MilestonesManager.init(); QuestsManager.init(); CityManager.init(); ContestManager.init(); DreamManager.init(); MultiBlockManager.init(); + MilestonesManager.init(); if (WorldGuardHook.isHasWorldGuard()) { ParticleUtils.spawnParticlesInRegion("spawn", Bukkit.getWorld("world"), Particle.CHERRY_LEAVES, 50, 70, 130); ParticleUtils.spawnContestParticlesInRegion("spawn", Bukkit.getWorld("world"), 10, 70, 135); diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/CityMilestoneCommands.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/CityMilestoneCommands.java index a7cf8922a..8adff3ed4 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/CityMilestoneCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/CityMilestoneCommands.java @@ -11,7 +11,7 @@ public class CityMilestoneCommands { @Command({"city milestone", "ville milestone"}) @CommandPermission("omc.commands.city.milestone") - @Description("Ouvre le menu des maires") + @Description("Ouvre le menu du milestone de ville") void milestone(Player sender) { City playerCity = CityManager.getPlayerCity(sender.getUniqueId()); diff --git a/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java b/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java index fdd9b1bca..1c1b003fd 100644 --- a/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java +++ b/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java @@ -3,7 +3,7 @@ import fr.openmc.core.CommandsManager; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.displays.bossbar.commands.BossBarCommand; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -179,7 +179,7 @@ public static void toggleBossBar(Player player) { } case TUTORIAL -> { - TutorialUtils.setBossBar(player); + MilestoneUtils.setBossBar(player); enabled = true; playerPreferences.put(uuid, true); } diff --git a/src/main/java/fr/openmc/core/features/dream/DreamManager.java b/src/main/java/fr/openmc/core/features/dream/DreamManager.java index edf3d859e..dae0c60e3 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamManager.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamManager.java @@ -13,6 +13,7 @@ import fr.openmc.core.features.city.sub.mayor.perks.Perks; import fr.openmc.core.features.dream.commands.AdminDreamCommands; import fr.openmc.core.features.dream.commands.DreamCommands; +import fr.openmc.core.features.dream.events.DreamEnterEvent; import fr.openmc.core.features.dream.generation.DreamBiome; import fr.openmc.core.features.dream.generation.DreamDimensionManager; import fr.openmc.core.features.dream.generation.listeners.CloudStructureDispenserListener; @@ -26,6 +27,8 @@ import fr.openmc.core.features.dream.listeners.others.PlayerEatSomnifere; import fr.openmc.core.features.dream.listeners.others.SingularityCraftListener; import fr.openmc.core.features.dream.listeners.registry.DreamItemEquipListener; +import fr.openmc.core.features.dream.listeners.strctures.PlayerEnterStructureListener; +import fr.openmc.core.features.dream.listeners.strctures.PlayerExitStructureListener; import fr.openmc.core.features.dream.mecanism.cloudfishing.CloudFishingManager; import fr.openmc.core.features.dream.mecanism.cold.ColdManager; import fr.openmc.core.features.dream.mecanism.metaldetector.MetalDetectorManager; @@ -82,7 +85,9 @@ public static void init() { new CraftingConvertorListener(), new DreamItemEquipListener(), new DreamArmorImplListener(), - new SingularityCraftListener() + new SingularityCraftListener(), + new PlayerEnterStructureListener(), + new PlayerExitStructureListener() ); // ** MANAGERS ** @@ -229,6 +234,7 @@ public static void addDreamPlayer(Player player, Location oldLocation) throws IO DreamPlayer newDreamPlayer = new DreamPlayer(player, oldInv, oldLocation, dreamPlayerInv); dreamPlayerData.put(player.getUniqueId(), newDreamPlayer); playerSaveData.put(player.getUniqueId(), newDreamPlayer.savePlayer()); + OMCPlugin.getInstance().getServer().getPluginManager().callEvent(new DreamEnterEvent(player)); } public static void removeDreamPlayer(Player player, Location dreamLocation) { diff --git a/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java new file mode 100644 index 000000000..acd556e99 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java @@ -0,0 +1,35 @@ +package fr.openmc.core.features.dream.events; + +import fr.openmc.core.features.dream.mecanism.altar.AltarRecipes; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import lombok.Getter; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class AltarBindEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + private final DreamItem item; + private final AltarRecipes recipe; + private final Location altarLocation; + + public AltarBindEvent(Player player, DreamItem item, AltarRecipes recipe, Location altarLocation) { + this.player = player; + this.item = item; + this.recipe = recipe; + this.altarLocation = altarLocation; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarCraftingEvent.java b/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java similarity index 72% rename from src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarCraftingEvent.java rename to src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java index 5fd41cff2..25b4ae008 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarCraftingEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java @@ -1,5 +1,6 @@ -package fr.openmc.core.features.dream.mecanism.altar; +package fr.openmc.core.features.dream.events; +import fr.openmc.core.features.dream.mecanism.altar.AltarRecipes; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import lombok.Getter; import org.bukkit.entity.Player; @@ -11,13 +12,12 @@ public class AltarCraftingEvent extends Event { private static final HandlerList HANDLERS = new HandlerList(); private final Player player; + private final AltarRecipes recipe; private final DreamItem craftedItem; - - /** - * @param player The player whose dream time has ended - */ - public AltarCraftingEvent(Player player, DreamItem craftItem) { + + public AltarCraftingEvent(Player player, AltarRecipes recipe, DreamItem craftItem) { this.player = player; + this.recipe = recipe; this.craftedItem = craftItem; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java b/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java new file mode 100644 index 000000000..e336206cf --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java @@ -0,0 +1,29 @@ +package fr.openmc.core.features.dream.events; + +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class DreamEnterEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + + /** + * @param player The player whose enter in his dream + */ + public DreamEnterEvent(Player player) { + this.player = player; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java new file mode 100644 index 000000000..3448e495c --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java @@ -0,0 +1,33 @@ +package fr.openmc.core.features.dream.events; + +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerEnterStructureEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + private final DreamStructure structure; + + /** + * @param player The player who enter in the structure + * @param structure The structure where the player enters on + */ + public PlayerEnterStructureEvent(Player player, DreamStructure structure) { + this.player = player; + this.structure = structure; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java new file mode 100644 index 000000000..ea714caeb --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java @@ -0,0 +1,33 @@ +package fr.openmc.core.features.dream.events; + +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerExitStructureEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + private final DreamStructure structure; + + /** + * @param player The player who enter in the structure + * @param structure The structure where the player enters on + */ + public PlayerExitStructureEvent(Player player, DreamStructure structure) { + this.player = player; + this.structure = structure; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/dream/generation/structures/DreamStructuresManager.java b/src/main/java/fr/openmc/core/features/dream/generation/structures/DreamStructuresManager.java index 3a2433938..46f28404c 100644 --- a/src/main/java/fr/openmc/core/features/dream/generation/structures/DreamStructuresManager.java +++ b/src/main/java/fr/openmc/core/features/dream/generation/structures/DreamStructuresManager.java @@ -10,6 +10,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.serialization.ConfigurationSerialization; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -78,7 +79,7 @@ public static void addStructure(DreamStructure.DreamType type, BlockVector3 min, } } - public static DreamStructure getStructureAt(Location loc) { + public static @Nullable DreamStructure getStructureAt(Location loc) { for (DreamStructure s : structures) { if (s.isInside(loc)) return s; } diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerCommandListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerCommandListener.java index 1f114239f..0a96614a1 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerCommandListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerCommandListener.java @@ -15,7 +15,8 @@ public class PlayerCommandListener implements Listener { private final Set allowedCommands = Set.of( "/crafts", "/leave", - "/ia omc_dream" + "/ia omc_dream", + "/milestone" ); @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java index c3a2a52c0..1de9c2963 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java @@ -28,9 +28,8 @@ public void onPlayerSleep(PlayerBedEnterEvent event) { if (!event.getBedEnterResult().equals(PlayerBedEnterEvent.BedEnterResult.OK)) return; if (playersDreaming.contains(player.getUniqueId())) return; - - Random random = new Random(); - double randomValue = random.nextDouble(); + + double randomValue = new Random().nextDouble(); if (randomValue < DreamManager.calculateDreamProbability(player)) return; @@ -43,8 +42,6 @@ public void onPlayerSleep(PlayerBedEnterEvent event) { false )); playersDreaming.add(player.getUniqueId()); - - } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/orb/PlayerObtainOrb.java b/src/main/java/fr/openmc/core/features/dream/listeners/orb/PlayerObtainOrb.java index 74d3980c4..89c504e82 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/orb/PlayerObtainOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/orb/PlayerObtainOrb.java @@ -3,10 +3,10 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.AltarCraftingEvent; import fr.openmc.core.features.dream.events.GlaciteTradeEvent; import fr.openmc.core.features.dream.events.MetalDetectorLootEvent; import fr.openmc.core.features.dream.generation.DreamBiome; -import fr.openmc.core.features.dream.mecanism.altar.AltarCraftingEvent; import fr.openmc.core.features.dream.mecanism.tradernpc.GlaciteTrade; import fr.openmc.core.features.dream.models.db.DBDreamPlayer; import fr.openmc.core.features.dream.models.db.DreamPlayer; diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerEnterStructureListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerEnterStructureListener.java new file mode 100644 index 000000000..f683ea2fb --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerEnterStructureListener.java @@ -0,0 +1,37 @@ +package fr.openmc.core.features.dream.listeners.strctures; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.PlayerEnterStructureEvent; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.MessagesManager; +import fr.openmc.core.utils.messages.Prefix; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class PlayerEnterStructureListener implements Listener { + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + Location from = e.getFrom(); + Location to = e.getTo(); + if ((from.getBlockX() >> 4) != (to.getBlockX() >> 4) || (from.getBlockZ() >> 4) != (to.getBlockZ() >> 4)) return; + + DreamStructure oldStructure = DreamStructuresManager.getStructureAt(from); + DreamStructure newStructure = DreamStructuresManager.getStructureAt(to); + if (oldStructure == newStructure) return; + if (newStructure == null) return; + + MessagesManager.sendMessage(player, Component.text("§7Vous entrez dans : " + newStructure.type().getName()), Prefix.DREAM, MessageType.INFO, true); + Bukkit.getServer().getPluginManager().callEvent(new PlayerEnterStructureEvent(player, newStructure)); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerExitStructureListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerExitStructureListener.java new file mode 100644 index 000000000..57fb8af2e --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/listeners/strctures/PlayerExitStructureListener.java @@ -0,0 +1,37 @@ +package fr.openmc.core.features.dream.listeners.strctures; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.PlayerExitStructureEvent; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.MessagesManager; +import fr.openmc.core.utils.messages.Prefix; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class PlayerExitStructureListener implements Listener { + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + Location from = e.getFrom(); + Location to = e.getTo(); + if ((from.getBlockX() >> 4) != (to.getBlockX() >> 4) || (from.getBlockZ() >> 4) != (to.getBlockZ() >> 4)) return; + + DreamStructure oldStructure = DreamStructuresManager.getStructureAt(from); + DreamStructure newStructure = DreamStructuresManager.getStructureAt(to); + if (oldStructure == newStructure) return; + if (newStructure != null) return; + + MessagesManager.sendMessage(player, Component.text("§7Vous sortez de : " + oldStructure.type().getName()), Prefix.DREAM, MessageType.INFO, true); + Bukkit.getServer().getPluginManager().callEvent(new PlayerExitStructureEvent(player, oldStructure)); + } +} \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarManager.java b/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarManager.java index 8fed4ecd7..c9ba5e44f 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarManager.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/altar/AltarManager.java @@ -1,6 +1,8 @@ package fr.openmc.core.features.dream.mecanism.altar; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.dream.events.AltarBindEvent; +import fr.openmc.core.features.dream.events.AltarCraftingEvent; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.utils.ItemUtils; @@ -57,6 +59,7 @@ public static void bindItem(Player player, Location altarLoc, ItemStack item) { floatingItems.put(altarLoc, display); boundPlayers.put(altarLoc, player.getUniqueId()); + Bukkit.getPluginManager().callEvent(new AltarBindEvent(player, dreamItem, recipe, altarLoc)); MessagesManager.sendMessage(player, Component.text("§aVotre objet est lié à l'§5Altar"), Prefix.DREAM, MessageType.ERROR, false); } @@ -104,7 +107,7 @@ public static void tryRitual(Player player, Location altarLoc) { player.getInventory().addItem(recipe.getOutput().getBest()); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> - Bukkit.getServer().getPluginManager().callEvent(new AltarCraftingEvent(player, recipe.getOutput())) + Bukkit.getServer().getPluginManager().callEvent(new AltarCraftingEvent(player, recipe, recipe.getOutput())) ); unbind(altarLoc); diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java new file mode 100644 index 000000000..9fd42f013 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java @@ -0,0 +1,51 @@ +package fr.openmc.core.features.dream.milestone; + +import fr.openmc.api.menulib.Menu; +import fr.openmc.core.features.milestones.Milestone; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.menus.MilestoneMenu; +import fr.openmc.core.features.quests.objects.Quest; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.List; + +public class DreamMilestone implements Milestone { + @Override + public String getName() { + return "Tutoriel de la Dream Dim"; + } + + @Override + public List getDescription() { + return List.of( + Component.text("§7Plongez-vous dans un §6long sommeil §7!"), + Component.text("§7Arpentez vos rêves et gagnez des §6récompenses §7!"), + Component.text("§7Un monde nouveau s'offre à vous,"), + Component.text("§7mais arriverez-vous à vous extraire de ce lieu sombre et chaotique ?") + ); + } + + @Override + public ItemStack getIcon() { + return ItemStack.of(Material.SCULK); + } + + @Override + public List getSteps() { + return Arrays.stream(DreamSteps.values()).map(DreamSteps::getQuest).toList(); + } + + @Override + public MilestoneType getType() { + return MilestoneType.DREAM; + } + + @Override + public Menu getMenu(Player player) { + return new MilestoneMenu(player, this); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java new file mode 100644 index 000000000..c080fd35a --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java @@ -0,0 +1,40 @@ +package fr.openmc.core.features.dream.milestone; + +import fr.openmc.core.features.dream.milestone.quests.*; +import fr.openmc.core.features.quests.objects.Quest; +import lombok.Getter; + +@Getter +public enum DreamSteps { + + SLEEP(null), + CRAFTS(null), + CRAFTING_TABLE(null), + GET_HEART(null), + OLD_AXE(null), + DOMINATION_ORB(null), + CUBE_TEMPLE(null), + ALTAR_DOMINATION(null), + SOULS(null), + SOUL_ORB(null), + ; + + private Quest quest; + + DreamSteps(Quest quest) { + this.quest = quest; + } + + static { + SLEEP.quest = new SleepQuest(); + CRAFTS.quest = new CraftsQuest(); + CRAFTING_TABLE.quest = new CraftingTableQuest(); + GET_HEART.quest = new GetHeartQuest(); + OLD_AXE.quest = new OldAxeQuest(); + DOMINATION_ORB.quest = new CraftDominationOrbQuest(); + CUBE_TEMPLE.quest = new CubeTempleQuest(); + ALTAR_DOMINATION.quest = new AltarDominationOrbQuest(); + SOULS.quest = new SoulsQuest(); + SOUL_ORB.quest = new SoulOrbQuest(); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java b/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java new file mode 100644 index 000000000..5780a1c8f --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java @@ -0,0 +1,5 @@ +package fr.openmc.core.features.dream.milestone.commands; + +public class DreamMilestoneCommand { + +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java new file mode 100644 index 000000000..2a4f5786e --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java @@ -0,0 +1,56 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.AltarBindEvent; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.items.orb.DominationOrb; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class AltarDominationOrbQuest extends Quest implements Listener { + public AltarDominationOrbQuest() { + super( + "Début du rituel", + List.of( + "§fDéposer l'§dOrbe de Domination §fsur l'§dAltar", + "§8§oCommençons le rituel de conversion de l'orbe" + ), + Material.ENCHANTING_TABLE + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Hmmm... avec cette table étrange, il est visiblement possible de transformer l'Orbe de Domination. Mais pour en faire quoi !? \n" + + "Ce qui est sur, c'est qui me manque quelque chose pour accomplir ce rituel jusqu'au bout.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.ALTAR_DOMINATION.ordinal())) + )); + } + + @EventHandler + public void onAltarBind(AltarBindEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = e.getItem(); + if (item == null) return; + if (item instanceof DominationOrb) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.ALTAR_DOMINATION.ordinal()) return; + + this.incrementProgressInDream(player.getUniqueId()); + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java new file mode 100644 index 000000000..e5e385b4d --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java @@ -0,0 +1,55 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.orb.DominationOrb; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class CraftDominationOrbQuest extends Quest implements Listener { + public CraftDominationOrbQuest() { + super( + "Dominer, c'est cool", + List.of( + "§fFabriquer l'§dOrbe de Domination", + "§8§o1 sur 5 pour les dominer tous !" + ), + DreamItemRegistry.getByName("omc_dream:domination_orb").getBest() + ); + this.addTier(new QuestTier( + 1, + new QuestTextReward("Et d'une ! Et cela me donne accès à une nouvelle zone. Il faut que je récupère les autres pour avoir accès à l'ensemble de mes rêves.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.DOMINATION_ORB.ordinal())) + )); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof DominationOrb) { + if (e.getWhoClicked() instanceof Player player) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.DOMINATION_ORB.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java new file mode 100644 index 000000000..13dea2181 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java @@ -0,0 +1,54 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.Recipe; + +import java.util.List; + +public class CraftingTableQuest extends Quest implements Listener { + public CraftingTableQuest() { + super( + "Une nouvelle survie ?", + List.of( + "§fFabriquer une §dtable de craft", + "§8§oBizarre cette survie de nuit... on ne voit pas en dehors des pleines de sculks" + ), + Material.CRAFTING_TABLE + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Bon, maintenant que j'ai la table, cherchons de quoi faire des outils et... comment se fait-il qu'il y ait des Creakings ici !?", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CRAFTING_TABLE.ordinal())) + )); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + Recipe recipe = e.getRecipe(); + + if (recipe.getResult().getType() != Material.CRAFTING_TABLE) return; + + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CRAFTING_TABLE.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java new file mode 100644 index 000000000..faefbdcee --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java @@ -0,0 +1,51 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +import java.util.List; + +public class CraftsQuest extends Quest implements Listener { + public CraftsQuest() { + super( + "Apprendre de nouveaux crafts", + List.of( + "§fFaire §d/crafts §fpour voir les crafts disponibles", + "§8§oCette dimension a ses propres règles, je dois les apprendre pour y survivre" + ), + Material.BOOK + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Ce monde sombre et nouveau semble complexe. Mais cela ressemble à une survie normale, non ? Alors commençons par les bases, la table de craft.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CRAFTS.ordinal())) + )); + } + + @EventHandler + public void onCommand(PlayerCommandPreprocessEvent e) { + String s = e.getMessage(); + if (!s.equals("/crafts")) return; + + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CRAFTS.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java new file mode 100644 index 000000000..42a9f39e6 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java @@ -0,0 +1,48 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.PlayerEnterStructureEvent; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class CubeTempleQuest extends Quest implements Listener { + public CubeTempleQuest() { + super( + "Vénérer le Cube des Ämes", + List.of( + "§fEntrer dans le §dTemple des Âmes", + "§8§oA la recherche du monument du Cube des Âmes... on est malgré tout dans Minecraft, même dans un rêve !" + ), + Material.POLISHED_BLACKSTONE_BRICKS + ); + this.addTier(new QuestTier( + 1, + new QuestTextReward("Wow, c'est grand ! Qui a pu construire une temple pareil ? Et pourquoi ? Je dois le découvrir. \n" + + "Tiens... il semble y avoir quelque chose en son centre...", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CUBE_TEMPLE.ordinal())) + )); + } + + @EventHandler + public void onCastleEnter(PlayerEnterStructureEvent e) { + if (e.getStructure().type() != DreamStructure.DreamType.SOUL_ALTAR) return; + Player player = e.getPlayer(); + + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CUBE_TEMPLE.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java new file mode 100644 index 000000000..d00a987f2 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.loots.CreakingHeart; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; + +import java.util.List; + +public class GetHeartQuest extends Quest implements Listener { + + public GetHeartQuest() { + super( + "La résine n'a pas de coeur", + List.of( + "§fRécupérer un §dCoeur de Creaking", + "§8§oOn cherche la résine ou le coeur ?" + ), + Material.RESIN_CLUMP + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Ah ! Mais c'est vrai qu'il protègent leurs coeurs, qui va mettre bien utile par la suite. Mais bref, trêve de tergiversation, il me faut des outils.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.GET_HEART.ordinal())) + )); + } + + @EventHandler + public void onPickUp(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getItem().getItemStack()); + if (item == null) return; + if (item instanceof CreakingHeart) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.GET_HEART.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java new file mode 100644 index 000000000..f115c2a78 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.tools.OldCreakingAxe; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class OldAxeQuest extends Quest implements Listener { + + public OldAxeQuest() { + super( + "Le premier outil ! Enfin !", + List.of( + "§fFabriquer une §dVieille hache du Creaking", + "§8§oNotre meilleur ami dans ce monde !" + ), + DreamItemRegistry.getByName("omc_dream:old_creaking_axe").getBestTransferable() + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Une hâche, c'est déjà ça. Il faut collecter les orbes qui sont au nombre de 5. La première est d'ailleurs craftable...", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.OLD_AXE.ordinal())) + )); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof OldCreakingAxe) { + if (e.getWhoClicked() instanceof Player player) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.OLD_AXE.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java new file mode 100644 index 000000000..4170c3c8f --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java @@ -0,0 +1,51 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.DreamEnterEvent; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class SleepQuest extends Quest implements Listener { + + public SleepQuest() { + super( + "Dormir, c'est la vie", + List.of( + "§fEntrer dans la §ddimension des rêves", + "§8§oQue c'est bon de dormir pour se reposer de la dure vie des villes..." + ), + Material.RED_BED + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("ZZZzzz... que se passe-t-il ? Je vois un monde sombre rempli de créatures étranges. Suis-je en train de rêver ? " + + "Ce monde est si différent de l'overworld, il faut que je m'adapte et que je comprenne ce monde.\n" + + "§d/milestone §opour voir la suite du guide", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SLEEP.ordinal())) + )); //TODO Revoir les récompenses + + } + + @EventHandler + public void onDreamEnter(DreamEnterEvent e) { + Player player = e.getPlayer(); + + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SLEEP.ordinal()) return; + + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java new file mode 100644 index 000000000..a304c3706 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java @@ -0,0 +1,56 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.AltarCraftingEvent; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.orb.SoulOrb; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class SoulOrbQuest extends Quest implements Listener { + public SoulOrbQuest() { + super( + "Il faut un sacrifice !", + List.of( + "§fObtenir l'§dOrbe des Âmes", + "§8§oÂmes dans la poche, permettez moi, par votre pouvoir, d'obtenir votre orbe avec le sacrifice de l'Orbe de Domination." + ), + DreamItemRegistry.getByName("omc_dream:ame_orb").getBest() + ); + + this.addTier(new QuestTier( + 1, + new QuestTextReward("Et de deux ! Maintenant que j'ai l'Orbe des Âmes, je n'ai plus celle de Domination, il faudra donc que j'y retourne en fabriquer. \n" + + "Et où dois-je aller maintenant ? Hmmmm... ces nuages m'intriguent, j'ai l'impression d'y voir un château.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SOUL_ORB.ordinal())) + )); + } + + @EventHandler + public void onSoulOrbCrafting(AltarCraftingEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = e.getCraftedItem(); + if (item == null) return; + if (item instanceof SoulOrb) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SOUL_ORB.ordinal()) return; + + this.incrementProgressInDream(player.getUniqueId()); + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java new file mode 100644 index 000000000..7eb1df1e0 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java @@ -0,0 +1,58 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.loots.Soul; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class SoulsQuest extends Quest implements Listener { + public SoulsQuest() { + super( + "Mes amis viennent de l'au-delà", + List.of( + "§fRécuérer §d20 §fâmes", + "§8§oIl me semble avoir vu des créatures volantes rôder vers les grands arbres sombres." + ), + DreamItemRegistry.getByName("omc_dream:soul").getBest() + ); + + this.addTier(new QuestTier( + 20, + new QuestTextReward("Quelles sont ces créatures ? Des joueurs morts ?? \n" + + "A vrai dire, je n'ai pas vraiment envie d'y penser, il me faut cette nouvelle orbe.", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SOULS.ordinal())) + )); + } + + @EventHandler + public void onCollectSoul(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + ItemStack baseItem = e.getItem().getItemStack(); + + DreamItem item = DreamItemRegistry.getByItemStack(baseItem); + if (item == null) return; + if (item instanceof Soul) { + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SOULS.ordinal()) return; + this.incrementProgressInDream(player.getUniqueId(), baseItem.getAmount()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/registries/DreamItemRegistry.java b/src/main/java/fr/openmc/core/features/dream/registries/DreamItemRegistry.java index 6100d1cdb..cfc224f6c 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/DreamItemRegistry.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/DreamItemRegistry.java @@ -61,7 +61,7 @@ public static void init() { registerDreamItem(new CorruptedString("omc_dream:corrupted_string")); registerDreamItem(new CreakingHeart("omc_dream:creaking_heart")); registerDreamItem(new Soul("omc_dream:soul")); - registerDreamItem(new Soul("omc_dream:cloud_key")); + registerDreamItem(new CloudKey("omc_dream:cloud_key")); registerDreamItem(new CorruptedSculk("omc_dream:corrupted_sculk")); registerDreamItem(new OldPaleOakWood("omc_dream:old_pale_oak")); registerDreamItem(new Glacite("omc_dream:glacite")); @@ -124,7 +124,7 @@ public static void init() { registerDreamItem(new MecanicPickaxe("omc_dream:mecanic_pickaxe")); registerDreamItem(new SoulAxe("omc_dream:soul_axe")); registerDreamItem(new OldCreakingAxe("omc_dream:old_creaking_axe")); - registerDreamItem(new OldCreakingAxe("omc_dream:cloud_fishing_rod")); + registerDreamItem(new CloudFishingRod("omc_dream:cloud_fishing_rod")); registerDreamItem(new MeteoWand("omc_dream:meteo_wand")); registerDreamItem(new MetalDetector("omc_dream:metal_detector")); diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneCommand.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneCommand.java index 9bebd33a8..646af21ee 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneCommand.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneCommand.java @@ -1,6 +1,8 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.milestones.menus.MainMilestonesMenu; +import fr.openmc.core.features.milestones.menus.MilestoneMenu; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.CommandPlaceholder; @@ -11,6 +13,7 @@ public class MilestoneCommand { @CommandPlaceholder() void mainCommand(Player player) { - new MainMilestonesMenu(player).open(); + if (DreamUtils.isInDreamWorld(player)) new MilestoneMenu(player, MilestoneType.DREAM.getMilestone()).open(); + else new MainMilestonesMenu(player).open(); } } diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java index 0b2a3d9df..752d1721d 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java @@ -5,11 +5,13 @@ import lombok.Getter; import lombok.Setter; +import java.util.UUID; + @DatabaseTable(tableName = "milestone") @Getter public class MilestoneModel { @DatabaseField(id = true, columnName = "uuid") - private java.util.UUID UUID; + private UUID UUID; @DatabaseField private String type; @DatabaseField(canBeNull = false) @@ -20,7 +22,7 @@ public class MilestoneModel { // required for ORMLite } - public MilestoneModel(java.util.UUID uuid, MilestoneType type, int step) { + public MilestoneModel(UUID uuid, MilestoneType type, int step) { this.UUID = uuid; this.type = type.name(); this.step = step; diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneSnake.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneSnake.java new file mode 100644 index 000000000..f317bf254 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneSnake.java @@ -0,0 +1,65 @@ +package fr.openmc.core.features.milestones; + +import java.util.ArrayList; +import java.util.List; + +public record MilestoneSnake(List nodes, List links) { + + public static MilestoneSnake buildSnake(int count, int[] columns, int startRow, int endRow) { + List nodes = new ArrayList<>(); + List links = new ArrayList<>(); + int placed = 0; + + for (int colIdx = 0; colIdx < columns.length && placed < count; colIdx++) { + int col = columns[colIdx]; + int nextPrimary = (colIdx + 1 < columns.length) ? columns[colIdx + 1] : -1; + boolean topDown = (colIdx % 2 == 0); + + if (topDown) { + // haut + if (placed < count) { + nodes.add(slotAt(startRow, col)); + placed++; + if (placed < count) { + for (int r = startRow + 1; r <= endRow - 1; r++) + links.add(slotAt(r, col)); + } + } + // bas + if (placed < count) { + nodes.add(slotAt(endRow, col)); + placed++; + if (placed < count && nextPrimary != -1) { + for (int c = col + 1; c < nextPrimary; c++) + links.add(slotAt(endRow, c)); + } + } + } else { + // bas + if (placed < count) { + nodes.add(slotAt(endRow, col)); + placed++; + if (placed < count) { + for (int r = endRow - 1; r >= startRow + 1; r--) + links.add(slotAt(r, col)); + } + } + + // haut + if (placed < count) { + nodes.add(slotAt(startRow, col)); + placed++; + if (placed < count && nextPrimary != -1) { + for (int c = col + 1; c < nextPrimary; c++) + links.add(slotAt(startRow, c)); + } + } + } + } + return new MilestoneSnake(nodes, links); + } + + private static int slotAt(int row, int col) { + return row * 9 + col; + } +} \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneType.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneType.java index 1b4662265..64555b63d 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneType.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneType.java @@ -1,17 +1,25 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.features.dream.milestone.DreamMilestone; import fr.openmc.core.features.milestones.tutorial.TutorialMilestone; import lombok.Getter; @Getter public enum MilestoneType { TUTORIAL( - new TutorialMilestone() - ); + new TutorialMilestone(), + true + ), + DREAM( + new DreamMilestone(), + false + ); private final Milestone milestone; + private final boolean bossBar; - MilestoneType(Milestone milestone) { + MilestoneType(Milestone milestone, boolean bossBar) { this.milestone = milestone; + this.bossBar = bossBar; } } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/utils/TutorialUtils.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java similarity index 86% rename from src/main/java/fr/openmc/core/features/milestones/tutorial/utils/TutorialUtils.java rename to src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java index 3a7b10b6e..2c6b492db 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/utils/TutorialUtils.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java @@ -1,22 +1,22 @@ -package fr.openmc.core.features.milestones.tutorial.utils; +package fr.openmc.core.features.milestones; import fr.openmc.core.features.displays.bossbar.BossbarManager; import fr.openmc.core.features.displays.bossbar.BossbarsType; -import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialBossBar; import fr.openmc.core.features.milestones.tutorial.TutorialStep; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; -public class TutorialUtils { - public static void completeStep(MilestoneType type, Player player, TutorialStep step) { - int stepInt = step.ordinal() + 1; +public class MilestoneUtils { + public static void completeStep(MilestoneType type, Player player, int step) { + int stepInt = step + 1; if (MilestonesManager.getPlayerStep(type, player) >= stepInt) return; MilestonesManager.setPlayerStep(type, player, stepInt); + if (!type.isBossBar()) return; // If type = TutorialType + int maxStep = TutorialStep.values().length; if (stepInt >= maxStep) { diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java b/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java index aef99972b..a54db6012 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java @@ -6,6 +6,7 @@ import com.j256.ormlite.table.TableUtils; import fr.openmc.core.CommandsManager; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.dream.milestone.DreamMilestone; import fr.openmc.core.features.milestones.listeners.PlayerJoin; import fr.openmc.core.features.milestones.tutorial.TutorialMilestone; import fr.openmc.core.features.milestones.tutorial.listeners.TutorialBossBarEvent; @@ -22,10 +23,9 @@ public class MilestonesManager { private static Dao millestoneDao; public static void init() { - registerMilestones( - new TutorialMilestone() - ); - + registerMilestone(new TutorialMilestone()); + registerMilestone(new DreamMilestone()); + loadMilestonesData(); registerMilestoneCommand(); @@ -53,11 +53,14 @@ public static void initDB(ConnectionSource connectionSource) throws SQLException public static void loadMilestonesData() { try { List milestoneData = millestoneDao.queryForAll(); - + System.out.println(milestoneData); + for (MilestoneModel data : milestoneData) { MilestoneType type = MilestoneType.valueOf(data.getType()); Milestone milestone = type.getMilestone(); + System.out.println(milestone); milestone.getPlayerData().put(data.getUUID(), data); + System.out.println(milestone.getPlayerData()); } } catch (SQLException e) { throw new RuntimeException(e); @@ -149,17 +152,15 @@ public static Set getRegisteredMilestones() { } /** - * Register one or more milestones. - * This method adds the provided milestones to the internal set and registers their quests. - * @param milestonesRegister the milestones to register + * Register a milestone. + * This method adds the provided milestone to the internal set and registers it quests. + * @param milestone the milestone to register */ - public static void registerMilestones(Milestone... milestonesRegister) { - for (Milestone milestone : milestonesRegister) { - if (milestone == null) continue; - milestones.add(milestone); - - registerQuestMilestone(milestone); - } + public static void registerMilestone(Milestone milestone) { + if (milestone == null) return; + milestones.add(milestone); + + registerQuestMilestone(milestone); } /** diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java index 399b3f3f7..c6e9ad7ca 100644 --- a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java +++ b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java @@ -7,7 +7,6 @@ import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.menu.NoCityMenu; import fr.openmc.core.features.city.sub.milestone.menu.CityMilestoneMenu; -import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; @@ -53,15 +52,11 @@ public void onInventoryClick(InventoryClickEvent click) { Player player = getOwner(); MilestonesManager.getRegisteredMilestones().forEach(milestone -> { - if (milestone.getType().equals(MilestoneType.TUTORIAL)) { - inventory.put(10, new ItemBuilder(this, milestone.getIcon(), itemMeta -> { - itemMeta.displayName(Component.text(milestone.getName())); - itemMeta.lore(milestone.getDescription()); - itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(milestone.getType(), player) + 1 >= milestone.getSteps().size()); - }).setOnClick(event -> { - milestone.getMenu(player).open(); - })); - } + inventory.put(10 + (milestone.getType().ordinal() * 2), new ItemBuilder(this, milestone.getIcon(), itemMeta -> { + itemMeta.displayName(Component.text(milestone.getName())); + itemMeta.lore(milestone.getDescription()); + itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(milestone.getType(), player) + 1 >= milestone.getSteps().size()); + }).setOnClick(event -> milestone.getMenu(player).open())); }); List loreMilestoneVille = new ArrayList<>(); @@ -82,7 +77,7 @@ public void onInventoryClick(InventoryClickEvent click) { loreMilestoneVille.add(Component.text("§e§lCLIQUEZ ICI POUR ACCEDER A VOTRE MILESTONE")); } - inventory.put(12, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { + inventory.put(14, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { itemMeta.displayName(Component.text("§3Milestone des villes")); itemMeta.lore(loreMilestoneVille); }).setOnClick(event -> { @@ -93,10 +88,6 @@ public void onInventoryClick(InventoryClickEvent click) { } })); - inventory.put(14, new ItemBuilder(this, Material.SCULK, itemMeta -> { - itemMeta.displayName(Component.text(" §kd §r§cComming soon §kr")); - })); - inventory.put(16, new ItemBuilder(this, Material.DEAD_BUBBLE_CORAL_BLOCK, itemMeta -> { itemMeta.displayName(Component.text(" §ks §cComming soon §ke")); })); diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java index 184392b91..3d8acbb8b 100644 --- a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java +++ b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java @@ -4,6 +4,7 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.features.milestones.Milestone; +import fr.openmc.core.features.milestones.MilestoneSnake; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.Quest; import net.kyori.adventure.text.Component; @@ -29,10 +30,6 @@ public class MilestoneMenu extends Menu { private static final int[] COLS = {0, 2, 4, 6, 8}; private static final int MAX_VISIBLE_NODES = 2 * COLS.length; - private static int slotAt(int row, int col) { - return row * 9 + col; - } - private static int rowOf(int slot) { return slot / 9; } @@ -76,7 +73,7 @@ public void onInventoryClick(InventoryClickEvent click) { int remaining = Math.max(0, steps.size() - offset); int visible = Math.min(MAX_VISIBLE_NODES, remaining); - Snake snake = buildSnake(visible); + MilestoneSnake snake = MilestoneSnake.buildSnake(visible, COLS, START_ROW, END_ROW); for (int i = 0; i < visible; i++) { int stepIndex = offset + i; @@ -89,7 +86,7 @@ public void onInventoryClick(InventoryClickEvent click) { quest.getDescription(player.getUniqueId()).forEach(line -> stepLore.add(Component.text(line))); - int slot = snake.nodes.get(i); + int slot = snake.nodes().get(i); content.put(slot, new ItemBuilder(this, quest.getIcon(), meta -> { meta.displayName(Component.text( (completed ? "§a" : active ? "§e" : "§7") + quest.getName() @@ -99,13 +96,13 @@ public void onInventoryClick(InventoryClickEvent click) { })); } - for (int j = 0; j < snake.links.size(); j++) { - int a = snake.links.get(j); + for (int j = 0; j < snake.links().size(); j++) { + int a = snake.links().get(j); int segmentIndex = -1; - for (int i = 0; i + 1 < snake.nodes.size(); i++) { - int n1 = snake.nodes.get(i); - int n2 = snake.nodes.get(i + 1); + for (int i = 0; i + 1 < snake.nodes().size(); i++) { + int n1 = snake.nodes().get(i); + int n2 = snake.nodes().get(i + 1); if ((colOf(n1) == colOf(n2) && colOf(n1) == colOf(a) && rowOf(a) > Math.min(rowOf(n1), rowOf(n2)) && rowOf(a) < Math.max(rowOf(n1), rowOf(n2))) || (rowOf(n1) == rowOf(n2) && rowOf(n1) == rowOf(a) && colOf(a) > Math.min(colOf(n1), colOf(n2)) && colOf(a) < Math.max(colOf(n1), colOf(n2)))) { @@ -157,61 +154,4 @@ public void onClose(InventoryCloseEvent event) { public List getTakableSlot() { return List.of(); } - - private record Snake(List nodes, List links) { - } - - private Snake buildSnake(int count) { - List nodes = new ArrayList<>(); - List links = new ArrayList<>(); - int placed = 0; - - for (int colIdx = 0; colIdx < COLS.length && placed < count; colIdx++) { - int col = COLS[colIdx]; - int nextPrimary = (colIdx + 1 < COLS.length) ? COLS[colIdx + 1] : -1; - boolean topDown = (colIdx % 2 == 0); - - if (topDown) { - // haut - if (placed < count) { - nodes.add(slotAt(START_ROW, col)); - placed++; - if (placed < count) { - for (int r = START_ROW + 1; r <= END_ROW - 1; r++) - links.add(slotAt(r, col)); - } - } - // bas - if (placed < count) { - nodes.add(slotAt(END_ROW, col)); - placed++; - if (placed < count && nextPrimary != -1) { - for (int c = col + 1; c < nextPrimary; c++) - links.add(slotAt(END_ROW, c)); - } - } - } else { - // bas - if (placed < count) { - nodes.add(slotAt(END_ROW, col)); - placed++; - if (placed < count) { - for (int r = END_ROW - 1; r >= START_ROW + 1; r--) - links.add(slotAt(r, col)); - } - } - - // haut - if (placed < count) { - nodes.add(slotAt(START_ROW, col)); - placed++; - if (placed < count && nextPrimary != -1) { - for (int c = col + 1; c < nextPrimary; c++) - links.add(slotAt(START_ROW, c)); - } - } - } - } - return new Snake(nodes, links); - } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/listeners/TutorialBossBarEvent.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/listeners/TutorialBossBarEvent.java index 6695025d1..85db1ea27 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/listeners/TutorialBossBarEvent.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/listeners/TutorialBossBarEvent.java @@ -2,7 +2,7 @@ import fr.openmc.core.features.displays.bossbar.BossbarManager; import fr.openmc.core.features.displays.bossbar.BossbarsType; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; +import fr.openmc.core.features.milestones.MilestoneUtils; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,7 +15,7 @@ public class TutorialBossBarEvent implements Listener { void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - TutorialUtils.setBossBar(player); + MilestoneUtils.setBossBar(player); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java index b0923429b..c2dc0b5f5 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java @@ -4,10 +4,10 @@ import fr.openmc.api.hooks.ItemsAdderHook; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialBossBar; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -49,7 +49,7 @@ public BreakAyweniteQuest() { new QuestTextReward("Bien joué ! Vous avez fini l'§6étape " + (step.ordinal() + 1) + " §f! Comme dit précédemment l'§dAywenite §fest un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! ", Prefix.MILLESTONE, MessageType.SUCCESS), new QuestMethodsReward( player -> { - TutorialUtils.completeStep(type, player, step); + MilestoneUtils.completeStep(type, player, step.ordinal()); if (CityManager.getPlayerCity(player.getUniqueId()) != null) { TutorialStep.CITY_CREATE.getQuest().incrementProgress(player.getUniqueId()); diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java index 70abc4124..753b5558c 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java @@ -5,9 +5,9 @@ import fr.openmc.core.features.city.events.CityCreationEvent; import fr.openmc.core.features.city.events.MemberJoinEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -52,7 +52,7 @@ public CityCreateQuest() { ), new QuestMethodsReward( player -> { - TutorialUtils.completeStep(type, player, step); + MilestoneUtils.completeStep(type, player, step.ordinal()); City playerCity = CityManager.getPlayerCity(player.getUniqueId()); if (playerCity.getLevel() >= 2) { diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java index 070ffef44..4dcc8a408 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java @@ -3,9 +3,9 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.sub.milestone.events.CityUpgradeEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -48,7 +48,7 @@ public CityLevelTwoQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java index 2f3cdfcb3..ed6200d85 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java @@ -2,9 +2,9 @@ import fr.openmc.core.features.mailboxes.events.ClaimLetterEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -46,7 +46,7 @@ public ClaimLetterQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java index 4664320da..f93fcc2b2 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java @@ -1,9 +1,9 @@ package fr.openmc.core.features.milestones.tutorial.quests; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.events.QuestCompleteEvent; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; @@ -46,7 +46,7 @@ public FinishQuestQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java index 25377aeb5..6a79d0a79 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java @@ -3,9 +3,9 @@ import fr.openmc.core.features.homes.HomeLimits; import fr.openmc.core.features.homes.events.HomeCreateEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestItemReward; @@ -50,7 +50,7 @@ public HomeCreateQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java index 4127e86c0..88fc29b9a 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java @@ -2,9 +2,9 @@ import fr.openmc.core.features.homes.events.HomeUpgradeEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -46,7 +46,7 @@ public HomeUpgradeQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java index 2660fbacb..68ca9c0cd 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java @@ -3,9 +3,9 @@ import fr.openmc.api.menulib.events.OpenMenuEvent; import fr.openmc.core.features.adminshop.menus.AdminShopMenu; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -47,7 +47,7 @@ public OpenAdminShopMenuQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java index 0c8d4400c..10904a07d 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java @@ -3,9 +3,9 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.mailboxes.MailboxManager; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -53,7 +53,7 @@ public OpenContestMenuQuest() { ), new QuestMethodsReward( player -> { - TutorialUtils.completeStep(type, player, step); + MilestoneUtils.completeStep(type, player, step.ordinal()); List items = new ArrayList<>(); ItemStack aywenite = CustomItemRegistry.getByName("omc_items:aywenite").getBest(); diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java index b5909d310..dd3d83cf5 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java @@ -2,9 +2,9 @@ import fr.openmc.api.menulib.events.OpenMenuEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.menus.QuestsMenu; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; @@ -47,7 +47,7 @@ public OpenQuestMenuQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java index 518e59226..97b1cfc36 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java @@ -2,9 +2,9 @@ import fr.openmc.api.menulib.events.OpenMenuEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -48,7 +48,7 @@ public OpenSettingsMenuQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java index e2bf2f4cf..4c269eb33 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java @@ -3,9 +3,9 @@ import fr.openmc.core.features.adminshop.events.BuyEvent; import fr.openmc.core.features.adminshop.events.SellEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -48,7 +48,7 @@ public SellBuyQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java index 45f1859f3..7fca4d2f6 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java @@ -2,9 +2,9 @@ import fr.openmc.core.features.economy.events.BankDepositEvent; import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.tutorial.TutorialStep; -import fr.openmc.core.features.milestones.tutorial.utils.TutorialUtils; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -48,7 +48,7 @@ public SpareBankQuest() { MessageType.SUCCESS ), new QuestMethodsReward( - player -> TutorialUtils.completeStep(type, player, step) + player -> MilestoneUtils.completeStep(type, player, step.ordinal()) ) )); } diff --git a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java index e415863f7..c7bb4fffb 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java @@ -472,8 +472,40 @@ private void checkTierCompletion(UUID playerUUID) { * @param playerUUID The UUID of the player */ public void incrementProgress(UUID playerUUID) { - incrementProgress(playerUUID, 1); + incrementProgress(playerUUID, 1, false); } + + /** + * Increment the progress of the quest for a player by a specified amount. + *

+ * This method will check if the quest is fully completed, and if not, it will increase the progress. + * @param playerUUID The UUID of the player + * @param amount The amount to increment the progress by + */ + public void incrementProgress(UUID playerUUID, int amount) { + incrementProgress(playerUUID, amount, false); + } + + /** + * Increment the progress for the quest for a player authorizing Dream world + * + * @param playerUUID The UUID of the player + */ + public void incrementProgressInDream(UUID playerUUID) { + incrementProgress(playerUUID, 1, true); + } + + + /** + * Increment the progress of the quest for a player by a specified amount authorizing Dream world. + *

+ * This method will check if the quest is fully completed, and if not, it will increase the progress. + * @param playerUUID The UUID of the player + * @param amount The amount to increment the progress by + */ + public void incrementProgressInDream(UUID playerUUID, int amount) { + incrementProgress(playerUUID, amount, true); + } /** * Increment the progress of the quest for a player by a specified amount. @@ -481,8 +513,9 @@ public void incrementProgress(UUID playerUUID) { * This method will check if the quest is fully completed, and if not, it will increase the progress. * @param playerUUID The UUID of the player * @param amount The amount to increment the progress by + * @param authorizeDream Set if you authorize to increment progress in Dream world */ - public void incrementProgress(UUID playerUUID, int amount) { + public void incrementProgress(UUID playerUUID, int amount, boolean authorizeDream) { if (!this.isFullyCompleted(playerUUID) && !this.progressLock.getOrDefault(playerUUID, false)) { this.progressLock.put(playerUUID, true); @@ -490,8 +523,7 @@ public void incrementProgress(UUID playerUUID, int amount) { Player onlinePlayer = Bukkit.getPlayer(playerUUID); if (onlinePlayer != null && onlinePlayer.isOnline() - && (!onlinePlayer.getGameMode().equals(GameMode.SURVIVAL) - || DreamUtils.isInDreamWorld(onlinePlayer))) return; + && (!onlinePlayer.getGameMode().equals(GameMode.SURVIVAL) || (DreamUtils.isInDreamWorld(onlinePlayer)) && !authorizeDream)) return; int currentProgress = this.progress.getOrDefault(playerUUID, 0); int newProgress = currentProgress + amount; diff --git a/src/main/java/fr/openmc/core/utils/world/WorldUtils.java b/src/main/java/fr/openmc/core/utils/world/WorldUtils.java index b280318d1..75a92097e 100644 --- a/src/main/java/fr/openmc/core/utils/world/WorldUtils.java +++ b/src/main/java/fr/openmc/core/utils/world/WorldUtils.java @@ -1,5 +1,7 @@ package fr.openmc.core.utils.world; +import org.bukkit.Chunk; +import org.bukkit.Location; import org.bukkit.entity.Player; public class WorldUtils { @@ -18,4 +20,15 @@ public static Yaw getYaw(Player p) { } } + /** + * Get the center of the chunk at Y coordinates + * + * @param chunk the chunk + * @param y the Y location + */ + public static Location getChunkCenter(Chunk chunk, double y) { + double x = 16 * chunk.getX() + 8; + double z = 16 * chunk.getZ() + 8; + return new Location(chunk.getWorld(), x, y, z); + } } From 809dc11be6194ecf185e2a577b98f01731b7d50a Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Wed, 11 Feb 2026 17:00:44 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Petites=20am=C3=A9liorations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/features/dream/DreamUtils.java | 3 +- .../listeners/biomes/PlayerEnteredBiome.java | 5 +-- .../listeners/dream/PlayerSleepListener.java | 36 ++++++++++++------- .../dream/mecanism/cold/ColdListener.java | 2 ++ .../features/dream/models/db/DreamPlayer.java | 24 +++++++------ .../models/registry/DreamEnchantment.java | 3 +- .../models/registry/items/DreamItem.java | 10 +++--- .../items/armors/cloud/CloudBoots.java | 3 +- .../items/armors/cloud/CloudChestplate.java | 3 +- .../items/armors/cloud/CloudHelmet.java | 3 +- .../items/armors/cloud/CloudLeggings.java | 3 +- .../items/armors/cold/ColdBoots.java | 3 +- .../items/armors/cold/ColdChestplate.java | 3 +- .../items/armors/cold/ColdHelmet.java | 3 +- .../items/armors/cold/ColdLeggings.java | 3 +- .../armors/creaking/OldCreakingBoots.java | 3 +- .../creaking/OldCreakingChestplate.java | 3 +- .../armors/creaking/OldCreakingHelmet.java | 3 +- .../armors/creaking/OldCreakingLeggings.java | 3 +- .../items/armors/dream/DreamBoots.java | 3 +- .../items/armors/dream/DreamChestplate.java | 3 +- .../items/armors/dream/DreamHelmet.java | 3 +- .../items/armors/dream/DreamLeggings.java | 3 +- .../items/armors/pyjama/PyjamaBoots.java | 3 +- .../items/armors/pyjama/PyjamaChestplate.java | 3 +- .../items/armors/pyjama/PyjamaHelmet.java | 3 +- .../items/armors/pyjama/PyjamaLeggings.java | 3 +- .../items/armors/soul/SoulBoots.java | 3 +- .../items/armors/soul/SoulChestplate.java | 3 +- .../items/armors/soul/SoulHelmet.java | 3 +- .../items/armors/soul/SoulLeggings.java | 3 +- .../items/blocks/CorruptedSculk.java | 3 +- .../items/blocks/EternalCampFire.java | 3 +- .../registries/items/blocks/HardStone.java | 3 +- .../items/blocks/OldPaleOakWood.java | 3 +- .../items/consumable/ChipsAywen.java | 3 +- .../items/consumable/ChipsDihydrogene.java | 3 +- .../items/consumable/ChipsJimmy.java | 3 +- .../items/consumable/ChipsLait2Margouta.java | 3 +- .../items/consumable/ChipsNature.java | 3 +- .../items/consumable/ChipsSansPlomb.java | 3 +- .../items/consumable/ChipsTerre.java | 3 +- .../items/consumable/Somnifere.java | 3 +- .../items/fishes/CokkedPoissonion.java | 3 +- .../registries/items/fishes/DockerFish.java | 3 +- .../registries/items/fishes/MoonFish.java | 3 +- .../registries/items/fishes/Poissonion.java | 3 +- .../registries/items/fishes/SunFish.java | 3 +- .../registries/items/loots/BurnCoal.java | 3 +- .../registries/items/loots/CloudKey.java | 3 +- .../items/loots/CorruptedString.java | 3 +- .../registries/items/loots/CreakingHeart.java | 3 +- .../dream/registries/items/loots/Ewenite.java | 3 +- .../dream/registries/items/loots/Glacite.java | 3 +- .../dream/registries/items/loots/Soul.java | 3 +- .../dream/registries/items/orb/CloudOrb.java | 3 +- .../registries/items/orb/GlaciteOrb.java | 3 +- .../dream/registries/items/orb/MudOrb.java | 3 +- .../registries/items/orb/Singularity.java | 3 +- .../dream/registries/items/orb/SoulOrb.java | 3 +- .../items/tools/CloudFishingRod.java | 3 +- .../items/tools/CrystalizedPickaxe.java | 3 +- .../items/tools/MecanicPickaxe.java | 3 +- .../registries/items/tools/MetalDetector.java | 3 +- .../registries/items/tools/MeteoWand.java | 3 +- .../items/tools/OldCreakingAxe.java | 3 +- .../dream/registries/items/tools/SoulAxe.java | 3 +- .../dream/registries/mobs/Breezy.java | 1 + 68 files changed, 172 insertions(+), 92 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/dream/DreamUtils.java b/src/main/java/fr/openmc/core/features/dream/DreamUtils.java index 6ffa02da0..973ec302c 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamUtils.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamUtils.java @@ -7,6 +7,7 @@ import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import net.kyori.adventure.text.Component; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; @@ -42,9 +43,9 @@ public static void addDreamTime(Player player, Long timeToAdd, boolean sendMessa public static void removeDreamTime(Player player, Long timeToRemove, boolean sendMessage) { DreamPlayer dreamPlayer = DreamManager.getDreamPlayer(player); if (dreamPlayer == null) return; + if (player.getGameMode().equals(GameMode.CREATIVE)) return; dreamPlayer.removeTime(timeToRemove); if (sendMessage) MessagesManager.sendMessage(player, Component.text("Vous avez perdu §a" + DateUtils.convertSecondToTime(timeToRemove) + " §fcar vous avez pris des dégats !"), Prefix.DREAM, MessageType.WARNING, false); - } } diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java b/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java index 6f35dacdf..905cd6c23 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java @@ -80,7 +80,7 @@ public void onPlayerMove(PlayerMoveEvent event) { return; } - applyFog(player); + applyEffects(player); spawnParticles(player); }, 0L, 40L @@ -96,8 +96,9 @@ private void stopTask(Player player) { if (task != null) task.cancel(); } - private void applyFog(Player player) { + private void applyEffects(Player player) { player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 60, 1, true, false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 60, 1, true, false)); } private void spawnParticles(Player player) { diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java index 1de9c2963..bcadd7da4 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java @@ -3,7 +3,12 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.models.db.DBDreamPlayer; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.MessagesManager; +import fr.openmc.core.utils.messages.Prefix; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -29,18 +34,22 @@ public void onPlayerSleep(PlayerBedEnterEvent event) { if (playersDreaming.contains(player.getUniqueId())) return; - double randomValue = new Random().nextDouble(); - - if (randomValue < DreamManager.calculateDreamProbability(player)) return; - - player.addPotionEffect(new PotionEffect( - PotionEffectType.NAUSEA, - 20 * 10, - 1, - false, - false, - false - )); + if (player.getGameMode().equals(GameMode.CREATIVE)) { + MessagesManager.sendMessage(player, Component.text("§fVous êtes en créatif, dormir vous fait obligatoirement passer dans la §ddimension des rêves"), Prefix.DREAM, MessageType.INFO, true); + } else { + double randomValue = new Random().nextDouble(); + + if (randomValue < DreamManager.calculateDreamProbability(player)) return; + + player.addPotionEffect(new PotionEffect( + PotionEffectType.NAUSEA, + 20 * 10, + 1, + false, + false, + false + )); + } playersDreaming.add(player.getUniqueId()); } @@ -50,6 +59,7 @@ public void onNightSkip(TimeSkipEvent event) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player); + long delay = player.getGameMode().equals(GameMode.CREATIVE) ? 0L : 20L * 5; new BukkitRunnable() { @Override public void run() { @@ -59,7 +69,7 @@ public void run() { DreamManager.tpPlayerToLastDreamLocation(player); } } - }.runTaskLater(OMCPlugin.getInstance(), 20L * 5); + }.runTaskLater(OMCPlugin.getInstance(), delay); } playersDreaming.clear(); } diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdListener.java b/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdListener.java index 1bf527bbc..35b2e2d77 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdListener.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdListener.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.generation.DreamBiome; import fr.openmc.core.features.dream.models.db.DreamPlayer; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -17,6 +18,7 @@ public class ColdListener implements Listener { @EventHandler(ignoreCancelled = true) public void onGlaciteGrottoEntered(PlayerMoveEvent event) { Player player = event.getPlayer(); + if (!player.getGameMode().equals(GameMode.SURVIVAL)) return; Location loc = player.getLocation(); if (loc.getBlock().getBiome().equals(DreamBiome.GLACITE_GROTTO.getBiome())) { diff --git a/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java b/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java index 530c48d22..df0fb2488 100644 --- a/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java +++ b/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java @@ -20,6 +20,7 @@ import lombok.Setter; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -91,17 +92,18 @@ public void cancelTimeTask() { public void scheduleTimeTask() { this.timeTask = Bukkit.getScheduler().runTaskTimer(OMCPlugin.getInstance(), () -> { - this.dreamTime -= 1; - - if (dreamTime <= 0) { - Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> - Bukkit.getServer().getPluginManager().callEvent(new DreamEndEvent(this.player)) - ); - this.cancelTimeTask(); - return; - } - - DreamBossBar.update(player, Math.min(1, (float) this.getDreamTime() / this.getMaxDreamTime())); + if (player.getGameMode().equals(GameMode.SURVIVAL)) { + if (dreamTime <= 0) { + Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> + Bukkit.getServer().getPluginManager().callEvent(new DreamEndEvent(this.player)) + ); + this.cancelTimeTask(); + return; + } + + this.dreamTime -= 1; + DreamBossBar.update(player, Math.min(1, (float) this.getDreamTime() / this.getMaxDreamTime())); + } }, 0L, 20L); } diff --git a/src/main/java/fr/openmc/core/features/dream/models/registry/DreamEnchantment.java b/src/main/java/fr/openmc/core/features/dream/models/registry/DreamEnchantment.java index 1f40d8410..e7626be29 100644 --- a/src/main/java/fr/openmc/core/features/dream/models/registry/DreamEnchantment.java +++ b/src/main/java/fr/openmc/core/features/dream/models/registry/DreamEnchantment.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; @SuppressWarnings("UnstableApiUsage") public abstract class DreamEnchantment { @@ -37,7 +38,7 @@ public abstract class DreamEnchantment { public DreamItem getEnchantedBookItem(int level) { return new DreamItem(getKey().asMinimalString() + level) { @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return getEnchantedBook(level); } diff --git a/src/main/java/fr/openmc/core/features/dream/models/registry/items/DreamItem.java b/src/main/java/fr/openmc/core/features/dream/models/registry/items/DreamItem.java index b1bc5a042..b8afa9e67 100644 --- a/src/main/java/fr/openmc/core/features/dream/models/registry/items/DreamItem.java +++ b/src/main/java/fr/openmc/core/features/dream/models/registry/items/DreamItem.java @@ -7,6 +7,8 @@ import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -14,7 +16,7 @@ @Getter public abstract class DreamItem { - public abstract ItemStack getVanilla(); + public abstract @NotNull ItemStack getVanilla(); private final String name; @@ -33,7 +35,7 @@ protected DreamItem(String name) { public abstract ItemStack getTransferableItem(); - public ItemStack getItemsAdder() { + public @Nullable ItemStack getItemsAdder() { CustomStack stack = CustomStack.getInstance(getName()); return stack != null ? stack.getItemStack() : null; } @@ -122,7 +124,7 @@ private List getGeneratedLoreTransferable() { * * @return Best ItemStack to use for the server */ - public ItemStack getBestTransferable() { + public @NotNull ItemStack getBestTransferable() { ItemStack item; if (!ItemsAdderHook.isHasItemAdder() || getItemsAdder() == null) { item = getVanilla(); @@ -143,7 +145,7 @@ public ItemStack getBestTransferable() { * * @return Best ItemStack to use for the server */ - public ItemStack getBest() { + public @NotNull ItemStack getBest() { ItemStack item; if (!ItemsAdderHook.isHasItemAdder() || getItemsAdder() == null) { item = getVanilla(); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudBoots.java index 94f887610..b39ed4908 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudBoots extends DreamEquipableItem { public CloudBoots(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_BOOTS); item.getItemMeta().itemName(Component.text("Bottes des Nuages")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudChestplate.java index c4f079527..14d53ddd5 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudChestplate extends DreamEquipableItem { public CloudChestplate(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron des Nuages")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudHelmet.java index e2279975a..6431c4ffd 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudHelmet extends DreamEquipableItem { public CloudHelmet(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_HELMET); item.getItemMeta().itemName(Component.text("Casque des Nuages")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudLeggings.java index 9459d1cb4..c8a0d8d89 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cloud/CloudLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudLeggings extends DreamEquipableItem { public CloudLeggings(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières des Nuages")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdBoots.java index 00bc00abc..ac0abb752 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ColdBoots extends DreamEquipableItem { public ColdBoots(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DIAMOND_BOOTS); item.getItemMeta().itemName(Component.text("Bottes Glacées")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdChestplate.java index bb902f169..f1a7260c7 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ColdChestplate extends DreamEquipableItem { public ColdChestplate(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DIAMOND_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron Glacé")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdHelmet.java index 66f5eb672..067f2b855 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ColdHelmet extends DreamEquipableItem { public ColdHelmet(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DIAMOND_HELMET); item.getItemMeta().itemName(Component.text("Casque Glacé")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdLeggings.java index 65c2a9eab..fc8f56f27 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/cold/ColdLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ColdLeggings extends DreamEquipableItem { public ColdLeggings(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DIAMOND_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières Glacées")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingBoots.java index 9d35c1670..d6a5daf88 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldCreakingBoots extends DreamEquipableItem { public OldCreakingBoots(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_BOOTS); item.getItemMeta().itemName(Component.text("Bottes du Vieux Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingChestplate.java index c83843be0..bc0dc9cb2 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldCreakingChestplate extends DreamEquipableItem { public OldCreakingChestplate(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron du Vieux Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingHelmet.java index ae788ddc6..ec3b639de 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldCreakingHelmet extends DreamEquipableItem { public OldCreakingHelmet(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_HELMET); item.getItemMeta().itemName(Component.text("Casque du Vieux Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingLeggings.java index 57b1ea56d..68b87e719 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/creaking/OldCreakingLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldCreakingLeggings extends DreamEquipableItem { public OldCreakingLeggings(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières du Vieux Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamBoots.java index 757478304..accfcb7b3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DreamBoots extends DreamEquipableItem { public DreamBoots(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.NETHERITE_BOOTS); item.getItemMeta().itemName(Component.text("Bottes Oniriques")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamChestplate.java index fdb61c62c..0cde562f7 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DreamChestplate extends DreamEquipableItem { public DreamChestplate(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.NETHERITE_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron Onirique")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamHelmet.java index 0ce372e4b..071ee6a8f 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DreamHelmet extends DreamEquipableItem { public DreamHelmet(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.NETHERITE_HELMET); item.getItemMeta().itemName(Component.text("Casque Onirique")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamLeggings.java index ba27d3367..9b5e8e53e 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/dream/DreamLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DreamLeggings extends DreamEquipableItem { public DreamLeggings(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.NETHERITE_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières Oniriques")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaBoots.java index 104cc5a2e..9af4839e3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class PyjamaBoots extends DreamItem { public PyjamaBoots(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.LEATHER_BOOTS); item.getItemMeta().itemName(Component.text("Bottes de Pyjama")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaChestplate.java index d06b14826..428710203 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class PyjamaChestplate extends DreamItem { public PyjamaChestplate(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.LEATHER_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron de Pyjama")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaHelmet.java index 9c33e5e92..586b66dd9 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class PyjamaHelmet extends DreamItem { public PyjamaHelmet(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.LEATHER_HELMET); item.getItemMeta().itemName(Component.text("Casque de Pyjama")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaLeggings.java index f191e6af1..0b6fe6dfe 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/pyjama/PyjamaLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class PyjamaLeggings extends DreamItem { public PyjamaLeggings(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.LEATHER_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières de Pyjama")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulBoots.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulBoots.java index ddbcfef94..00c0d2ebf 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulBoots.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulBoots.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulBoots extends DreamEquipableItem { public SoulBoots(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_BOOTS); item.getItemMeta().itemName(Component.text("Bottes des Âmes")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulChestplate.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulChestplate.java index 4ed292c73..66d184a0c 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulChestplate.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulChestplate.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulChestplate extends DreamEquipableItem { public SoulChestplate(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_CHESTPLATE); item.getItemMeta().itemName(Component.text("Plastron des Âmes")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulHelmet.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulHelmet.java index 48b0fb491..eca3d50eb 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulHelmet.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulHelmet.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulHelmet extends DreamEquipableItem { public SoulHelmet(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_HELMET); item.getItemMeta().itemName(Component.text("Casque des Âmes")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulLeggings.java b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulLeggings.java index 7d254498c..4351cdd79 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulLeggings.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/armors/soul/SoulLeggings.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulLeggings extends DreamEquipableItem { public SoulLeggings(String name) { @@ -37,7 +38,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_LEGGINGS); item.getItemMeta().itemName(Component.text("Jambières des Âmes")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CorruptedSculk.java b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CorruptedSculk.java index 658a71681..e2e210515 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CorruptedSculk.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CorruptedSculk.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CorruptedSculk extends DreamItem { public CorruptedSculk(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.SCULK); item.getItemMeta().itemName(Component.text("Sculk Corrompu")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/EternalCampFire.java b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/EternalCampFire.java index fa55284a1..75f34fd97 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/EternalCampFire.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/EternalCampFire.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class EternalCampFire extends DreamItem { public EternalCampFire(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.CAMPFIRE); item.getItemMeta().itemName(Component.text("Feu de Camp Éternel")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/HardStone.java b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/HardStone.java index 1d6397a2f..729b5e8bc 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/HardStone.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/HardStone.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class HardStone extends DreamItem { public HardStone(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DEEPSLATE); item.getItemMeta().itemName(Component.text("Pierre Dure")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/OldPaleOakWood.java b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/OldPaleOakWood.java index 4722b3ffb..6aea2ec56 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/OldPaleOakWood.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/OldPaleOakWood.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldPaleOakWood extends DreamItem { public OldPaleOakWood(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.PALE_OAK_WOOD); item.getItemMeta().itemName(Component.text("Vieux Chêne Pale")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsAywen.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsAywen.java index e6ddbd259..3f9ec6e65 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsAywen.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsAywen.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsAywen extends DreamItem { public ChipsAywen(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Aywen")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsDihydrogene.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsDihydrogene.java index 105a4afc5..faeff3b1f 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsDihydrogene.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsDihydrogene.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsDihydrogene extends DreamItem { public ChipsDihydrogene(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Dihydrogène")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsJimmy.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsJimmy.java index f5fb50e5e..1561954b3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsJimmy.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsJimmy.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsJimmy extends DreamItem { public ChipsJimmy(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Jimmy")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsLait2Margouta.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsLait2Margouta.java index 7c82824b7..0f1d644eb 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsLait2Margouta.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsLait2Margouta.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsLait2Margouta extends DreamItem { public ChipsLait2Margouta(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Lait de Margouta")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsNature.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsNature.java index 80f338286..56a48ac87 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsNature.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsNature.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsNature extends DreamItem { public ChipsNature(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Nature")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsSansPlomb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsSansPlomb.java index 2a8a1d91b..77db40c42 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsSansPlomb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsSansPlomb.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsSansPlomb extends DreamItem { public ChipsSansPlomb(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Sans Plomb 95")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsTerre.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsTerre.java index 093c34e9f..e5a68ca55 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsTerre.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/ChipsTerre.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class ChipsTerre extends DreamItem { public ChipsTerre(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Chips goût Terre")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/Somnifere.java b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/Somnifere.java index 36c5d06d0..452c872d0 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/Somnifere.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/consumable/Somnifere.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Somnifere extends DreamItem { public Somnifere(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DRIED_KELP); item.getItemMeta().itemName(Component.text("Somnifère")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/CokkedPoissonion.java b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/CokkedPoissonion.java index 47627130b..cd77680d3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/CokkedPoissonion.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/CokkedPoissonion.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CokkedPoissonion extends DreamItem { public CokkedPoissonion(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.PUFFERFISH); item.getItemMeta().itemName(Component.text("Poissonion Cuit")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/DockerFish.java b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/DockerFish.java index 56b4a9d67..8d0964bfb 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/DockerFish.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/DockerFish.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DockerFish extends DreamItem { public DockerFish(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.TROPICAL_FISH); item.getItemMeta().itemName(Component.text("Poisson Docker")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/MoonFish.java b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/MoonFish.java index e37f5cf87..48502c59c 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/MoonFish.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/MoonFish.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class MoonFish extends DreamItem { public MoonFish(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.SALMON); item.getItemMeta().itemName(Component.text("Poisson-lune")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/Poissonion.java b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/Poissonion.java index 0e7950ab7..3bcb41222 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/Poissonion.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/Poissonion.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Poissonion extends DreamItem { public Poissonion(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.PUFFERFISH); item.getItemMeta().itemName(Component.text("Poissonion")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/SunFish.java b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/SunFish.java index 5f504074f..8b0840551 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/SunFish.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/fishes/SunFish.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SunFish extends DreamItem { public SunFish(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.COOKED_SALMON); item.getItemMeta().itemName(Component.text("Poisson-soleil")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/BurnCoal.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/BurnCoal.java index eaf06cd9a..e8a35ce05 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/BurnCoal.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/BurnCoal.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class BurnCoal extends DreamItem { public BurnCoal(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.CHARCOAL); item.getItemMeta().itemName(Component.text("Charbon brulé")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CloudKey.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CloudKey.java index 3399110f6..fea5deda5 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CloudKey.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CloudKey.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudKey extends DreamItem { public CloudKey(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.OMINOUS_TRIAL_KEY); item.getItemMeta().itemName(Component.text("Clé nuageuse")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CorruptedString.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CorruptedString.java index 7b70f27c1..f7c704593 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CorruptedString.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CorruptedString.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CorruptedString extends DreamItem { public CorruptedString(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.STRING); item.getItemMeta().itemName(Component.text("Fil corrompu")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CreakingHeart.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CreakingHeart.java index 4ec64e216..b32025c03 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CreakingHeart.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/CreakingHeart.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CreakingHeart extends DreamItem { public CreakingHeart(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.RESIN_CLUMP); item.getItemMeta().itemName(Component.text("Coeur de Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Ewenite.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Ewenite.java index 8fceceb62..a61d81ca3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Ewenite.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Ewenite.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Ewenite extends DreamItem { public Ewenite(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.ANCIENT_DEBRIS); item.getItemMeta().itemName(Component.text("Ewenite")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Glacite.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Glacite.java index b87dbc7cd..284c4eae0 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Glacite.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Glacite.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Glacite extends DreamItem { public Glacite(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.BLUE_ICE); item.getItemMeta().itemName(Component.text("Glacite")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Soul.java b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Soul.java index 1afc6f076..52565fa99 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Soul.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/loots/Soul.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Soul extends DreamItem { public Soul(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.PAPER); item.getItemMeta().itemName(Component.text("Âme")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/CloudOrb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/CloudOrb.java index c4df56f6c..ed1c051e8 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/CloudOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/CloudOrb.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.models.registry.items.DreamRarity; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudOrb extends DreamItem { /** @@ -31,7 +32,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return ItemStack.of(Material.HEART_OF_THE_SEA); } } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/GlaciteOrb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/GlaciteOrb.java index a6ba37437..61d339013 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/GlaciteOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/GlaciteOrb.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.models.registry.items.DreamRarity; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class GlaciteOrb extends DreamItem { /** @@ -31,7 +32,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return ItemStack.of(Material.HEART_OF_THE_SEA); } } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/MudOrb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/MudOrb.java index a85f09c63..b76a64236 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/MudOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/MudOrb.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.models.registry.items.DreamRarity; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class MudOrb extends DreamItem { /** @@ -31,7 +32,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return ItemStack.of(Material.HEART_OF_THE_SEA); } } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/Singularity.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/Singularity.java index b035bbb07..1b7bd4d5b 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/Singularity.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/Singularity.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class Singularity extends DreamUsableItem { public Singularity(String name) { @@ -30,7 +31,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.HEART_OF_THE_SEA); item.getItemMeta().itemName(Component.text("Singularité")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/SoulOrb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/SoulOrb.java index bdfebee81..7ad09697e 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/SoulOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/SoulOrb.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.models.registry.items.DreamRarity; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulOrb extends DreamItem { /** @@ -31,7 +32,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return ItemStack.of(Material.HEART_OF_THE_SEA); } } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CloudFishingRod.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CloudFishingRod.java index 44f71c099..8f1fdf49d 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CloudFishingRod.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CloudFishingRod.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CloudFishingRod extends DreamItem { public CloudFishingRod(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.FISHING_ROD); item.getItemMeta().itemName(Component.text("Canne à pêche nuageuse")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CrystalizedPickaxe.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CrystalizedPickaxe.java index ffdabb2a9..ab3935be5 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CrystalizedPickaxe.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/CrystalizedPickaxe.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CrystalizedPickaxe extends DreamItem { public CrystalizedPickaxe(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.DIAMOND_PICKAXE); item.getItemMeta().itemName(Component.text("Pioche Crystalisée")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MecanicPickaxe.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MecanicPickaxe.java index 3ad68d118..a9db2c3d9 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MecanicPickaxe.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MecanicPickaxe.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class MecanicPickaxe extends DreamItem { public MecanicPickaxe(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.NETHERITE_PICKAXE); item.getItemMeta().itemName(Component.text("Pioche Mécanisée")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MetalDetector.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MetalDetector.java index f94d646e0..78985a627 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MetalDetector.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MetalDetector.java @@ -15,6 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; import java.util.UUID; @@ -42,7 +43,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.STICK); item.getItemMeta().itemName(Component.text("Détecteur à métaux")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MeteoWand.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MeteoWand.java index c253fd697..d8ad8ec14 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MeteoWand.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/MeteoWand.java @@ -16,6 +16,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; +import org.jspecify.annotations.NonNull; public class MeteoWand extends DreamUsableItem { private static final long COOLDOWN_METEO_WAND = 8 * 60 * 60 * 1000L; // 2 jours @@ -39,7 +40,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.STICK); item.getItemMeta().itemName(Component.text("Meteo Wand")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/OldCreakingAxe.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/OldCreakingAxe.java index 4eb208e6d..94a471fc8 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/OldCreakingAxe.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/OldCreakingAxe.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class OldCreakingAxe extends DreamItem { public OldCreakingAxe(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_AXE); item.getItemMeta().itemName(Component.text("Hache du Vieux Creaking")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java index aae13e003..5e2cc03a4 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class SoulAxe extends DreamItem { public SoulAxe(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.IRON_AXE); item.getItemMeta().itemName(Component.text("Hache des Âmes")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java b/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java index 78800de75..7354245ec 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java @@ -66,6 +66,7 @@ public static void applyIA(Breeze breeze) { breeze.getNearbyEntities(15, 15, 15).stream() .filter(e -> e instanceof Player) .map(e -> (Player) e) + .filter(p -> p.getGameMode().equals(GameMode.SURVIVAL)) .min(Comparator.comparingDouble(p -> p.getLocation().distanceSquared(breeze.getLocation()))) .ifPresent(target -> shootWindCharge(breeze, target)); From 5c790f3c94a9862eabba02ca3d11c8ab232b6a69 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Wed, 11 Feb 2026 17:01:38 +0100 Subject: [PATCH 3/5] Continue milestone --- src/main/java/fr/openmc/core/OMCPlugin.java | 2 +- .../dream/milestone/DreamMilestone.java | 15 +++++++++-- .../features/dream/milestone/DreamSteps.java | 6 ++--- .../quests/AltarDominationOrbQuest.java | 22 ++++++++-------- .../quests/CraftDominationOrbQuest.java | 20 +++++++-------- .../milestone/quests/CraftingTableQuest.java | 21 ++++++++-------- .../dream/milestone/quests/CraftsQuest.java | 21 ++++++++-------- .../milestone/quests/CubeTempleQuest.java | 21 ++++++++-------- .../dream/milestone/quests/GetHeartQuest.java | 21 ++++++++-------- .../dream/milestone/quests/OldAxeQuest.java | 20 +++++++-------- .../dream/milestone/quests/SleepQuest.java | 25 ++++++++----------- .../dream/milestone/quests/SoulOrbQuest.java | 22 ++++++++-------- .../dream/milestone/quests/SoulsQuest.java | 22 ++++++++-------- .../items/blocks/CraftingTable.java | 3 ++- .../registries/items/orb/DominationOrb.java | 3 ++- .../core/features/milestones/Milestone.java | 9 +++---- .../features/milestones/MilestoneUtils.java | 5 ++-- .../milestones/MilestonesManager.java | 12 +++++---- .../tutorial/TutorialMilestone.java | 13 +++++++++- .../core/utils/database/DatabaseManager.java | 2 ++ 20 files changed, 147 insertions(+), 138 deletions(-) diff --git a/src/main/java/fr/openmc/core/OMCPlugin.java b/src/main/java/fr/openmc/core/OMCPlugin.java index 851264b9f..637152d79 100644 --- a/src/main/java/fr/openmc/core/OMCPlugin.java +++ b/src/main/java/fr/openmc/core/OMCPlugin.java @@ -151,12 +151,12 @@ public void onEnable() { public void loadWithItemsAdder() { CustomItemRegistry.init(); CustomUsableItemRegistry.init(); - MilestonesManager.init(); QuestsManager.init(); CityManager.init(); ContestManager.init(); DreamManager.init(); MultiBlockManager.init(); + MilestonesManager.init(); if (WorldGuardHook.isHasWorldGuard()) { ParticleUtils.spawnParticlesInRegion("spawn", Bukkit.getWorld("world"), Particle.CHERRY_LEAVES, 50, 70, 130); ParticleUtils.spawnContestParticlesInRegion("spawn", Bukkit.getWorld("world"), 10, 70, 135); diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java index 9fd42f013..ab05ca0bb 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java @@ -2,18 +2,29 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.core.features.milestones.Milestone; +import fr.openmc.core.features.milestones.MilestoneModel; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.menus.MilestoneMenu; -import fr.openmc.core.features.quests.objects.Quest; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.UUID; public class DreamMilestone implements Milestone { + + private static HashMap playerData = new HashMap<>(); + + @Override + public HashMap getPlayerData() { + return playerData; + } + @Override public String getName() { return "Tutoriel de la Dream Dim"; @@ -35,7 +46,7 @@ public ItemStack getIcon() { } @Override - public List getSteps() { + public List getSteps() { return Arrays.stream(DreamSteps.values()).map(DreamSteps::getQuest).toList(); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java index c080fd35a..01b4a2404 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.dream.milestone; import fr.openmc.core.features.dream.milestone.quests.*; -import fr.openmc.core.features.quests.objects.Quest; +import fr.openmc.core.features.milestones.MilestoneQuest; import lombok.Getter; @Getter @@ -19,9 +19,9 @@ public enum DreamSteps { SOUL_ORB(null), ; - private Quest quest; + private MilestoneQuest quest; - DreamSteps(Quest quest) { + DreamSteps(MilestoneQuest quest) { this.quest = quest; } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java index 2a4f5786e..34922a7f3 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java @@ -5,12 +5,10 @@ import fr.openmc.core.features.dream.milestone.DreamSteps; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.items.orb.DominationOrb; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -21,7 +19,7 @@ import java.util.List; -public class AltarDominationOrbQuest extends Quest implements Listener { +public class AltarDominationOrbQuest extends MilestoneQuest implements Listener { public AltarDominationOrbQuest() { super( "Début du rituel", @@ -29,15 +27,15 @@ public AltarDominationOrbQuest() { "§fDéposer l'§dOrbe de Domination §fsur l'§dAltar", "§8§oCommençons le rituel de conversion de l'orbe" ), - Material.ENCHANTING_TABLE + Material.ENCHANTING_TABLE, + MilestoneType.DREAM, + DreamSteps.ALTAR_DOMINATION, + new QuestTier( + 1, + new QuestTextReward("Hmmm... avec cette table étrange, il est visiblement possible de transformer l'Orbe de Domination. Mais pour en faire quoi !? \n" + + "Ce qui est sur, c'est qui me manque quelque chose pour accomplir ce rituel jusqu'au bout.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Hmmm... avec cette table étrange, il est visiblement possible de transformer l'Orbe de Domination. Mais pour en faire quoi !? \n" + - "Ce qui est sur, c'est qui me manque quelque chose pour accomplir ce rituel jusqu'au bout.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.ALTAR_DOMINATION.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java index e5e385b4d..e348c784c 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java @@ -4,12 +4,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.dream.registries.items.orb.DominationOrb; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -21,7 +19,7 @@ import java.util.List; -public class CraftDominationOrbQuest extends Quest implements Listener { +public class CraftDominationOrbQuest extends MilestoneQuest implements Listener { public CraftDominationOrbQuest() { super( "Dominer, c'est cool", @@ -29,13 +27,15 @@ public CraftDominationOrbQuest() { "§fFabriquer l'§dOrbe de Domination", "§8§o1 sur 5 pour les dominer tous !" ), - DreamItemRegistry.getByName("omc_dream:domination_orb").getBest() + DreamItemRegistry.getByName("omc_dream:domination_orb").getBest(), + MilestoneType.DREAM, + DreamSteps.DOMINATION_ORB, + new QuestTier( + 1, + new QuestTextReward("Et d'une ! Et cela me donne accès à une nouvelle zone. " + + "Il faut que je récupère les autres pour avoir accès à l'ensemble de mes rêves.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - this.addTier(new QuestTier( - 1, - new QuestTextReward("Et d'une ! Et cela me donne accès à une nouvelle zone. Il faut que je récupère les autres pour avoir accès à l'ensemble de mes rêves.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.DOMINATION_ORB.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java index 13dea2181..cc70cc73a 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java @@ -2,12 +2,10 @@ import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -20,7 +18,7 @@ import java.util.List; -public class CraftingTableQuest extends Quest implements Listener { +public class CraftingTableQuest extends MilestoneQuest implements Listener { public CraftingTableQuest() { super( "Une nouvelle survie ?", @@ -28,14 +26,15 @@ public CraftingTableQuest() { "§fFabriquer une §dtable de craft", "§8§oBizarre cette survie de nuit... on ne voit pas en dehors des pleines de sculks" ), - Material.CRAFTING_TABLE + Material.CRAFTING_TABLE, + MilestoneType.DREAM, + DreamSteps.CRAFTING_TABLE, + new QuestTier( + 1, + new QuestTextReward("Bon, maintenant que j'ai la table, cherchons de quoi faire des outils et... " + + "comment se fait-il qu'il y ait des Creakings ici !?", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Bon, maintenant que j'ai la table, cherchons de quoi faire des outils et... comment se fait-il qu'il y ait des Creakings ici !?", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CRAFTING_TABLE.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java index faefbdcee..f63eb531c 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java @@ -2,12 +2,10 @@ import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -19,7 +17,7 @@ import java.util.List; -public class CraftsQuest extends Quest implements Listener { +public class CraftsQuest extends MilestoneQuest implements Listener { public CraftsQuest() { super( "Apprendre de nouveaux crafts", @@ -27,14 +25,15 @@ public CraftsQuest() { "§fFaire §d/crafts §fpour voir les crafts disponibles", "§8§oCette dimension a ses propres règles, je dois les apprendre pour y survivre" ), - Material.BOOK + Material.BOOK, + MilestoneType.DREAM, + DreamSteps.CRAFTS, + new QuestTier( + 1, + new QuestTextReward("Ce monde sombre et nouveau semble complexe. Mais cela ressemble à une survie normale, non ? " + + "Alors commençons par les bases, la table de craft.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Ce monde sombre et nouveau semble complexe. Mais cela ressemble à une survie normale, non ? Alors commençons par les bases, la table de craft.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CRAFTS.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java index 42a9f39e6..ba1cf0657 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java @@ -3,12 +3,10 @@ import fr.openmc.core.features.dream.events.PlayerEnterStructureEvent; import fr.openmc.core.features.dream.generation.structures.DreamStructure; import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -19,7 +17,7 @@ import java.util.List; -public class CubeTempleQuest extends Quest implements Listener { +public class CubeTempleQuest extends MilestoneQuest implements Listener { public CubeTempleQuest() { super( "Vénérer le Cube des Ämes", @@ -27,14 +25,15 @@ public CubeTempleQuest() { "§fEntrer dans le §dTemple des Âmes", "§8§oA la recherche du monument du Cube des Âmes... on est malgré tout dans Minecraft, même dans un rêve !" ), - Material.POLISHED_BLACKSTONE_BRICKS + Material.POLISHED_BLACKSTONE_BRICKS, + MilestoneType.DREAM, + DreamSteps.CUBE_TEMPLE, + new QuestTier( + 1, + new QuestTextReward("Wow, c'est grand ! Qui a pu construire une temple pareil ? Et pourquoi ? Je dois le découvrir. \n" + + "Tiens... il semble y avoir quelque chose en son centre...", Prefix.DREAM, MessageType.SUCCESS) + ) ); - this.addTier(new QuestTier( - 1, - new QuestTextReward("Wow, c'est grand ! Qui a pu construire une temple pareil ? Et pourquoi ? Je dois le découvrir. \n" + - "Tiens... il semble y avoir quelque chose en son centre...", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.CUBE_TEMPLE.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java index d00a987f2..4d0c514d4 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java @@ -5,12 +5,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.dream.registries.items.loots.CreakingHeart; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -22,7 +20,7 @@ import java.util.List; -public class GetHeartQuest extends Quest implements Listener { +public class GetHeartQuest extends MilestoneQuest implements Listener { public GetHeartQuest() { super( @@ -31,14 +29,15 @@ public GetHeartQuest() { "§fRécupérer un §dCoeur de Creaking", "§8§oOn cherche la résine ou le coeur ?" ), - Material.RESIN_CLUMP + Material.RESIN_CLUMP, + MilestoneType.DREAM, + DreamSteps.GET_HEART, + new QuestTier( + 1, + new QuestTextReward("Ah ! Mais c'est vrai qu'il protègent leurs coeurs, qui va mettre bien utile par la suite. " + + "Mais bref, trêve de tergiversation, il me faut des outils.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Ah ! Mais c'est vrai qu'il protègent leurs coeurs, qui va mettre bien utile par la suite. Mais bref, trêve de tergiversation, il me faut des outils.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.GET_HEART.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java index f115c2a78..ad3fbe7c1 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java @@ -4,12 +4,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.dream.registries.items.tools.OldCreakingAxe; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -21,7 +19,7 @@ import java.util.List; -public class OldAxeQuest extends Quest implements Listener { +public class OldAxeQuest extends MilestoneQuest implements Listener { public OldAxeQuest() { super( @@ -30,14 +28,14 @@ public OldAxeQuest() { "§fFabriquer une §dVieille hache du Creaking", "§8§oNotre meilleur ami dans ce monde !" ), - DreamItemRegistry.getByName("omc_dream:old_creaking_axe").getBestTransferable() + DreamItemRegistry.getByName("omc_dream:old_creaking_axe").getBest(), + MilestoneType.DREAM, + DreamSteps.OLD_AXE, + new QuestTier( + 1, + new QuestTextReward("Une hâche, c'est déjà ça. Il faut collecter les orbes qui sont au nombre de 5. La première est d'ailleurs craftable...", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Une hâche, c'est déjà ça. Il faut collecter les orbes qui sont au nombre de 5. La première est d'ailleurs craftable...", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.OLD_AXE.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java index 4170c3c8f..a8bee6b9f 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java @@ -2,12 +2,10 @@ import fr.openmc.core.features.dream.events.DreamEnterEvent; import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -18,7 +16,7 @@ import java.util.List; -public class SleepQuest extends Quest implements Listener { +public class SleepQuest extends MilestoneQuest implements Listener { public SleepQuest() { super( @@ -27,17 +25,16 @@ public SleepQuest() { "§fEntrer dans la §ddimension des rêves", "§8§oQue c'est bon de dormir pour se reposer de la dure vie des villes..." ), - Material.RED_BED + Material.RED_BED, + MilestoneType.DREAM, + DreamSteps.SLEEP, + new QuestTier( + 1, + new QuestTextReward("ZZZzzz... que se passe-t-il ? Je vois un monde sombre rempli de créatures étranges. Suis-je en train de rêver ? " + + "Ce monde est si différent de l'overworld, il faut que je m'adapte et que je comprenne ce monde.\n" + + "§d/milestone §opour voir la suite du guide", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("ZZZzzz... que se passe-t-il ? Je vois un monde sombre rempli de créatures étranges. Suis-je en train de rêver ? " + - "Ce monde est si différent de l'overworld, il faut que je m'adapte et que je comprenne ce monde.\n" + - "§d/milestone §opour voir la suite du guide", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SLEEP.ordinal())) - )); //TODO Revoir les récompenses - } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java index a304c3706..260924af4 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java @@ -6,12 +6,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.dream.registries.items.orb.SoulOrb; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -21,7 +19,7 @@ import java.util.List; -public class SoulOrbQuest extends Quest implements Listener { +public class SoulOrbQuest extends MilestoneQuest implements Listener { public SoulOrbQuest() { super( "Il faut un sacrifice !", @@ -29,15 +27,15 @@ public SoulOrbQuest() { "§fObtenir l'§dOrbe des Âmes", "§8§oÂmes dans la poche, permettez moi, par votre pouvoir, d'obtenir votre orbe avec le sacrifice de l'Orbe de Domination." ), - DreamItemRegistry.getByName("omc_dream:ame_orb").getBest() + DreamItemRegistry.getByName("omc_dream:ame_orb").getBest(), + MilestoneType.DREAM, + DreamSteps.SOUL_ORB, + new QuestTier( + 1, + new QuestTextReward("Et de deux ! Maintenant que j'ai l'Orbe des Âmes, je n'ai plus celle de Domination, il faudra donc que j'y retourne en fabriquer. \n" + + "Et où dois-je aller maintenant ? Hmmmm... ces nuages m'intriguent, j'ai l'impression d'y voir un château.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 1, - new QuestTextReward("Et de deux ! Maintenant que j'ai l'Orbe des Âmes, je n'ai plus celle de Domination, il faudra donc que j'y retourne en fabriquer. \n" + - "Et où dois-je aller maintenant ? Hmmmm... ces nuages m'intriguent, j'ai l'impression d'y voir un château.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SOUL_ORB.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java index 7eb1df1e0..78f587306 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java @@ -5,12 +5,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.dream.registries.items.loots.Soul; +import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; -import fr.openmc.core.features.milestones.MilestoneUtils; import fr.openmc.core.features.milestones.MilestonesManager; -import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.Prefix; @@ -22,7 +20,7 @@ import java.util.List; -public class SoulsQuest extends Quest implements Listener { +public class SoulsQuest extends MilestoneQuest implements Listener { public SoulsQuest() { super( "Mes amis viennent de l'au-delà", @@ -30,15 +28,15 @@ public SoulsQuest() { "§fRécuérer §d20 §fâmes", "§8§oIl me semble avoir vu des créatures volantes rôder vers les grands arbres sombres." ), - DreamItemRegistry.getByName("omc_dream:soul").getBest() + DreamItemRegistry.getByName("omc_dream:soul").getBest(), + MilestoneType.DREAM, + DreamSteps.SOULS, + new QuestTier( + 20, + new QuestTextReward("Quelles sont ces créatures ? Des joueurs morts ?? \n" + + "A vrai dire, je n'ai pas vraiment envie d'y penser, il me faut cette nouvelle orbe.", Prefix.DREAM, MessageType.SUCCESS) + ) ); - - this.addTier(new QuestTier( - 20, - new QuestTextReward("Quelles sont ces créatures ? Des joueurs morts ?? \n" + - "A vrai dire, je n'ai pas vraiment envie d'y penser, il me faut cette nouvelle orbe.", Prefix.DREAM, MessageType.SUCCESS), - new QuestMethodsReward(player -> MilestoneUtils.completeStep(MilestoneType.DREAM, player, DreamSteps.SOULS.ordinal())) - )); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CraftingTable.java b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CraftingTable.java index aaa7f9409..5a3e08dc3 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CraftingTable.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/blocks/CraftingTable.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class CraftingTable extends DreamItem { public CraftingTable(String name) { @@ -27,7 +28,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { ItemStack item = new ItemStack(Material.CRAFTING_TABLE); item.getItemMeta().itemName(Component.text("Table de Craft")); diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/DominationOrb.java b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/DominationOrb.java index e3d201f20..371033be8 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/items/orb/DominationOrb.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/items/orb/DominationOrb.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.dream.models.registry.items.DreamRarity; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; public class DominationOrb extends DreamItem { /** @@ -31,7 +32,7 @@ public ItemStack getTransferableItem() { } @Override - public ItemStack getVanilla() { + public @NonNull ItemStack getVanilla() { return ItemStack.of(Material.HEART_OF_THE_SEA); } } diff --git a/src/main/java/fr/openmc/core/features/milestones/Milestone.java b/src/main/java/fr/openmc/core/features/milestones/Milestone.java index 8358b023b..71d563fa0 100644 --- a/src/main/java/fr/openmc/core/features/milestones/Milestone.java +++ b/src/main/java/fr/openmc/core/features/milestones/Milestone.java @@ -10,18 +10,15 @@ import java.util.UUID; public interface Milestone { - HashMap playerData = new HashMap<>(); - + /** * Returns the player data for the milestone. * This is a static method that returns a HashMap containing player UUIDs and their corresponding MilestoneModel. * * @return A HashMap containing player UUIDs and their MilestoneModel. */ - default HashMap getPlayerData() { - return playerData; - } - + HashMap getPlayerData(); + /** * Returns the name of the milestone. * diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java index e1e185e18..291a898bf 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneUtils.java @@ -3,7 +3,6 @@ import fr.openmc.core.features.displays.bossbar.BossbarManager; import fr.openmc.core.features.displays.bossbar.BossbarsType; import fr.openmc.core.features.milestones.tutorial.TutorialBossBar; -import fr.openmc.core.features.milestones.tutorial.TutorialMilestone; import fr.openmc.core.features.milestones.tutorial.TutorialStep; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -18,7 +17,7 @@ public static void completeStep(MilestoneType type, Player player, Enum step) { MilestonesManager.getMilestoneData(type).get(player.getUniqueId()).setProgress(0); - if (type != MilestoneType.TUTORIAL) return; //TODO Refaire les bossbars + if (type != MilestoneType.TUTORIAL) return; //TODO Refaire les boss bars int maxStep = TutorialStep.values().length; @@ -45,7 +44,7 @@ public static void setBossBar(Player player) { if (step >= maxStep) return; String progressStr = ""; if (step == 0) { - progressStr = " (" + TutorialMilestone.playerData.get(player.getUniqueId()).getProgress() + " / 30)"; + progressStr = " (" + MilestoneType.TUTORIAL.getMilestone().getPlayerData().get(player.getUniqueId()).getProgress() + " / 30)"; } TutorialBossBar.addTutorialBossBarForPlayer( diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java b/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java index 9e2f605c9..3f0b841ce 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestonesManager.java @@ -22,8 +22,8 @@ public class MilestonesManager { public static void init() { Arrays.stream(MilestoneType.values()).toList().forEach(milestoneType -> registerMilestone(milestoneType.getMilestone())); - - loadMilestonesData(); + + loadMilestonesData(); loadMilestonesProgress(); registerMilestoneCommand(); @@ -51,12 +51,12 @@ public static void initDB(ConnectionSource connectionSource) throws SQLException public static void loadMilestonesData() { try { List milestoneData = millestoneDao.queryForAll(); - for (MilestoneModel data : milestoneData) { - MilestoneType type = MilestoneType.valueOf(data.getType()); + MilestoneType type = MilestoneType.valueOf(data.getType()); Milestone milestone = type.getMilestone(); - milestone.getPlayerData().put(data.getUUID(), data); + milestone.getPlayerData().put(data.getUUID(), data); } + OMCPlugin.getInstance().getSLF4JLogger().info("Milestones loaded successfully from the database!"); } catch (SQLException e) { throw new RuntimeException(e); } @@ -74,6 +74,7 @@ public static void saveMilestonesData() { millestoneDao.createOrUpdate(model); } } + OMCPlugin.getInstance().getSLF4JLogger().info("Milestones saved successfully to the database!"); } catch (SQLException e) { throw new RuntimeException(e); } @@ -84,6 +85,7 @@ public static void saveMilestonesData() { */ public static void loadMilestonesProgress() { for (Milestone milestone : milestones) { + if (milestone.getPlayerData().isEmpty()) continue; // Pour tous les joueurs du milestone, la progression est chargée à l'étape actuelle for (Map.Entry playerData : milestone.getPlayerData().entrySet()) { milestone.getSteps().get(playerData.getValue().getStep()).setProgress(playerData.getKey(), playerData.getValue().getProgress()); diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java index eb927ae9f..55a1ec291 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java @@ -2,6 +2,7 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.core.features.milestones.Milestone; +import fr.openmc.core.features.milestones.MilestoneModel; import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.menus.MilestoneMenu; @@ -11,10 +12,20 @@ import org.bukkit.inventory.ItemStack; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.UUID; public class TutorialMilestone implements Milestone { - @Override + + private static HashMap playerData = new HashMap<>(); + + @Override + public HashMap getPlayerData() { + return playerData; + } + + @Override public String getName() { return "§7Tutoriel d'OpenMC"; } diff --git a/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java b/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java index 4fdacadc6..af60d1e3d 100644 --- a/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java +++ b/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java @@ -73,6 +73,8 @@ public static void init() { PlayerSettingsManager.initDB(connectionSource); CityStatisticsManager.initDB(connectionSource); HalloweenManager.initDB(connectionSource); + + OMCPlugin.getInstance().getSLF4JLogger().info("Database connection initialized!"); } catch (SQLException e) { OMCPlugin.getInstance().getSLF4JLogger().error("Failed to initialize the database connection.", e); throw new RuntimeException(e); From 820c57c07206edf2f3f4006327e862307480febd Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Mon, 16 Feb 2026 13:06:58 +0100 Subject: [PATCH 4/5] Dream Milestone part. 2 --- .../dream/events/PlayerEnterBiomeEvent.java | 33 ++++++++++ .../events/TakeFromSingularityEvent.java | 29 +++++++++ .../listeners/biomes/PlayerEnteredBiome.java | 2 + .../mecanism/singularity/SingularityMenu.java | 14 ++--- .../features/dream/milestone/DreamSteps.java | 36 ++++++++++- ...ominationOrbQuest.java => AltarQuest.java} | 8 +-- .../milestone/quests/CloudCastleQuest.java | 45 ++++++++++++++ .../milestone/quests/CloudValleyQuest.java | 48 +++++++++++++++ .../quests/CraftDominationOrbQuest.java | 19 +++--- .../quests/CraftEternalFireQuest.java | 57 +++++++++++++++++ .../quests/CraftMechanicPickaxeQuest.java | 57 +++++++++++++++++ .../quests/CraftSingularityQuest.java | 57 +++++++++++++++++ .../milestone/quests/CraftingTableQuest.java | 9 ++- .../dream/milestone/quests/CraftsQuest.java | 2 +- ...eartQuest.java => CreakingHeartQuest.java} | 6 +- .../quests/CrystallizedPickaxeQuest.java | 53 ++++++++++++++++ .../milestone/quests/CubeTempleQuest.java | 5 +- .../dream/milestone/quests/EweniteQuest.java | 53 ++++++++++++++++ .../milestone/quests/GlaciteOrbQuest.java | 46 ++++++++++++++ .../milestone/quests/GrottoCampQuest.java | 46 ++++++++++++++ .../milestone/quests/IllusionistQuest.java | 47 ++++++++++++++ .../milestone/quests/KillBreezyQuest.java | 55 +++++++++++++++++ .../milestone/quests/MetalDetectorQuest.java | 55 +++++++++++++++++ .../dream/milestone/quests/MudBeachQuest.java | 51 ++++++++++++++++ .../dream/milestone/quests/MudOrbQuest.java | 61 +++++++++++++++++++ .../dream/milestone/quests/OldAxeQuest.java | 2 +- .../dream/milestone/quests/SleepQuest.java | 2 +- .../dream/milestone/quests/SoulOrbQuest.java | 2 +- .../dream/milestone/quests/SoulsQuest.java | 3 +- .../quests/TransferableObjectQuest.java | 54 ++++++++++++++++ .../features/milestones/MilestoneModel.java | 4 ++ .../features/milestones/MilestoneQuest.java | 9 +-- 32 files changed, 928 insertions(+), 42 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java create mode 100644 src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java rename src/main/java/fr/openmc/core/features/dream/milestone/quests/{AltarDominationOrbQuest.java => AltarQuest.java} (87%) create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudCastleQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudValleyQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftMechanicPickaxeQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java rename src/main/java/fr/openmc/core/features/dream/milestone/quests/{GetHeartQuest.java => CreakingHeartQuest.java} (89%) create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/GrottoCampQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/IllusionistQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/KillBreezyQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/MetalDetectorQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/MudBeachQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/MudOrbQuest.java create mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java new file mode 100644 index 000000000..5bc59c710 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java @@ -0,0 +1,33 @@ +package fr.openmc.core.features.dream.events; + +import lombok.Getter; +import org.bukkit.block.Biome; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerEnterBiomeEvent extends Event { + + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + private final Biome biome; + + /** + * @param player The player whose dream time has ended + */ + public PlayerEnterBiomeEvent(Player player, Biome biome) { + this.player = player; + this.biome = biome; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java new file mode 100644 index 000000000..cad76e2b8 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java @@ -0,0 +1,29 @@ +package fr.openmc.core.features.dream.events; + +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +@Getter +public class TakeFromSingularityEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + private final Player player; + private final ItemStack item; + + public TakeFromSingularityEvent(Player player, ItemStack item) { + this.player = player; + this.item = item; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java b/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java index 905cd6c23..5e3e4d87c 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java @@ -3,6 +3,7 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.PlayerEnterBiomeEvent; import fr.openmc.core.features.dream.generation.DreamBiome; import fr.openmc.core.features.dream.models.db.DBDreamPlayer; import fr.openmc.core.utils.ParticleUtils; @@ -87,6 +88,7 @@ public void onPlayerMove(PlayerMoveEvent event) { ); activeTasks.put(player.getUniqueId(), task); + Bukkit.getServer().getPluginManager().callEvent(new PlayerEnterBiomeEvent(player, biome)); MessagesManager.sendMessage(player, Component.text("Attention, vous êtes dans un biome que vous avez pas encore débloqué, il vous faut l'§b" + ORB_UNLOCKER.get(index)), Prefix.DREAM, MessageType.WARNING, false); } } diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityMenu.java b/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityMenu.java index 3ab65edfe..d45c8e071 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityMenu.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityMenu.java @@ -5,8 +5,10 @@ import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.commands.utils.Restart; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.TakeFromSingularityEvent; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; @@ -111,9 +113,7 @@ public void onInventoryClick(InventoryClickEvent event) { // prendre if (current != null && current.getType() != Material.AIR) { - if (currentDream == null) { - return; - } + if (currentDream == null) return; if (inDream) return; @@ -128,6 +128,7 @@ public void onInventoryClick(InventoryClickEvent event) { replacement.setAmount(current.getAmount()); event.setCurrentItem(replacement); + Bukkit.getServer().getPluginManager().callEvent(new TakeFromSingularityEvent(player, replacement)); return; } @@ -143,12 +144,9 @@ public void onInventoryClick(InventoryClickEvent event) { event.setCancelled(true); return; } - if (clickInPlayerInv) return; + if (clickInPlayerInv) return; // Laisser } else if (inDream) { - if (!cursorDream.isTransferable()) { - event.setCancelled(true); - return; - } + if (!cursorDream.isTransferable()) event.setCancelled(true); } } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java index 01b4a2404..718700750 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java @@ -14,9 +14,24 @@ public enum DreamSteps { OLD_AXE(null), DOMINATION_ORB(null), CUBE_TEMPLE(null), - ALTAR_DOMINATION(null), + ALTAR(null), SOULS(null), SOUL_ORB(null), + CLOUD_VALLEY(null), + CLOUD_CASTLE(null), + KILL_BREEZY(null), + MUD_BEACH(null), + METAL_DETECTOR(null), + MUD_ORB(null), + CRYSTALLIZED_PICKAXE(null), + ETERNAL_FIRE(null), + GROTTO_CAMP(null), + ILLUSIONIST(null), + EWENITE(null), + MECHANIC_PICKAXE(null), + GLACITE_ORB(null), + SINGULARITY(null), + TRANSFERABLE_OBJECT(null) ; private MilestoneQuest quest; @@ -29,12 +44,27 @@ public enum DreamSteps { SLEEP.quest = new SleepQuest(); CRAFTS.quest = new CraftsQuest(); CRAFTING_TABLE.quest = new CraftingTableQuest(); - GET_HEART.quest = new GetHeartQuest(); + GET_HEART.quest = new CreakingHeartQuest(); OLD_AXE.quest = new OldAxeQuest(); DOMINATION_ORB.quest = new CraftDominationOrbQuest(); CUBE_TEMPLE.quest = new CubeTempleQuest(); - ALTAR_DOMINATION.quest = new AltarDominationOrbQuest(); + ALTAR.quest = new AltarQuest(); SOULS.quest = new SoulsQuest(); SOUL_ORB.quest = new SoulOrbQuest(); + CLOUD_VALLEY.quest = new CloudValleyQuest(); + CLOUD_CASTLE.quest = new CloudCastleQuest(); + KILL_BREEZY.quest = new KillBreezyQuest(); + MUD_BEACH.quest = new MudBeachQuest(); + METAL_DETECTOR.quest = new MetalDetectorQuest(); + MUD_ORB.quest = new MudOrbQuest(); + CRYSTALLIZED_PICKAXE.quest = new CrystallizedPickaxeQuest(); + ETERNAL_FIRE.quest = new CraftEternalFireQuest(); + GROTTO_CAMP.quest = new GrottoCampQuest(); + ILLUSIONIST.quest = new IllusionistQuest(); + EWENITE.quest = new EweniteQuest(); + MECHANIC_PICKAXE.quest = new CraftMechanicPickaxeQuest(); + GLACITE_ORB.quest = new GlaciteOrbQuest(); + SINGULARITY.quest = new CraftSingularityQuest(); + TRANSFERABLE_OBJECT.quest = new TransferableObjectQuest(); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java similarity index 87% rename from src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java rename to src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java index 34922a7f3..3f6727fd9 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarDominationOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java @@ -19,8 +19,8 @@ import java.util.List; -public class AltarDominationOrbQuest extends MilestoneQuest implements Listener { - public AltarDominationOrbQuest() { +public class AltarQuest extends MilestoneQuest implements Listener { + public AltarQuest() { super( "Début du rituel", List.of( @@ -29,7 +29,7 @@ public AltarDominationOrbQuest() { ), Material.ENCHANTING_TABLE, MilestoneType.DREAM, - DreamSteps.ALTAR_DOMINATION, + DreamSteps.ALTAR, new QuestTier( 1, new QuestTextReward("Hmmm... avec cette table étrange, il est visiblement possible de transformer l'Orbe de Domination. Mais pour en faire quoi !? \n" + @@ -46,7 +46,7 @@ public void onAltarBind(AltarBindEvent e) { DreamItem item = e.getItem(); if (item == null) return; if (item instanceof DominationOrb) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.ALTAR_DOMINATION.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudCastleQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudCastleQuest.java new file mode 100644 index 000000000..15c55e601 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudCastleQuest.java @@ -0,0 +1,45 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.PlayerEnterStructureEvent; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import java.util.List; + +public class CloudCastleQuest extends MilestoneQuest { + public CloudCastleQuest() { + super( + "Laputa", + List.of( + "§fEntrer dans le §dChâteau des Nuages", + "§8§oUn nouveau château à conquérir ?" + ), + Material.QUARTZ_PILLAR, + MilestoneType.DREAM, + DreamSteps.CLOUD_CASTLE, + new QuestTier( + 1, + new QuestTextReward("Ce monde regorge de choses cachées. Explorons le château en quête de ressources. Et qui dit château, dit donjon, et donc boss...", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCastleEnter(PlayerEnterStructureEvent e) { + if (e.getStructure().type() != DreamStructure.DreamType.CLOUD_CASTLE) return; + Player player = e.getPlayer(); + + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudValleyQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudValleyQuest.java new file mode 100644 index 000000000..3c845f097 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudValleyQuest.java @@ -0,0 +1,48 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.PlayerEnterBiomeEvent; +import fr.openmc.core.features.dream.generation.DreamBiome; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class CloudValleyQuest extends MilestoneQuest implements Listener { + public CloudValleyQuest() { + super( + "Montée au septième ciel", + List.of( + "§fDécouvrir la §dVallée des Nuages", + "§8§oCes nuages de ce rêve doivent bien cacher quelque chose..." + ), + Material.SNOW_BLOCK, + MilestoneType.DREAM, + DreamSteps.CLOUD_VALLEY, + new QuestTier( + 1, + new QuestTextReward("Ces nuages sont comme une nouvelle plaine, on peut courir dessus, sauter de nuage en nuage, et si on tombe, ça ne fait même pas mal.\n" + + "Tiens, c'est quoi ça, au loin ? Le château que j'ai cru avoir aperçu tout à l'heure ?", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onEnterBiome(PlayerEnterBiomeEvent e) { + Player player = e.getPlayer(); + + if (!e.getBiome().equals(DreamBiome.CLOUD_LAND.getBiome())) return; + + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java index e348c784c..052b0bdb3 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.dream.milestone.quests; +import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.milestone.DreamSteps; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; @@ -40,14 +41,16 @@ public CraftDominationOrbQuest() { @EventHandler public void onCraft(CraftItemEvent e) { - ItemStack item = e.getCurrentItem(); - if (item == null) return; - - DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); - if (dreamItem == null) return; - if (dreamItem instanceof DominationOrb) { - if (e.getWhoClicked() instanceof Player player) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.DOMINATION_ORB.ordinal()) return; + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof DominationOrb) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.java new file mode 100644 index 000000000..8f44a8ab3 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.blocks.EternalCampFire; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class CraftEternalFireQuest extends MilestoneQuest implements Listener { + + public CraftEternalFireQuest() { + super( + "L'ère glacière", + List.of( + "" + ), + DreamItemRegistry.getByName("omc_dream:eternal_campfire").getBest(), + MilestoneType.DREAM, + DreamSteps.ETERNAL_FIRE, + new QuestTier( + 1, + new QuestTextReward("", Prefix.OPENMC, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof EternalCampFire) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftMechanicPickaxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftMechanicPickaxeQuest.java new file mode 100644 index 000000000..e092591ca --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftMechanicPickaxeQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.tools.MecanicPickaxe; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class CraftMechanicPickaxeQuest extends MilestoneQuest implements Listener { + + public CraftMechanicPickaxeQuest() { + super( + "Révolution industrielle", + List.of( + "§fCrafter la §dPioche Mécanique" + ), + DreamItemRegistry.getByName("omc_dream:mecanic_pickaxe").getBest(), + MilestoneType.DREAM, + DreamSteps.MECHANIC_PICKAXE, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof MecanicPickaxe) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java new file mode 100644 index 000000000..50e7332d3 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.orb.Singularity; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class CraftSingularityQuest extends MilestoneQuest implements Listener { + + public CraftSingularityQuest() { + super( + "La finalité ?", + List.of( + "§fCrafter la §dSingularité" + ), + DreamItemRegistry.getByName("omc_dream:singularity").getBest(), + MilestoneType.DREAM, + DreamSteps.SINGULARITY, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof Singularity) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java index cc70cc73a..1c9670259 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java @@ -39,14 +39,13 @@ public CraftingTableQuest() { @EventHandler public void onCraft(CraftItemEvent e) { - Recipe recipe = e.getRecipe(); - - if (recipe.getResult().getType() != Material.CRAFTING_TABLE) return; - if (e.getWhoClicked() instanceof Player player) { if (!DreamUtils.isInDreamWorld(player)) return; - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CRAFTING_TABLE.ordinal()) return; + Recipe recipe = e.getRecipe(); + if (recipe.getResult().getType() != Material.CRAFTING_TABLE) return; + + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java index f63eb531c..1407bec6b 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java @@ -44,7 +44,7 @@ public void onCommand(PlayerCommandPreprocessEvent e) { Player player = e.getPlayer(); if (!DreamUtils.isInDreamWorld(player)) return; - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CRAFTS.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java similarity index 89% rename from src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java rename to src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java index 4d0c514d4..ac0842fa4 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GetHeartQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java @@ -20,9 +20,9 @@ import java.util.List; -public class GetHeartQuest extends MilestoneQuest implements Listener { +public class CreakingHeartQuest extends MilestoneQuest implements Listener { - public GetHeartQuest() { + public CreakingHeartQuest() { super( "La résine n'a pas de coeur", List.of( @@ -48,7 +48,7 @@ public void onPickUp(EntityPickupItemEvent e) { DreamItem item = DreamItemRegistry.getByItemStack(e.getItem().getItemStack()); if (item == null) return; if (item instanceof CreakingHeart) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.GET_HEART.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java new file mode 100644 index 000000000..d1d1e8497 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java @@ -0,0 +1,53 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.tools.CrystalizedPickaxe; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; + +import java.util.List; + +public class CrystallizedPickaxeQuest extends MilestoneQuest implements Listener { + + public CrystallizedPickaxeQuest() { + super( + "Le cristal n'est pas un métal", + List.of( + "§fObtenir la §dPioche Cristallisée" + ), + DreamItemRegistry.getByName("omc_dream:crystallized_pickaxe").getBest(), + MilestoneType.DREAM, + DreamSteps.CRYSTALLIZED_PICKAXE, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onPickUp(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (! DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getItem().getItemStack()); + if (item == null) return; + if (item instanceof CrystalizedPickaxe) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java index ba1cf0657..bf475aa34 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java @@ -23,7 +23,8 @@ public CubeTempleQuest() { "Vénérer le Cube des Ämes", List.of( "§fEntrer dans le §dTemple des Âmes", - "§8§oA la recherche du monument du Cube des Âmes... on est malgré tout dans Minecraft, même dans un rêve !" + "§8§oA la recherche du monument du Cube des Âmes...", + "on est malgré tout dans Minecraft, même dans un rêve !" ), Material.POLISHED_BLACKSTONE_BRICKS, MilestoneType.DREAM, @@ -41,7 +42,7 @@ public void onCastleEnter(PlayerEnterStructureEvent e) { if (e.getStructure().type() != DreamStructure.DreamType.SOUL_ALTAR) return; Player player = e.getPlayer(); - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.CUBE_TEMPLE.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java new file mode 100644 index 000000000..95399b505 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java @@ -0,0 +1,53 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.loots.Ewenite; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; + +import java.util.List; + +public class EweniteQuest extends MilestoneQuest implements Listener { + + public EweniteQuest() { + super( + "Aywenite, Awyenito ou Ewenite ?", + List.of( + "§fObtenir de l'§dEwenite" + ), + DreamItemRegistry.getByName("omc_dream:ewenite").getBest(), + MilestoneType.DREAM, + DreamSteps.EWENITE, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onPickUp(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getItem().getItemStack()); + if (item == null) return; + if (item instanceof Ewenite) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java new file mode 100644 index 000000000..e5803fbc2 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java @@ -0,0 +1,46 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.GlaciteTradeEvent; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.orb.GlaciteOrb; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class GlaciteOrbQuest extends MilestoneQuest implements Listener { + + public GlaciteOrbQuest() { + super( + "Enfin la dernière ?", + List.of( + "§fEchanger l'§dOrbe de Glace" + ), + DreamItemRegistry.getByName("omc_dream:glacite_orb").getBest(), + MilestoneType.DREAM, + DreamSteps.GLACITE_ORB, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onTrade(GlaciteTradeEvent e) { + Player player = e.getPlayer(); + if (e.getTrade().getResult() instanceof GlaciteOrb) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/GrottoCampQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GrottoCampQuest.java new file mode 100644 index 000000000..39d5c7d50 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GrottoCampQuest.java @@ -0,0 +1,46 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.events.PlayerEnterStructureEvent; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class GrottoCampQuest extends MilestoneQuest implements Listener { + + public GrottoCampQuest() { + super( + "La survie en mode fin du monde ?", + List.of( + "§fTrouver un §dcamp de grotte" + ), + Material.DEEPSLATE, + MilestoneType.DREAM, + DreamSteps.GROTTO_CAMP, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCastleEnter(PlayerEnterStructureEvent e) { + if (e.getStructure().type() != DreamStructure.DreamType.BASE_CAMP) return; + Player player = e.getPlayer(); + + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/IllusionistQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/IllusionistQuest.java new file mode 100644 index 000000000..c27e5ff0e --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/IllusionistQuest.java @@ -0,0 +1,47 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import de.oliver.fancynpcs.api.events.NpcInteractEvent; +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class IllusionistQuest extends MilestoneQuest implements Listener { + + public IllusionistQuest() { + super( + "Y'a quelqu'un ?", + List.of( + "§fTrouver et aller voir l'§dIllusioneur" + ), + Material.EVOKER_SPAWN_EGG, + MilestoneType.DREAM, + DreamSteps.ILLUSIONIST, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onInterract(NpcInteractEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + if (!e.getNpc().getData().getName().startsWith("glacite-")) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/KillBreezyQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/KillBreezyQuest.java new file mode 100644 index 000000000..691c47492 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/KillBreezyQuest.java @@ -0,0 +1,55 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.generation.structures.DreamStructure; +import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.registries.mobs.Breezy; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; + +import java.util.List; + +public class KillBreezyQuest extends MilestoneQuest implements Listener { + public KillBreezyQuest() { + super( + "L'air du vent", + List.of( + "§fBattre §dBreezy", + "§8§oOn va dompter un des esprits de la montagne de Poncahontas, ou alors c'est Elsa ?" + ), + Material.WIND_CHARGE, + MilestoneType.DREAM, + DreamSteps.KILL_BREEZY, + new QuestTier( + 1, + new QuestTextReward("Difficile ce château, autant de montres au même endroit... " + + "Retournons sur la terre ferme pour prendre du bon temps.", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onKillBreezy(EntityDeathEvent e) { + if (e.getDamageSource().getCausingEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + if (!DreamStructuresManager.isInsideStructure(player.getLocation(), DreamStructure.DreamType.CLOUD_CASTLE)) return; + + if (e.getEntity() instanceof Breezy breezy && breezy.getId().equals("breezy")) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/MetalDetectorQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MetalDetectorQuest.java new file mode 100644 index 000000000..f2d5a2862 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MetalDetectorQuest.java @@ -0,0 +1,55 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.tools.MetalDetector; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class MetalDetectorQuest extends MilestoneQuest implements Listener { + + public MetalDetectorQuest() { + super( + "Coooooooaaaaaaa", + List.of( + "§fCraft le §dDétecteur à métaux", + "" + ), + DreamItemRegistry.getByName("omc_dream:metal_detector").getBest(), + MilestoneType.DREAM, + DreamSteps.METAL_DETECTOR, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onCraftItem(CraftItemEvent e) { + ItemStack item = e.getCurrentItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (dreamItem instanceof MetalDetector) { + if (e.getWhoClicked() instanceof Player player) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudBeachQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudBeachQuest.java new file mode 100644 index 000000000..1d79dfedf --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudBeachQuest.java @@ -0,0 +1,51 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.PlayerEnterBiomeEvent; +import fr.openmc.core.features.dream.generation.DreamBiome; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class MudBeachQuest extends MilestoneQuest implements Listener { + public MudBeachQuest() { + super( + "Je préfère la plage", + List.of( + "§fEntrer sur la §dPlage de Boue", + "§8§oProfitons de ce rêve pour aller se dorer la pilule au Soleil.", + "Tiens, pourquoi n'y a-t-il pas d'eau, mais que de la boue ?", + "§8§oEt toujours pas de Soleil !? Cet endroit n'est donc que de la nuit ?" + ), + Material.MUD, + MilestoneType.DREAM, + DreamSteps.MUD_BEACH, + new QuestTier( + 1, + new QuestTextReward("Bon, assez de repos, il serait temps que je cherche la prochaine orbe.", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onEnterBiome(PlayerEnterBiomeEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + if (!e.getBiome().equals(DreamBiome.MUD_BEACH.getBiome())) return; + + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudOrbQuest.java new file mode 100644 index 000000000..c145abcc2 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudOrbQuest.java @@ -0,0 +1,61 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.dream.registries.items.orb.MudOrb; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestMethodsReward; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; + +import java.util.List; + +public class MudOrbQuest extends MilestoneQuest implements Listener { + + public MudOrbQuest() { + super( + "Bip Biip Biiiiiiip", + List.of( + "Trouver l'Orbe de Boue" + ), + DreamItemRegistry.getByName("omc_dream:mud_orb").getBest(), + MilestoneType.DREAM, + DreamSteps.MUD_ORB, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS), + new QuestMethodsReward( + player -> { + if (player.getInventory().contains(DreamItemRegistry.getByName("omc_dream:crystallized_pickaxe").getBest())) { + DreamSteps.CRYSTALLIZED_PICKAXE.getQuest().incrementProgressInDream(player.getUniqueId()); + } + } + ) + ) + ); + } + + @EventHandler + public void onPickUp(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getItem().getItemStack()); + if (item == null) return; + if (item instanceof MudOrb) { + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } + } + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java index ad3fbe7c1..7cda421b6 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java @@ -47,7 +47,7 @@ public void onCraft(CraftItemEvent e) { if (dreamItem == null) return; if (dreamItem instanceof OldCreakingAxe) { if (e.getWhoClicked() instanceof Player player) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.OLD_AXE.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java index a8bee6b9f..73c591bf9 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java @@ -41,7 +41,7 @@ public SleepQuest() { public void onDreamEnter(DreamEnterEvent e) { Player player = e.getPlayer(); - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SLEEP.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java index 260924af4..de4aed7d7 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java @@ -46,7 +46,7 @@ public void onSoulOrbCrafting(AltarCraftingEvent e) { DreamItem item = e.getCraftedItem(); if (item == null) return; if (item instanceof SoulOrb) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SOUL_ORB.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId()); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java index 78f587306..b9c65b31a 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.java @@ -48,8 +48,9 @@ public void onCollectSoul(EntityPickupItemEvent e) { DreamItem item = DreamItemRegistry.getByItemStack(baseItem); if (item == null) return; if (item instanceof Soul) { - if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) != DreamSteps.SOULS.ordinal()) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; this.incrementProgressInDream(player.getUniqueId(), baseItem.getAmount()); + getType().getMilestone().getPlayerData().get(player.getUniqueId()).incrementProgress(baseItem.getAmount()); } } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java new file mode 100644 index 000000000..5257eece6 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java @@ -0,0 +1,54 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.TakeFromSingularityEvent; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.MilestonesManager; +import fr.openmc.core.features.quests.objects.QuestTier; +import fr.openmc.core.features.quests.rewards.QuestTextReward; +import fr.openmc.core.utils.messages.MessageType; +import fr.openmc.core.utils.messages.Prefix; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class TransferableObjectQuest extends MilestoneQuest implements Listener { + + public TransferableObjectQuest() { + super( + "Ce n'était qu'un rêve ?", + List.of( + "§fRécupérer un objet §dtransferable §fdans l'Overworld" + ), + Material.LAPIS_BLOCK, + MilestoneType.DREAM, + DreamSteps.TRANSFERABLE_OBJECT, + new QuestTier( + 1, + new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + ) + ); + } + + @EventHandler + public void onTakeItem(TakeFromSingularityEvent e) { + Player player = e.getPlayer(); + if (DreamUtils.isInDreamWorld(player)) return; + + ItemStack item = e.getItem(); + if (item == null) return; + + DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); + if (dreamItem == null) return; + if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java index 3fcce22cf..5e20fbdcb 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneModel.java @@ -37,4 +37,8 @@ public MilestoneModel(UUID uuid, MilestoneType type, int step, int progress) { public void incrementProgress() { this.progress++; } + + public void incrementProgress(int progress) { + this.progress += progress; + } } diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java index fed40f108..6e1beb6c5 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -16,6 +16,11 @@ public class MilestoneQuest extends Quest { protected final Enum step; public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, Enum step, QuestTier quest) { + this(name, baseDescription, new ItemStack(icon), type, step, quest); + + } + + public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, Enum step, QuestTier quest) { super(name, baseDescription, icon); this.type = type; this.step = step; @@ -23,8 +28,4 @@ public MilestoneQuest(String name, List baseDescription, Material icon, new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)) )); } - - public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, Enum step, QuestTier quest) { - this(name, baseDescription, icon.getType(), type, step, quest); - } } From 0c1de21c9cf6853ebb3f3c765a5929d45bf755f4 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Wed, 18 Feb 2026 18:50:56 +0100 Subject: [PATCH 5/5] Dream Milestone part. 3 --- .../core/features/dream/DreamManager.java | 17 +++- .../features/dream/events/AltarBindEvent.java | 7 +- .../dream/events/AltarCraftingEvent.java | 7 +- .../features/dream/events/DreamEndEvent.java | 7 +- .../dream/events/DreamEnterEvent.java | 7 +- .../dream/events/GlaciteTradeEvent.java | 7 +- .../dream/events/MetalDetectorLootEvent.java | 7 +- .../dream/events/PlayerEnterBiomeEvent.java | 7 +- .../events/PlayerEnterStructureEvent.java | 7 +- .../events/PlayerExitStructureEvent.java | 7 +- .../events/TakeFromSingularityEvent.java | 7 +- .../dream/PlayerChangeWorldListener.java | 3 + .../listeners/dream/PlayerChatListener.java | 20 +++++ .../registry/DreamMobDamageListener.java | 2 + .../commands/DreamMilestoneCommand.java | 5 -- .../quests/CraftDominationOrbQuest.java | 14 +-- .../milestone/quests/CraftingTableQuest.java | 16 ++-- .../dream/milestone/quests/CraftsQuest.java | 13 ++- .../milestone/quests/CreakingHeartQuest.java | 14 +-- .../dream/milestone/quests/OldAxeQuest.java | 14 +-- .../dream/milestone/quests/SleepQuest.java | 15 ++-- .../features/dream/models/db/DreamPlayer.java | 22 ++--- .../dream/registries/mobs/Breezy.java | 3 +- .../features/milestones/MilestoneQuest.java | 42 +++++++++ .../milestones/menus/MilestoneDialog.java | 86 +++++++++++++++++++ .../core/features/quests/objects/Quest.java | 23 +---- .../features/quests/objects/QuestTier.java | 10 +++ .../openmc/core/utils/dialog/ButtonType.java | 5 +- 28 files changed, 271 insertions(+), 123 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java delete mode 100644 src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java create mode 100644 src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java diff --git a/src/main/java/fr/openmc/core/features/dream/DreamManager.java b/src/main/java/fr/openmc/core/features/dream/DreamManager.java index dae0c60e3..1969d47c3 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamManager.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamManager.java @@ -13,7 +13,6 @@ import fr.openmc.core.features.city.sub.mayor.perks.Perks; import fr.openmc.core.features.dream.commands.AdminDreamCommands; import fr.openmc.core.features.dream.commands.DreamCommands; -import fr.openmc.core.features.dream.events.DreamEnterEvent; import fr.openmc.core.features.dream.generation.DreamBiome; import fr.openmc.core.features.dream.generation.DreamDimensionManager; import fr.openmc.core.features.dream.generation.listeners.CloudStructureDispenserListener; @@ -52,6 +51,8 @@ import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; public class DreamManager { @@ -62,6 +63,7 @@ public class DreamManager { private static final HashMap dreamPlayerData = new HashMap<>(); public static final HashMap cacheDreamPlayer = new HashMap<>(); + public static final Set dreamMilestoneDialogPlayer = new HashSet<>(); private static Dao dreamPlayerDao; private static Dao savePlayerDao; @@ -234,7 +236,6 @@ public static void addDreamPlayer(Player player, Location oldLocation) throws IO DreamPlayer newDreamPlayer = new DreamPlayer(player, oldInv, oldLocation, dreamPlayerInv); dreamPlayerData.put(player.getUniqueId(), newDreamPlayer); playerSaveData.put(player.getUniqueId(), newDreamPlayer.savePlayer()); - OMCPlugin.getInstance().getServer().getPluginManager().callEvent(new DreamEnterEvent(player)); } public static void removeDreamPlayer(Player player, Location dreamLocation) { @@ -324,6 +325,18 @@ public static void preloadSavePlayer(Player player, Location dreamLocation) thro ) ); } + + public static void addMilestoneDialogPlayer(Player player) { + dreamMilestoneDialogPlayer.add(player); + } + + public static void removeMilestoneDialogPlayer(Player player) { + dreamMilestoneDialogPlayer.remove(player); + } + + public static boolean isPlayerInMilestoneDialog(Player player) { + return dreamMilestoneDialogPlayer.contains(player); + } public static void setMaxTime(Player player, long maxTime) { DBDreamPlayer cache = DreamManager.getCacheDreamPlayer(player); diff --git a/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java index acd556e99..f095ebc44 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java @@ -5,20 +5,19 @@ import lombok.Getter; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class AltarBindEvent extends Event { +public class AltarBindEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final DreamItem item; private final AltarRecipes recipe; private final Location altarLocation; public AltarBindEvent(Player player, DreamItem item, AltarRecipes recipe, Location altarLocation) { - this.player = player; + super(player); this.item = item; this.recipe = recipe; this.altarLocation = altarLocation; diff --git a/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java b/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java index 25b4ae008..a12ec00c2 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/AltarCraftingEvent.java @@ -4,19 +4,18 @@ import fr.openmc.core.features.dream.models.registry.items.DreamItem; import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class AltarCraftingEvent extends Event { +public class AltarCraftingEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final AltarRecipes recipe; private final DreamItem craftedItem; public AltarCraftingEvent(Player player, AltarRecipes recipe, DreamItem craftItem) { - this.player = player; + super(player); this.recipe = recipe; this.craftedItem = craftItem; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/DreamEndEvent.java b/src/main/java/fr/openmc/core/features/dream/events/DreamEndEvent.java index fbb21bb00..eee06e2c3 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/DreamEndEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/DreamEndEvent.java @@ -2,20 +2,19 @@ import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class DreamEndEvent extends Event { +public class DreamEndEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; /** * @param player The player whose dream time has ended */ public DreamEndEvent(Player player) { - this.player = player; + super(player); } public static HandlerList getHandlerList() { diff --git a/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java b/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java index e336206cf..d5eab36f3 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java @@ -2,20 +2,19 @@ import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class DreamEnterEvent extends Event { +public class DreamEnterEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; /** * @param player The player whose enter in his dream */ public DreamEnterEvent(Player player) { - this.player = player; + super(player); } public static HandlerList getHandlerList() { diff --git a/src/main/java/fr/openmc/core/features/dream/events/GlaciteTradeEvent.java b/src/main/java/fr/openmc/core/features/dream/events/GlaciteTradeEvent.java index bb3596c7f..f956075de 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/GlaciteTradeEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/GlaciteTradeEvent.java @@ -3,21 +3,20 @@ import fr.openmc.core.features.dream.mecanism.tradernpc.GlaciteTrade; import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class GlaciteTradeEvent extends Event { +public class GlaciteTradeEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final GlaciteTrade trade; /** * @param player The player whose dream time has ended */ public GlaciteTradeEvent(Player player, GlaciteTrade trade) { - this.player = player; + super(player); this.trade = trade; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/MetalDetectorLootEvent.java b/src/main/java/fr/openmc/core/features/dream/events/MetalDetectorLootEvent.java index f39f9a6e8..6ca9b70c2 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/MetalDetectorLootEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/MetalDetectorLootEvent.java @@ -2,17 +2,16 @@ import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import java.util.List; @Getter -public class MetalDetectorLootEvent extends Event { +public class MetalDetectorLootEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final List loot; /** @@ -20,7 +19,7 @@ public class MetalDetectorLootEvent extends Event { * @param loot The list of ItemStack representing the loot found. */ public MetalDetectorLootEvent(Player player, List loot) { - this.player = player; + super(player); this.loot = loot; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java index 5bc59c710..1009d67dd 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java @@ -3,22 +3,21 @@ import lombok.Getter; import org.bukkit.block.Biome; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class PlayerEnterBiomeEvent extends Event { +public class PlayerEnterBiomeEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final Biome biome; /** * @param player The player whose dream time has ended */ public PlayerEnterBiomeEvent(Player player, Biome biome) { - this.player = player; + super(player); this.biome = biome; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java index 3448e495c..dc291eaa7 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java @@ -3,14 +3,13 @@ import fr.openmc.core.features.dream.generation.structures.DreamStructure; import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class PlayerEnterStructureEvent extends Event { +public class PlayerEnterStructureEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final DreamStructure structure; /** @@ -18,7 +17,7 @@ public class PlayerEnterStructureEvent extends Event { * @param structure The structure where the player enters on */ public PlayerEnterStructureEvent(Player player, DreamStructure structure) { - this.player = player; + super(player); this.structure = structure; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java index ea714caeb..5392f6483 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java @@ -3,14 +3,13 @@ import fr.openmc.core.features.dream.generation.structures.DreamStructure; import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; @Getter -public class PlayerExitStructureEvent extends Event { +public class PlayerExitStructureEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final DreamStructure structure; /** @@ -18,7 +17,7 @@ public class PlayerExitStructureEvent extends Event { * @param structure The structure where the player enters on */ public PlayerExitStructureEvent(Player player, DreamStructure structure) { - this.player = player; + super(player); this.structure = structure; } diff --git a/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java index cad76e2b8..15a307361 100644 --- a/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java +++ b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java @@ -2,19 +2,18 @@ import lombok.Getter; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @Getter -public class TakeFromSingularityEvent extends Event { +public class TakeFromSingularityEvent extends PlayerEvent { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; private final ItemStack item; public TakeFromSingularityEvent(Player player, ItemStack item) { - this.player = player; + super(player); this.item = item; } diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChangeWorldListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChangeWorldListener.java index 84ba003f7..f237096a8 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChangeWorldListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChangeWorldListener.java @@ -1,10 +1,12 @@ package fr.openmc.core.features.dream.listeners.dream; +import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.displays.bossbar.BossbarManager; import fr.openmc.core.features.displays.bossbar.BossbarsType; import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.displays.DreamBossBar; +import fr.openmc.core.features.dream.events.DreamEnterEvent; import fr.openmc.core.features.dream.models.db.DreamPlayer; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; @@ -44,6 +46,7 @@ public void onDreamEntrered(PlayerTeleportEvent event) { AttributeInstance inst = player.getAttribute(Attribute.MAX_HEALTH); if (inst == null) return; player.setHealth(inst.getBaseValue()); + OMCPlugin.getInstance().getServer().getPluginManager().callEvent(new DreamEnterEvent(player)); } @EventHandler diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java new file mode 100644 index 000000000..d9443cea8 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java @@ -0,0 +1,20 @@ +package fr.openmc.core.features.dream.listeners.dream; + +import fr.openmc.core.features.dream.DreamUtils; +import io.papermc.paper.event.player.AsyncChatEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class PlayerChatListener implements Listener { + + @EventHandler + public void onPlayerChat(AsyncChatEvent e) { + if (e.isCancelled()) return; + + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + e.setCancelled(true); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/registry/DreamMobDamageListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/registry/DreamMobDamageListener.java index 20912196c..596f9b65b 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/registry/DreamMobDamageListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/registry/DreamMobDamageListener.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.dream.listeners.registry; +import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.models.registry.DreamMob; import fr.openmc.core.features.dream.registries.DreamMobsRegistry; @@ -42,6 +43,7 @@ public void onPlayerDamage(EntityDamageByEntityEvent event) { if (dreamMob == null) return; event.setCancelled(true); + if (DreamManager.isPlayerInMilestoneDialog(p)) return; Vector kb = p.getLocation().toVector() .subtract(livingEntity.getLocation().toVector()) diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java b/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java deleted file mode 100644 index 5780a1c8f..000000000 --- a/src/main/java/fr/openmc/core/features/dream/milestone/commands/DreamMilestoneCommand.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.openmc.core.features.dream.milestone.commands; - -public class DreamMilestoneCommand { - -} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java index 052b0bdb3..351573af7 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java @@ -9,9 +9,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -31,10 +28,13 @@ public CraftDominationOrbQuest() { DreamItemRegistry.getByName("omc_dream:domination_orb").getBest(), MilestoneType.DREAM, DreamSteps.DOMINATION_ORB, - new QuestTier( - 1, - new QuestTextReward("Et d'une ! Et cela me donne accès à une nouvelle zone. " + - "Il faut que je récupère les autres pour avoir accès à l'ensemble de mes rêves.", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Voilà l'orbe, que dois-je faire avec ?", + "§3Voyageur : Cette orbe est la première d'une série de §d5§3. Chacune d'elles permet de survivre dans la §dzone suivante§3, " + + "permettant de récupérer une nouvelle orbe et ainsi de suite pour ma euh... notre quête !", + "§6Je dois donc explorer un nouveau biome...", + "§3Voyageur : C'est exact ! Il va falloir trouver le §dTemple §3du maître des lieux. Tu ne devrais pas le louper je pense..." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java index 1c9670259..30b25207e 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.java @@ -6,9 +6,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -29,10 +26,15 @@ public CraftingTableQuest() { Material.CRAFTING_TABLE, MilestoneType.DREAM, DreamSteps.CRAFTING_TABLE, - new QuestTier( - 1, - new QuestTextReward("Bon, maintenant que j'ai la table, cherchons de quoi faire des outils et... " + - "comment se fait-il qu'il y ait des Creakings ici !?", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Bon, maintenant que j'ai la table, cherchons de quoi faire des outils et... " + + "comment se fait-il qu'il y ait des Craqueurs ici !?", + "§3Voyageur : Tu as le bon oeil. Ce monde regorge de créatures étonnantes qui ont un point commun : " + + "elles se nourrissent de §dtemps§3, en te le §dvolant§3.", + "§6C'est donc cela cette barre là haut ?", + "§3Voyageur : Oui, et ce temps n'est pas infini, c'est pourquoi nous devons faire vite. " + + "Profitons d'être au milieu de ces créatures pour récupérer leurs §dcoeurs§3." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java index 1407bec6b..c26ffb882 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftsQuest.java @@ -6,9 +6,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -28,10 +25,12 @@ public CraftsQuest() { Material.BOOK, MilestoneType.DREAM, DreamSteps.CRAFTS, - new QuestTier( - 1, - new QuestTextReward("Ce monde sombre et nouveau semble complexe. Mais cela ressemble à une survie normale, non ? " + - "Alors commençons par les bases, la table de craft.", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Cela ressemble à une survie normale, non ?", + "§3Voyageur : En effet, ce monde a beau être sombre, nouveau et complexe, il n'est pas si différent de l'Overworld. Mais une dimension se rajoute : le §dtemps §3! " + + "Pour le moment, tu ne peux qu'accéder à la §dPleine de Sculk§3, mais les autres biomes seront bientôt accessibles.", + "§6Hmmm, cela m'intrigue. Mais tu as dis que l'on manque de temps, alors ne traînons pas. Il me faut une §dtable de craft§6." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java index ac0842fa4..8c82095a3 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.java @@ -9,9 +9,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -32,10 +29,13 @@ public CreakingHeartQuest() { Material.RESIN_CLUMP, MilestoneType.DREAM, DreamSteps.GET_HEART, - new QuestTier( - 1, - new QuestTextReward("Ah ! Mais c'est vrai qu'il protègent leurs coeurs, qui va mettre bien utile par la suite. " + - "Mais bref, trêve de tergiversation, il me faut des outils.", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Ah ! Mais c'est vrai qu'il protègent leurs coeurs.", + "§3Voyageur : Oui, et ceux-ci nous seront utiles par la suite, les crafts de ce monde en utilisent beaucoup. " + + "Que ce soit pour les outils, armures, ou objets divers de ce monde. Commence par te faire une §dhache§3.", + "§6Mais quel est le but de ce monde ??", + "§3Voyageur : Je t'expliquerai bientôt, je n'ai pas envie que tu finisses comme moi..." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java index 7cda421b6..f5fe2f61f 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java @@ -8,9 +8,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -31,9 +28,14 @@ public OldAxeQuest() { DreamItemRegistry.getByName("omc_dream:old_creaking_axe").getBest(), MilestoneType.DREAM, DreamSteps.OLD_AXE, - new QuestTier( - 1, - new QuestTextReward("Une hâche, c'est déjà ça. Il faut collecter les orbes qui sont au nombre de 5. La première est d'ailleurs craftable...", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Une hâche, c'est déjà ça.", + "§6Et maintenant ?", + "§3Voyageur : Maintenant, il faut obtenir l'§dOrbe de Domination§3, puis je t'en expliquerai plus sur ce monde.", + "§6Mais comment obtenir cette Orbe ?", + "§3Voyageur : Ce n'est pas compliqué : elle se fabrique avec la §dtable de craft§3. Fais §d/crafts §3si tu as oublié comment. " + + "Elle te permettra de pouvoir explorer une nouvelle zone de ce rêve." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java index 73c591bf9..6e805282a 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java @@ -6,9 +6,6 @@ import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.quests.objects.QuestTier; -import fr.openmc.core.features.quests.rewards.QuestTextReward; -import fr.openmc.core.utils.messages.MessageType; -import fr.openmc.core.utils.messages.Prefix; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -28,11 +25,13 @@ public SleepQuest() { Material.RED_BED, MilestoneType.DREAM, DreamSteps.SLEEP, - new QuestTier( - 1, - new QuestTextReward("ZZZzzz... que se passe-t-il ? Je vois un monde sombre rempli de créatures étranges. Suis-je en train de rêver ? " + - "Ce monde est si différent de l'overworld, il faut que je m'adapte et que je comprenne ce monde.\n" + - "§d/milestone §opour voir la suite du guide", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6ZZZzzz... que se passe-t-il !? Suis-je en train de rêver ? Ce... monde à l'air si différent de l'Overworld !", + "§3Voyageur : Que..? Comment est-ce possible ??! Je pensais être le seul ici. Et cela fait si longtemps que je n'ai vu personne ici...", + "§6Mais, qui es-tu ? Ou es-tu ? et pourquoi me parles-tu ??", + "§3Voyageur : Et bien, bienvenue. Mais chaque chose en son temps. Temps qui va d'ailleurs nous manquer, il faut faire vite, je t'expliquerai tout au fur et à mesure. " + + "Pour l'heure, il faut que tu comprennes cette dimension, apprends ses règles et ses §dcrafts§3." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java b/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java index df0fb2488..e12e42001 100644 --- a/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java +++ b/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java @@ -92,18 +92,18 @@ public void cancelTimeTask() { public void scheduleTimeTask() { this.timeTask = Bukkit.getScheduler().runTaskTimer(OMCPlugin.getInstance(), () -> { - if (player.getGameMode().equals(GameMode.SURVIVAL)) { - if (dreamTime <= 0) { - Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> - Bukkit.getServer().getPluginManager().callEvent(new DreamEndEvent(this.player)) - ); - this.cancelTimeTask(); - return; - } - - this.dreamTime -= 1; - DreamBossBar.update(player, Math.min(1, (float) this.getDreamTime() / this.getMaxDreamTime())); + if (!player.getGameMode().equals(GameMode.SURVIVAL)) return; + if (DreamManager.isPlayerInMilestoneDialog(player)) return; + if (dreamTime <= 0) { + Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> + Bukkit.getServer().getPluginManager().callEvent(new DreamEndEvent(this.player)) + ); + this.cancelTimeTask(); + return; } + + this.dreamTime -= 1; + DreamBossBar.update(player, Math.min(1, (float) this.getDreamTime() / this.getMaxDreamTime())); }, 0L, 20L); } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java b/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java index 7354245ec..3a1768537 100644 --- a/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java +++ b/src/main/java/fr/openmc/core/features/dream/registries/mobs/Breezy.java @@ -1,6 +1,7 @@ package fr.openmc.core.features.dream.registries.mobs; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.generation.DreamDimensionManager; import fr.openmc.core.features.dream.models.registry.DreamMob; @@ -107,11 +108,11 @@ public void onProjectileCollide(ProjectileHitEvent event) { for (Entity e : world.getNearbyEntities(loc, 1.5, 1.5, 1.5)) { if (e instanceof Player p) { + if (DreamManager.isPlayerInMilestoneDialog(p)) continue; DreamUtils.removeDreamTime(p, this.getDamageTime(), true); p.setVelocity(p.getLocation().toVector().subtract(loc.toVector()).normalize().multiply(1.2).setY(0.6)); } } - charge.remove(); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java index 6e1beb6c5..fe5e4eba5 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -1,5 +1,7 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.milestones.menus.MilestoneDialog; import fr.openmc.core.features.quests.objects.Quest; import fr.openmc.core.features.quests.objects.QuestTier; import fr.openmc.core.features.quests.rewards.QuestMethodsReward; @@ -8,6 +10,7 @@ import org.bukkit.inventory.ItemStack; import java.util.List; +import java.util.UUID; @Getter public class MilestoneQuest extends Quest { @@ -28,4 +31,43 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)) )); } + + public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs) { + this(name, baseDescription, new ItemStack(icon), type, step, quest, dialogs); + + } + + public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs) { + super(name, baseDescription, icon); + this.type = type; + this.step = step; + this.addTier(quest.addRewards( + new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)), + new QuestMethodsReward(player -> { + player.closeInventory(); + MilestoneDialog.send(player, step, dialogs); + }) + )); + } + + /** + * Increment the progress for the quest for a player authorizing Dream world + * + * @param playerUUID The UUID of the player + */ + public void incrementProgressInDream(UUID playerUUID) { + incrementProgress(playerUUID, 1, true); + } + + + /** + * Increment the progress of the quest for a player by a specified amount authorizing Dream world. + *

+ * This method will check if the quest is fully completed, and if not, it will increase the progress. + * @param playerUUID The UUID of the player + * @param amount The amount to increment the progress by + */ + public void incrementProgressInDream(UUID playerUUID, int amount) { + incrementProgress(playerUUID, amount, true); + } } diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java new file mode 100644 index 000000000..ea9ca57db --- /dev/null +++ b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java @@ -0,0 +1,86 @@ +package fr.openmc.core.features.milestones.menus; + +import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.dream.DreamManager; +import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.utils.dialog.ButtonType; +import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.registry.data.dialog.ActionButton; +import io.papermc.paper.registry.data.dialog.DialogBase; +import io.papermc.paper.registry.data.dialog.action.DialogAction; +import io.papermc.paper.registry.data.dialog.body.DialogBody; +import io.papermc.paper.registry.data.dialog.type.DialogType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickCallback; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class MilestoneDialog { + + public static void send(Player player, Enum step, List dialogs) { + List body = new ArrayList<>(); + + for (int i = 0; i < 1; i++) { + String d = dialogs.get(i); + body.add(DialogBody.plainMessage(Component.text(d), 500)); + } + + ButtonType btn = (dialogs.size() == 1) ? ButtonType.FINISH : ButtonType.NEXT; + + Dialog dialog = Dialog.create(builder -> builder.empty() + .base(DialogBase.builder(Component.text((step.ordinal() + 1) + "/" + DreamSteps.values().length)) + .body(body) + .canCloseWithEscape(true) + .build() + ) + .type(DialogType.notice( + ActionButton.builder(Component.text(btn.getLabel())) + .action(DialogAction.customClick((response, audience) -> { + player.closeInventory(); + if (dialogs.size() == 1) return; + send(player, step, dialogs, 2); + }, ClickCallback.Options.builder().build())) + .build() + )) + ); + Bukkit.getServer().getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { + player.showDialog(dialog); + DreamManager.addMilestoneDialogPlayer(player); + }, 20); + } + + private static void send(Player player, Enum step, List dialogs, int messageStep) { + List body = new ArrayList<>(); + + for (int i = 0; i < messageStep; i++) { + String d = dialogs.get(i); + body.add(DialogBody.plainMessage(Component.text(d), 500)); + } + + ButtonType btn = (dialogs.size() <= messageStep) ? ButtonType.FINISH : ButtonType.NEXT; + + Dialog dialog = Dialog.create(builder -> builder.empty() + .base(DialogBase.builder(Component.text((step.ordinal() + 1) + "/" + DreamSteps.values().length)) + .body(body) + .canCloseWithEscape(true) + .build() + ) + .type(DialogType.notice( + ActionButton.builder(Component.text(btn.getLabel())) + .action(DialogAction.customClick((response, audience) -> { + player.closeInventory(); + if (dialogs.size() <= messageStep) { + DreamManager.removeMilestoneDialogPlayer(player); + return; + } + send(player, step, dialogs, messageStep + 1); + }, ClickCallback.Options.builder().build())) + .build() + )) + ); + player.showDialog(dialog); + } +} diff --git a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java index 4ef3b83fa..166842eb2 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java @@ -284,6 +284,7 @@ public void completeTier(UUID uuid, int tierIndex) { if (hasEnoughSpace) { reward.giveReward(player); + System.out.println(reward); } else { addPendingRewards(uuid, tierIndex, tier.getRewards()); MessagesManager.sendMessage(player, Component.text("§cVous n'avez pas assez de place dans votre inventaire pour recevoir la récompense !"), Prefix.QUEST, MessageType.WARNING, false); @@ -313,6 +314,7 @@ public void completeTier(UUID uuid, int tierIndex) { player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.2F); player.playSound(player.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.7F, 1.1F); MessagesManager.sendMessage(player, Component.text(message), Prefix.QUEST, MessageType.SUCCESS, true); + System.out.println("title"); } else { addPendingRewards(uuid, tierIndex, tier.getRewards()); } @@ -495,27 +497,6 @@ public void incrementProgress(UUID playerUUID) { public void incrementProgress(UUID playerUUID, int amount) { incrementProgress(playerUUID, amount, false); } - - /** - * Increment the progress for the quest for a player authorizing Dream world - * - * @param playerUUID The UUID of the player - */ - public void incrementProgressInDream(UUID playerUUID) { - incrementProgress(playerUUID, 1, true); - } - - - /** - * Increment the progress of the quest for a player by a specified amount authorizing Dream world. - *

- * This method will check if the quest is fully completed, and if not, it will increase the progress. - * @param playerUUID The UUID of the player - * @param amount The amount to increment the progress by - */ - public void incrementProgressInDream(UUID playerUUID, int amount) { - incrementProgress(playerUUID, amount, true); - } /** * Increment the progress of the quest for a player by a specified amount. diff --git a/src/main/java/fr/openmc/core/features/quests/objects/QuestTier.java b/src/main/java/fr/openmc/core/features/quests/objects/QuestTier.java index 9e73b8ddb..899f9c255 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/QuestTier.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/QuestTier.java @@ -84,4 +84,14 @@ public QuestTier addReward(QuestReward reward) { this.rewards.add(reward); return new QuestTier(this.target, this.rewards, this.steps, this.requireStepsCompletion); } + + /** + * Add a reward for the quest, then return the quest + * @param rewards the reward to add + * @return the quest + */ + public QuestTier addRewards(QuestReward... rewards) { + this.rewards.addAll(List.of(rewards)); + return new QuestTier(this.target, this.rewards, this.steps, this.requireStepsCompletion); + } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/utils/dialog/ButtonType.java b/src/main/java/fr/openmc/core/utils/dialog/ButtonType.java index 2cbd06323..6a438550f 100644 --- a/src/main/java/fr/openmc/core/utils/dialog/ButtonType.java +++ b/src/main/java/fr/openmc/core/utils/dialog/ButtonType.java @@ -9,7 +9,10 @@ public enum ButtonType { CANCEL("Annuler"), BACK("Retour"), NEXT("Suivant"), - PREVIOUS("Précédent"); + PREVIOUS("Précédent"), + FINISH("Terminer"), + IGNORE("Ignorer") + ; private final String label;