From 4ca58d85afe9b3362fa643f3575a6cbe4c35ab94 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Tue, 10 Feb 2026 11:51:38 +0100 Subject: [PATCH 01/22] 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 02/22] =?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 03/22] 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 04/22] 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 05/22] 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; From 9a79589353cd04605e75a24b6b10c7c66b9638fa Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sat, 28 Mar 2026 16:52:51 +0100 Subject: [PATCH 06/22] Review bibi -> changing menu --- .../milestones/menus/MainMilestonesMenu.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) 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 c6e9ad7ca..5403545a8 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,6 +7,8 @@ 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.Milestone; +import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; @@ -50,16 +52,16 @@ public void onInventoryClick(InventoryClickEvent click) { public @NotNull Map getContent() { Map inventory = new HashMap<>(); Player player = getOwner(); - - MilestonesManager.getRegisteredMilestones().forEach(milestone -> { - 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<>(); + + Milestone tutoMilestone = MilestoneType.TUTORIAL.getMilestone(); + + inventory.put(10, new ItemBuilder(this, tutoMilestone.getIcon(), itemMeta -> { + itemMeta.displayName(Component.text(tutoMilestone.getName())); + itemMeta.lore(tutoMilestone.getDescription()); + itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(tutoMilestone.getType(), player) + 1 >= tutoMilestone.getSteps().size()); + }).setOnClick(_ -> tutoMilestone.getMenu(player).open())); + + List loreMilestoneVille = new ArrayList<>(); loreMilestoneVille.add(Component.text("§7Découvrez l'intégralité §3des villes")); loreMilestoneVille.add(Component.text("§7Via cette §3route de progression §7!")); @@ -77,7 +79,7 @@ public void onInventoryClick(InventoryClickEvent click) { loreMilestoneVille.add(Component.text("§e§lCLIQUEZ ICI POUR ACCEDER A VOTRE MILESTONE")); } - inventory.put(14, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { + inventory.put(12, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { itemMeta.displayName(Component.text("§3Milestone des villes")); itemMeta.lore(loreMilestoneVille); }).setOnClick(event -> { @@ -87,8 +89,16 @@ public void onInventoryClick(InventoryClickEvent click) { new CityMilestoneMenu(player, playerCity).open(); } })); + + Milestone dreamMilestone = MilestoneType.DREAM.getMilestone(); + + inventory.put(14, new ItemBuilder(this, dreamMilestone.getIcon(), itemMeta -> { + itemMeta.displayName(Component.text(dreamMilestone.getName())); + itemMeta.lore(dreamMilestone.getDescription()); + itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(dreamMilestone.getType(), player) + 1 >= dreamMilestone.getSteps().size()); + }).setOnClick(_ -> dreamMilestone.getMenu(player).open())); - inventory.put(16, new ItemBuilder(this, Material.DEAD_BUBBLE_CORAL_BLOCK, itemMeta -> { + inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> { itemMeta.displayName(Component.text(" §ks §cComming soon §ke")); })); From bacd4641102321b21b3c7a5455fa733d80b440d9 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sat, 28 Mar 2026 16:59:23 +0100 Subject: [PATCH 07/22] Review bibi -> added todo --- .../fr/openmc/core/features/milestones/MilestoneQuest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 fe5e4eba5..0e2371779 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.features.dream.milestone.DreamMilestoneDialog; 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; @@ -16,7 +16,7 @@ public class MilestoneQuest extends Quest { protected final MilestoneType type; - protected final Enum step; + protected final Enum step; //TODO a fix dans #1209 public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, Enum step, QuestTier quest) { this(name, baseDescription, new ItemStack(icon), type, step, quest); @@ -45,7 +45,7 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)), new QuestMethodsReward(player -> { player.closeInventory(); - MilestoneDialog.send(player, step, dialogs); + DreamMilestoneDialog.send(player, step, dialogs); }) )); } From 4f16389a4ef001b185be58348a955774655c34dd Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sat, 28 Mar 2026 16:59:38 +0100 Subject: [PATCH 08/22] Review bibi -> moved dream milestone dialog --- .../milestone/DreamMilestoneDialog.java} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename src/main/java/fr/openmc/core/features/{milestones/menus/MilestoneDialog.java => dream/milestone/DreamMilestoneDialog.java} (95%) diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java similarity index 95% rename from src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java rename to src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java index ea9ca57db..90e00fedf 100644 --- a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneDialog.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -1,8 +1,7 @@ -package fr.openmc.core.features.milestones.menus; +package fr.openmc.core.features.dream.milestone; 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; @@ -18,7 +17,7 @@ import java.util.ArrayList; import java.util.List; -public class MilestoneDialog { +public class DreamMilestoneDialog { public static void send(Player player, Enum step, List dialogs) { List body = new ArrayList<>(); From e428922e44ca4b4f6fd892ea96de6bd767a4184b Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sun, 29 Mar 2026 18:04:30 +0200 Subject: [PATCH 09/22] Finished story --- .../cube/events/EnterCubeZoneEvent.java | 28 +++++++++ .../cube/events/ExitCubeZoneEvent.java | 25 ++++++++ .../features/cube/listeners/CubeListener.java | 15 +++-- .../cube/multiblocks/MultiBlockManager.java | 10 ++++ .../dream/milestone/DreamMilestone.java | 2 +- .../dream/milestone/DreamMilestoneDialog.java | 21 ++++--- .../features/dream/milestone/DreamSteps.java | 4 +- .../dream/milestone/quests/AltarQuest.java | 22 ++++--- .../milestone/quests/CloudCastleQuest.java | 15 +++-- .../milestone/quests/CloudValleyQuest.java | 14 ++--- .../quests/CraftDominationOrbQuest.java | 8 +-- .../quests/CraftEternalFireQuest.java | 18 +++--- .../quests/CraftMechanicPickaxeQuest.java | 57 ------------------- .../quests/CraftSingularityQuest.java | 35 +++++++++--- .../milestone/quests/CraftingTableQuest.java | 4 +- .../dream/milestone/quests/CraftsQuest.java | 2 +- .../milestone/quests/CreakingHeartQuest.java | 6 +- .../quests/CrystallizedPickaxeQuest.java | 27 ++++++--- .../milestone/quests/CubeTempleQuest.java | 17 +++--- .../dream/milestone/quests/EweniteQuest.java | 15 ++--- .../dream/milestone/quests/FindCubeQuest.java | 57 +++++++++++++++++++ .../milestone/quests/GlaciteOrbQuest.java | 17 +++--- .../milestone/quests/GrottoCampQuest.java | 16 +++--- .../milestone/quests/IllusionistQuest.java | 17 +++--- .../milestone/quests/KillBreezyQuest.java | 23 +++++--- .../milestone/quests/MetalDetectorQuest.java | 16 +++--- .../dream/milestone/quests/MudBeachQuest.java | 18 ++++-- .../dream/milestone/quests/MudOrbQuest.java | 32 +++++------ .../dream/milestone/quests/OldAxeQuest.java | 15 +++-- .../dream/milestone/quests/SleepQuest.java | 4 +- .../dream/milestone/quests/SoulOrbQuest.java | 20 ++++--- .../dream/milestone/quests/SoulsQuest.java | 14 ++--- .../quests/TransferableObjectQuest.java | 7 ++- .../features/milestones/MilestoneQuest.java | 13 +++++ .../milestones/menus/MainMilestonesMenu.java | 6 +- .../core/features/quests/objects/Quest.java | 2 - 36 files changed, 398 insertions(+), 224 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/cube/events/EnterCubeZoneEvent.java create mode 100644 src/main/java/fr/openmc/core/features/cube/events/ExitCubeZoneEvent.java delete 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/FindCubeQuest.java diff --git a/src/main/java/fr/openmc/core/features/cube/events/EnterCubeZoneEvent.java b/src/main/java/fr/openmc/core/features/cube/events/EnterCubeZoneEvent.java new file mode 100644 index 000000000..2479477f9 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/cube/events/EnterCubeZoneEvent.java @@ -0,0 +1,28 @@ +package fr.openmc.core.features.cube.events; + +import fr.openmc.core.features.cube.Cube; +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class EnterCubeZoneEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + private final Cube cube; + + public EnterCubeZoneEvent(@NotNull Player player, Cube cube) { + super(player); + this.cube = cube; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLERS; + } +} diff --git a/src/main/java/fr/openmc/core/features/cube/events/ExitCubeZoneEvent.java b/src/main/java/fr/openmc/core/features/cube/events/ExitCubeZoneEvent.java new file mode 100644 index 000000000..c5ba55337 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/cube/events/ExitCubeZoneEvent.java @@ -0,0 +1,25 @@ +package fr.openmc.core.features.cube.events; + +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class ExitCubeZoneEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + + public ExitCubeZoneEvent(@NotNull Player player) { + super(player); + } + + 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/cube/listeners/CubeListener.java b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java index be99a2c1e..bd6d64d26 100644 --- a/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java +++ b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java @@ -1,8 +1,11 @@ package fr.openmc.core.features.cube.listeners; import fr.openmc.core.features.cube.Cube; +import fr.openmc.core.features.cube.events.EnterCubeZoneEvent; +import fr.openmc.core.features.cube.events.ExitCubeZoneEvent; import fr.openmc.core.features.cube.multiblocks.MultiBlock; import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; @@ -53,17 +56,19 @@ public void onPlayerEnterAndLeaveBubble(PlayerMoveEvent event) { Player player = event.getPlayer(); boolean insideAny = false; + Cube cube = null; for (MultiBlock mb : MultiBlockManager.getMultiBlocks()) { - if (!(mb instanceof Cube cube)) continue; - if (cube.corruptedBubbleTask == null) continue; + if (!(mb instanceof Cube loopCube)) continue; + if (loopCube.corruptedBubbleTask == null) continue; - Location center = cube.getCenter(); - double radius = cube.RADIUS_BUBBLE; + Location center = loopCube.getCenter(); + double radius = loopCube.RADIUS_BUBBLE; if (!player.getWorld().equals(center.getWorld())) continue; if (player.getLocation().distance(center) <= radius) { + cube = loopCube; insideAny = true; break; } @@ -78,10 +83,12 @@ public void onPlayerEnterAndLeaveBubble(PlayerMoveEvent event) { playersInBubble.add(uuid); attr.setBaseValue(0.04); player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, Integer.MAX_VALUE, 2, true, false, true)); + Bukkit.getPluginManager().callEvent(new EnterCubeZoneEvent(player, cube)); } else if (!insideAny && playersInBubble.contains(uuid)) { playersInBubble.remove(uuid); attr.setBaseValue(0.08); player.removePotionEffect(PotionEffectType.JUMP_BOOST); + Bukkit.getPluginManager().callEvent(new ExitCubeZoneEvent(player)); } } diff --git a/src/main/java/fr/openmc/core/features/cube/multiblocks/MultiBlockManager.java b/src/main/java/fr/openmc/core/features/cube/multiblocks/MultiBlockManager.java index ca264d4e1..cf56a61ad 100644 --- a/src/main/java/fr/openmc/core/features/cube/multiblocks/MultiBlockManager.java +++ b/src/main/java/fr/openmc/core/features/cube/multiblocks/MultiBlockManager.java @@ -12,6 +12,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -118,4 +119,13 @@ public static void register(MultiBlock multiBlock) { save(); } + + public static @Nullable MultiBlock getMultiblockAtDimension(String worldName) { + for (MultiBlock multiBlock : multiBlocks) { + if (multiBlock.origin.getWorld().getName().equals(worldName)) { + return multiBlock; + } + } + return null; + } } 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 ab05ca0bb..b9538e679 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 @@ -27,7 +27,7 @@ public HashMap getPlayerData() { @Override public String getName() { - return "Tutoriel de la Dream Dim"; + return "Tutoriel de la Dimension des Rêves"; } @Override diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java index 90e00fedf..a6ef19a2f 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -16,10 +16,11 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; public class DreamMilestoneDialog { - public static void send(Player player, Enum step, List dialogs) { + public static void send(Player player, DreamSteps step, List dialogs) { List body = new ArrayList<>(); for (int i = 0; i < 1; i++) { @@ -30,16 +31,20 @@ public static void send(Player player, Enum step, List dialogs) { 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)) + .base(DialogBase.builder(Component.text(step.getQuest().getName())) .body(body) .canCloseWithEscape(true) .build() ) .type(DialogType.notice( ActionButton.builder(Component.text(btn.getLabel())) - .action(DialogAction.customClick((response, audience) -> { + .action(DialogAction.customClick((_, _) -> { player.closeInventory(); - if (dialogs.size() == 1) return; + if (dialogs.size() == 1) { + Consumer runnable = step.getQuest().getAfterDialog(); + if (runnable != null) runnable.accept(player); + return; + } send(player, step, dialogs, 2); }, ClickCallback.Options.builder().build())) .build() @@ -51,7 +56,7 @@ public static void send(Player player, Enum step, List dialogs) { }, 20); } - private static void send(Player player, Enum step, List dialogs, int messageStep) { + private static void send(Player player, DreamSteps step, List dialogs, int messageStep) { List body = new ArrayList<>(); for (int i = 0; i < messageStep; i++) { @@ -62,17 +67,19 @@ private static void send(Player player, Enum step, List dialogs, int mes 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)) + .base(DialogBase.builder(Component.text(step.getQuest().getName())) .body(body) .canCloseWithEscape(true) .build() ) .type(DialogType.notice( ActionButton.builder(Component.text(btn.getLabel())) - .action(DialogAction.customClick((response, audience) -> { + .action(DialogAction.customClick((_, _) -> { player.closeInventory(); if (dialogs.size() <= messageStep) { DreamManager.removeMilestoneDialogPlayer(player); + Consumer runnable = step.getQuest().getAfterDialog(); + if (runnable != null) runnable.accept(player); return; } send(player, step, dialogs, messageStep + 1); 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 718700750..72d4119be 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 @@ -24,11 +24,11 @@ public enum DreamSteps { METAL_DETECTOR(null), MUD_ORB(null), CRYSTALLIZED_PICKAXE(null), + FIND_CUBE(null), ETERNAL_FIRE(null), GROTTO_CAMP(null), ILLUSIONIST(null), EWENITE(null), - MECHANIC_PICKAXE(null), GLACITE_ORB(null), SINGULARITY(null), TRANSFERABLE_OBJECT(null) @@ -58,11 +58,11 @@ public enum DreamSteps { METAL_DETECTOR.quest = new MetalDetectorQuest(); MUD_ORB.quest = new MudOrbQuest(); CRYSTALLIZED_PICKAXE.quest = new CrystallizedPickaxeQuest(); + FIND_CUBE.quest = new FindCubeQuest(); 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/AltarQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java index 3f6727fd9..c590dd0f7 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java @@ -3,21 +3,21 @@ 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.DreamEquipableItem; 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.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; +import java.util.Objects; public class AltarQuest extends MilestoneQuest implements Listener { public AltarQuest() { @@ -30,10 +30,18 @@ public AltarQuest() { Material.ENCHANTING_TABLE, MilestoneType.DREAM, 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" + - "Ce qui est sur, c'est qui me manque quelque chose pour accomplir ce rituel jusqu'au bout.", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Pour obtenir de l'orbe des âmes, il te faudra...", + "§6Des âmes ?!", + "§3Voyageur : Oui ! C'est ça ! Il te faudra §d20§3 âmes pour obtenir celui-ci.", + "§3Voyageur : Mais fais attention à toi, elles adorent le temps encore plus que les creakings", + "§6Comment puis-je en trouver, et comment les reconnaître ?", + "§3Voyageur : Regarde autour de l'autel, vers les §darbres§3. Les âmes se baladent à l'extérieur du bâtiment.", + "§3Voyageur : Tout comme l'armure \"Creaking\", il est possible d'avoir l'armure des \"Âmes\". Celle-ci te confèrera " + + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:soul_chestplate"))).getAdditionalMaxTime() + + " secondes supplémentaires par pièces d'armure équipées.", + "§3Voyageur : Tu peux également transformer ta hache à l'autel avec quelques âmes supplémentaires." ) ); } 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 index 15c55e601..464a018a7 100644 --- 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 @@ -7,9 +7,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; @@ -27,9 +24,15 @@ public CloudCastleQuest() { 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) + new QuestTier(1), + List.of( + "§6Ce château ne ressemble en rien à ce que je connais. Comment se fait-il qu'il reste en suspension dans les nuages ?", + "§3Voyageur : Comme dit précédemment, cet ancien peuple a dompté le pouvoir des vents. Mais avec ce qu'il s'est passsé, je pense que le " + + "pouvoir s'est renfermé sur lui-même pour protéger le trésor.", + "§6L'Orbe...", + "§3Voyageur : Exact ! Ce château devrait te rappeler les §dtrial chambers§3 de ton monde.", + "§6Tu connais donc mon monde ?", + "§3Voyageur : ..." ) ); } 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 index 3c845f097..b480cbf54 100644 --- 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 @@ -7,9 +7,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,13 @@ public CloudValleyQuest() { 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) + new QuestTier(1), + List.of( + "§6Nous sommes dans une pleine... des nuages ???", + "§3Voyageur : Il s'agit d'une pleine d'un ancien peuple ayant dompté les forces du vent.", + "§3Voyageur : Tu devrais pouvoir y trouver des §drestes de leur civilisation§3.", + "§6C'est à dire ?", + "§3Voyageur : Tu as bien trouvé le Temple du Cube non ?" ) ); } 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 351573af7..477192321 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 @@ -31,10 +31,10 @@ public CraftDominationOrbQuest() { 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..." + "§3Voyageur : Cet orbe est la première d'une série de §d5§3 éparpillées dans ce monde. Chaque orbe est unique et possède la capacité de te " + + "faire avancer dans le monde et dans ma... notre quête !", + "§6Il nous faut donc explorer la nouvelle zone débloquée par l'orbe ?", + "§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/CraftEternalFireQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.java index 8f44a8ab3..e6e88bb6c 100644 --- 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 @@ -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; @@ -26,14 +23,21 @@ public CraftEternalFireQuest() { super( "L'ère glacière", List.of( - "" + "§fFabriquer le feu éternel", + "§8§oVa-t-on retrouver des dinosaures fossilisés ou Sid ?" ), DreamItemRegistry.getByName("omc_dream:eternal_campfire").getBest(), MilestoneType.DREAM, DreamSteps.ETERNAL_FIRE, - new QuestTier( - 1, - new QuestTextReward("", Prefix.OPENMC, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Bien ! Ce feu te sera utile.", + "§6Il s'agit d'un feu, ça va me permettre de cuire quelque chose ?", + "§3Voyageur : Dans ce monde, ce feu te servira à limiter les effets du froid des profondeurs. Tu vas rentrer dans un monde glacial, chaque seconde passée " + + "dans celui-ci te ralentira et finira par te tuer.", + "§3Voyageur : En posant ce feu au sol et en restant proche de lui, tu vas te réchauffer et éviter cela.", + "§6Comme lorsqu'on sort de la poudreuse.", + "§3Voyageur : Oui. Maintenant que tu as compris le principe, partons à la recherche des camps présents dans les grottes des profondeurs." ) ); } 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 deleted file mode 100644 index e092591ca..000000000 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftMechanicPickaxeQuest.java +++ /dev/null @@ -1,57 +0,0 @@ -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 index 50e7332d3..7be571c47 100644 --- 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 @@ -2,6 +2,7 @@ import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.milestone.DreamSteps; +import fr.openmc.core.features.dream.models.registry.items.DreamEquipableItem; 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; @@ -9,9 +10,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; @@ -19,6 +17,7 @@ import org.bukkit.inventory.ItemStack; import java.util.List; +import java.util.Objects; public class CraftSingularityQuest extends MilestoneQuest implements Listener { @@ -26,14 +25,36 @@ public CraftSingularityQuest() { super( "La finalité ?", List.of( - "§fCrafter la §dSingularité" + "§fCrafter la §dSingularité", + "§8§oLes orbes n'auraient-ils pas une utilité finale ?" ), DreamItemRegistry.getByName("omc_dream:singularity").getBest(), MilestoneType.DREAM, DreamSteps.SINGULARITY, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Voilà ! Que faut-il faire pour pouvoir maintenant remonter le temps ?", + "§3Voyageur : ...", + "§3Voyageur : Je... je vais t'avouer quelque chose. Il n'a jamais été question de remonter le temps dans cette dimension, mais de pouvoir me " + + "transférer dans une autre dimension afin d'échapper aux malheurs de ce monde. Mon but a bien toujours été d'aider les gens, mais cela " + + "n'a pas été possible dans cette dimension.", + "§3Voyageur : Je n'ai pas voulu t'en parler au risque de paraître égoïste.", + "§3Voyageur : Malheureusement pour moi, la singularité que nous avons n'est pas assez puissante pour pouvoir transférer da la vie dans ta dimension " + + "afin de pouvoir reprendre un nouveau départ et de pouvoir aider les gens.", + "§3Voyageur : Mais cela n'est pas grave, j'ai aimé pour t'aider à explorer ce monde et surtout à pouvoir récupérer des objets qui te seront " + + "sans doute utiles dans ton monde.", + "§6...", + "§3Voyageur : Je n'ai pas réussi à sauver cette dimension, mais j'ai tout de même réussi à t'aider \"toi\" dans cette dimension.", + "§3Voyageur : Quoi qu'il en soit, tu vas pouvoir récupérer les enchantements de cette dimension grâce à la singularité et même l'armure si tu le souhaites.", + "§3Voyageur : La singularité n'est pas assez puissante pour moi, mais largement assez pour des nouvelles armes ou armures.", + "§3Voyageur : Tout comme les orbes précédents, tu as la possibilité de te fabriquer une nouvelle armure. Celle-ci en revanche va nécessiter de refaire " + + "l'ensemble des orbes, mais ça en vaut le coup, car elle rajoute " + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:dream_chestplate"))).getAdditionalMaxTime() + + " secondes de plus par pièce portée, mais aussi des effets.", + "§6... Merci !", + "§3Voyageur : Non ! C'est moi qui te remercie. Car un jour, quelqu'un que je respectais comme personne m'a dit : \"Remercie la personne que tu as aidé, " + + "car elle t'a permis de faire une bonne action\".", + "§6Tu resteras avec moi ?", + "§3Voyageur : Non, je ne peux pas. D'autres joueurs se perdent ici, et ils ont besoin de moi. Alors, je te dis adieu..." ) ); } 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 30b25207e..8605a430c 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 @@ -30,9 +30,9 @@ public CraftingTableQuest() { 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 : " + + "§3Voyageur : Tu as le bon œil. 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 ?", + "§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 c26ffb882..0389eb0ff 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 @@ -30,7 +30,7 @@ public CraftsQuest() { "§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." + "§6Hmmm, cela m'intrigue. Mais tu as dit 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 8c82095a3..5f0efaa7c 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 @@ -31,11 +31,13 @@ public CreakingHeartQuest() { DreamSteps.GET_HEART, new QuestTier(1), List.of( - "§6Ah ! Mais c'est vrai qu'il protègent leurs coeurs.", + "§6Ah ! Mais c'est vrai qu'ils protègent leurs cœurs.", "§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..." + "§3Voyageur : Je t'expliquerai bientôt, je n'ai pas envie que tu finisses comme moi...", + "§6Comment ça \"finir comme toi\" ?", + "§3Voyageur : Tu comprendras. Pour éviter cela, il faut continuer, fais-toi une hache pour le moment." ) ); } 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 index d1d1e8497..e074f2fad 100644 --- 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 @@ -1,5 +1,8 @@ package fr.openmc.core.features.dream.milestone.quests; +import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.cube.multiblocks.MultiBlock; +import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; 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; @@ -9,9 +12,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; @@ -22,17 +22,28 @@ public class CrystallizedPickaxeQuest extends MilestoneQuest implements Listener { public CrystallizedPickaxeQuest() { + MultiBlock multiblock = MultiBlockManager.getMultiblockAtDimension("world_dream"); + if (multiblock == null) { + OMCPlugin.getInstance().getSLF4JLogger().error("Multiblock in dream dimension is null!"); + } super( - "Le cristal n'est pas un métal", + "Bonne pioche", List.of( - "§fObtenir la §dPioche Cristallisée" + "§fObtenir la §dPioche Cristallisée", + "§8§oParfois, il faut savoir se creuser la tête" ), DreamItemRegistry.getByName("omc_dream:crystallized_pickaxe").getBest(), MilestoneType.DREAM, DreamSteps.CRYSTALLIZED_PICKAXE, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Celle-ci sera ta meilleure amie dans les grottes, en remplacement de ta hache.", + "§3Voyageur : À partir de maintenant, tu vas devoir principalement miner. Les profondeurs de ce monde regorgent de minerais utiles " + + "pour la dernière étape de cette quête.", + "§6Alors ne traînons pas, pastons en grotte.", + "§3Voyageur : Non ! Avant d'aller chercher le dernier orbe, fais un détour aux coordonnées " + + multiblock.origin.getBlockX() + " " + + multiblock.origin.getBlockZ() + ". Comme promis, je te dois des explications." ) ); } 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 bf475aa34..44578e3c9 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 @@ -7,9 +7,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,16 @@ public CubeTempleQuest() { 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) + new QuestTier(1), + List.of( + "§3Voyageur : Sache qu'il s'agit d'un autel qui a été érigé pour...", + "§6Pour ?", + "§3Voyageur : ...", + "§6Voyageur : Passons, ce n'est pas le moment. Restons sur le fait qu'il s'agit du maître des lieux.", + "§6Comment ça le maitre des lieux ?", + "§3Voyageur : Peu importe, maintenant que tu as compris le principe de cette dimension, je vais pouvoir te " + + "parler de son but et de ce que l'on fait ici.", + "§3Voyageur : Commence déjà par aller au §dcentre du temple§3 et déposer l'orbe." ) ); } 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 index 95399b505..306ff45fc 100644 --- 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 @@ -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; @@ -25,14 +22,18 @@ public EweniteQuest() { super( "Aywenite, Awyenito ou Ewenite ?", List.of( - "§fObtenir de l'§dEwenite" + "§fObtenir de l'§dEwenite", + "§8§oUn nouveau minerai à exploiter. Bizarre, ce nom m'est familier." ), DreamItemRegistry.getByName("omc_dream:ewenite").getBest(), MilestoneType.DREAM, DreamSteps.EWENITE, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Le début de la richesse. Qu'il s'agisse de miner ou de les échanger, j'ai l'impression que la recherche va être longue.", + "§3Voyageur : Le minerai n'est pas commun, mais tu peux en trouver plusieurs rapidement.", + "§6N'y a-t-il pas moyen d'aller plus vite ?", + "§3Voyageur : Tu peux te fabriquer la pioche mécanique si tu le souhaites, ça sera plus rapide." ) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java new file mode 100644 index 000000000..688653dce --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java @@ -0,0 +1,57 @@ +package fr.openmc.core.features.dream.milestone.quests; + +import fr.openmc.core.features.cube.events.EnterCubeZoneEvent; +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 org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class FindCubeQuest extends MilestoneQuest implements Listener { + public FindCubeQuest() { + super( + "Un petit détour", + List.of( + "§fTrouver le cube", + "§8§oMystère et explications" + ), + Material.LAPIS_BLOCK, + MilestoneType.DREAM, + DreamSteps.FIND_CUBE, + new QuestTier(1), + List.of( + "§3Voyageur : Voilà l'origine de la catastrophe de ce monde. Il s'agit du \"Cube\", le maître des lieux. Il a été vénéré par le peuple de cette dimension " + + "qui a construit les temples que tu as vu. Son nom : Bobby.", + "§6Mais qu'a-t-il fait et pourquoi n'y a-t-il pas de sculk autour de lui ?", + "§3Voyageur : Au début, celui-ci nous apportait paix et prospérité. Mais un jour, un violent orage serait survenu, un éclair l'aurait frappé et l'aurait endommagé. ", + "§3Voyageur : Le cube après s'être régénéré durant une longue période, aurait commencé à bouger et peu à peu, à corrompre le monde, mais en installant un écosystème autosuffisant " + + "pour son nouvel état. C'est-à-dire que lui-même se protège et se propage seul, en se nourrissant de la vie du monde.", + "§3Voyageur : Cela a conduit à la anhilation ou la corruption de toute vie dans ce lieu.", + "§6Et toi dans tout cela, qui es-tu ? Depuis le début de notre aventure, tu me parles, mais tu n'es pas vraiment là.", + "§3Voyageur : Il est très probable que je ne sois plus de ce monde, du moins physiquement. Lorsque le cube a corrompu la carte, au lieu de lutter contre lui, " + + "le l'ai utilisé pour détruire mon corps, en forçant la survie de mon esprit. Étant donné que j'ai utilisé le cube pour survivre, il ne peut pas m'éliminer " + + "sans se tuer par lui-même.", + "§3Voyageur : Je suis alors présent pour aider se monde à retrouver son ancienne vie. Lorsque je t'ai vu arriver, je t'ai suivi afin que tu puisses réaliser à ma place, " + + "la quête que j'étais censé réaliser.", + "§6...", + "§3Voyageur : Voilà, maintenant que tu en sais un peu plus, nous devons avancer dans la quête qui est désormais la tienne. Direction : les grottes." + ) + ); + } + + @EventHandler + public void onEnterCubeZone(EnterCubeZoneEvent e) { //TODO A voir si ça fonctionne + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) 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/GlaciteOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java index e5803fbc2..eb34025e5 100644 --- 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 @@ -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; @@ -23,14 +20,20 @@ public GlaciteOrbQuest() { super( "Enfin la dernière ?", List.of( - "§fEchanger l'§dOrbe de Glace" + "§fEchanger l'§dOrbe de Glace", + "§8§oDernière ligne droite pour les collecter toutes." ), DreamItemRegistry.getByName("omc_dream:glacite_orb").getBest(), MilestoneType.DREAM, DreamSteps.GLACITE_ORB, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Enfin, nous touchons au but. Bien plus qu'une seule étape pour enfin être libéré de cette situation.", + "§6Que dois-je faire ?", + "§3Voyageur : Il faut les combiner", + "§6Les combiner ? Pas d'incantation cette fois ?", + "§3Voyageur : Non, promis. Combine-les dans la table de craft que nous avons confectionné tous les deux au début de notre aventure. " + + "Nous pourrons ensuite utiliser le pouvoir de la singularité." ) ); } 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 index 39d5c7d50..1daed09b5 100644 --- 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 @@ -7,9 +7,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; @@ -23,14 +20,19 @@ public GrottoCampQuest() { super( "La survie en mode fin du monde ?", List.of( - "§fTrouver un §dcamp de grotte" + "§fTrouver un §dcamp de grotte", + "§8§oIl n'y a pas de Transperceneige mais, y aurait-il, une zone protégée." ), Material.DEEPSLATE, MilestoneType.DREAM, DreamSteps.GROTTO_CAMP, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Voilà un camp.", + "§3Voyageur : Voyons si nous pouvons trouver le dernier dépositaire de l'orbe. Il doit être dans les parages.", + "§6Mais si le Cube à tou corrompu et tué, comment le marchand peut-il être encore vivant ?", + "§3Voyageur : L'orbe, mon ami. Avant, il s'agissait d'un marchand ambulant qui parcourait le monde pour échanger ses marchandises.", + "§3Voyageur : Et chaque orbe possède un pouvoir, et je pense celui de l'§bOrbe de Glace §3a permis à ce marchant de survivre, mais à quel prix..." ) ); } 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 index c27e5ff0e..f8681e2f5 100644 --- 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 @@ -7,9 +7,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; @@ -23,14 +20,20 @@ public IllusionistQuest() { super( "Y'a quelqu'un ?", List.of( - "§fTrouver et aller voir l'§dIllusioneur" + "§fTrouver et aller voir le §dmarchand", + "§8§oS'il y a des feux allumés, c'est qu'il y a de la vie dans le coin." ), Material.EVOKER_SPAWN_EGG, MilestoneType.DREAM, DreamSteps.ILLUSIONIST, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§6Voilà le marchand. Il n'a plus l'air de vouloir se déplacer.", + "§3Voyageur : Comme je l'ai déjà dit, la corruption l'a modifié profondément, même si l'orbe l'a protégé de la mort.", + "§3Voyageur : Je ne t'en avais pas parlé jusqu'à présent, mais n'as-tu rien remarqué dans chaque lieu où nous avons trouvé un orbe ?", + "§6...", + "§3Voyageur : Les orbes ont préservé les vies autour d'eux. Creakings, Araignées, Âmes, Breeze, Phantom, Vagabond, Grenouilles, Têtards, et ici le marchand.", + "§3Voyageur : Mais à nous de la faire revenir réellement. Alors vas-y, fais l'échange pour l'Orbe." ) ); } 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 index 691c47492..35e4ffa88 100644 --- 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 @@ -4,14 +4,13 @@ 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.models.registry.items.DreamEquipableItem; +import fr.openmc.core.features.dream.registries.DreamItemRegistry; 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; @@ -19,6 +18,7 @@ import org.bukkit.event.entity.EntityDeathEvent; import java.util.List; +import java.util.Objects; public class KillBreezyQuest extends MilestoneQuest implements Listener { public KillBreezyQuest() { @@ -31,10 +31,19 @@ public KillBreezyQuest() { 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) + new QuestTier(1), + List.of( + "§6Mais c'est qu'il est balèze ce Breeze !!", + "§3Voyageur : Oui, c'est ce que je craignais... même ici, tout a été corrompu.", + "§6Comment ça corrompu ?", + "§3Voyageur : Les explications arriveront en temps et en heures. Pour le moment, redescends sur la terre, et dirige-toi vers les plages. " + + "J'aimerais pouvoir dire de sable fin...", + "§3Voyageur : Mais avant de partir, tu peux récupérer dans les coffres du château l'armure des Nuages, qui te donnera " + + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:cloud_chestplate"))).getAdditionalMaxTime() + + " secondes de temps supplémentaire par pièces d'armure. Tu peux également récupérer une canne à pêche des nuages, et un livre enchanté.", + "§6Une canne à pêche ? Mais pour pêcher quoi ? Des gouttelettes de nuage ?!", + "§3Voyageur : Exactement ! Celle-ci te permettra de pêcher dans les nuages comme si c'était de l'eau. Tu pourras notamment récupérer des " + + "somnifères qui te permettent de rester plus longtemps endormi, ou de t'endormir efficacement, dans le cas où tu es éveillé." ) ); } 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 index f2d5a2862..63757b51c 100644 --- 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 @@ -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; @@ -25,15 +22,18 @@ public MetalDetectorQuest() { super( "Coooooooaaaaaaa", List.of( - "§fCraft le §dDétecteur à métaux", - "" + "§fFabriquer le détecteur à métaux", + "§8§oPourquoi les têtards sont aussi gros ?" ), DreamItemRegistry.getByName("omc_dream:metal_detector").getBest(), MilestoneType.DREAM, DreamSteps.METAL_DETECTOR, - new QuestTier( - 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTier(1), + List.of( + "§3Voyageur : Ah, enfin le détecteur. Nous allons pouvoir rechercher l'orbe dans cette boue plus facilement.", + "§3Voyageur : Ces plages étaient avant bien de sable et d'eau. Mais avec la catastrophe, les grenouilles et têtards se sont transformés. " + + "Cette transformation s'est soldée, pour eux, par une grande soif.", + "§6D'où l'absence d'eau." ) ); } 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 index 1d79dfedf..0ead4dd6b 100644 --- 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 @@ -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.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -31,9 +28,18 @@ public MudBeachQuest() { 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) + new QuestTier(1), + List.of( + "§6Enfin sur la plage, et en effet, il n'y a ni sable chaud, ni soleil rayonnant, juste de la boue et... rien d'autre en fait.", + "§3Voyageur : Très bien, pose-toi là, je te dois des explications.", + "§3Voyageur : Ce monde, a subi une catastrophe, d'où son apparence. Auparavant, il était si... si seulement je pouvais le revoir.", + "§6Tu m'as parlé de 5 orbes. Ceux-ci permettraient-ils de faire revenir l'ancien monde, avec un pouvoir de terraformation ?", + "§3Voyageur : Non, c'est bien plus puissant que cela. Ils permettent de créer un trou de ver entre cette dimension et la tienne. Nous pourrons alors " + + "utiliser une partie de l'énergie de ta dimension pour remonter le temps dans celle-ci, et rétablir son équilibre.", + "§3Utiliser une partie de l'énergie ? Mais, cela est sans risque pour ma dimentsion ??", + "§6Voyageur : Oui, bien évidemment, sinon je n'en prendrais pas le risque. Chaque bloc de ton monde donnerait une petite perle de son énergie.", + "§3Quelle énergie ?", + "§6Voyageur : Nous devons avancer maintenant. Cherche des grenouilles, elles nous seront utiles." ) ); } 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 index c145abcc2..fc4996be5 100644 --- 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 @@ -9,10 +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.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; @@ -26,22 +22,26 @@ public MudOrbQuest() { super( "Bip Biip Biiiiiiip", List.of( - "Trouver l'Orbe de Boue" + "§gTrouver l'Orbe de Boue", + "§8§oBon, pas de sable, mais de la boue. Possible que les gens perdent tout de même " + + "des choses. Ah tiens, 6 blocks vers la droite." ), 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()); - } - } - ) - ) + new QuestTier(1), + List.of( + "§6Cela me rappelle mes vacances à chercher des trésors sur la plage. Même si là, c'est pour une meilleure cause. Et maintenant que le 4ème orbe est avec nous, que dois-je faire ?", + "§3Voyageur : Plus qu'un. Comme nous avons fait toute la surface, alors il ne nous reste plus qu'à chercher sous terre. Il faudra bien se préparer, et notamment un bon feu. " + + "Pour ce qui est du détecteur, tu as dû voir que l'on a obtenu plusieurs choses.", + "§6Oui, mon inventaire est bien rempli.", + "§3Voyageur : Tout comme la canne à pêche, tu peux y obtenir divers objets comme les chips, même si certaines sont très rares, des somnifères, " + + "un livre enchanté différent de celui des nuages, ou encore une pioche qui te sera utile pour la suite... Je vais d'ailleurs check si tu n'en as pas déjà une." + ), + player -> { + if (player.getInventory().contains(DreamItemRegistry.getByName("omc_dream:crystallized_pickaxe").getBest())) + DreamSteps.CRYSTALLIZED_PICKAXE.getQuest().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 f5fe2f61f..1456f0761 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 @@ -1,6 +1,7 @@ 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.DreamEquipableItem; 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; @@ -15,6 +16,7 @@ import org.bukkit.inventory.ItemStack; import java.util.List; +import java.util.Objects; public class OldAxeQuest extends MilestoneQuest implements Listener { @@ -30,12 +32,13 @@ public OldAxeQuest() { DreamSteps.OLD_AXE, 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." + "§3Voyageur : Bien ! Cela va nous être utile. Le prochain objectif va être d'obtenir l'Orbe de Domination.", + "§6À quoi va-t-elle servir ?", + "§3Voyageur : Je t'expliquerai lorsque tu l'auras. Elle va être facile à récupérer avec la hache.", + "§6Ai-je besoin d'autre chose ?", + "§3Voyageur : Ce n'est pas obligatoire, mais elle te permettrait de rester plus longtemps dans ce monde. Il existe l'armure \"Creaking\" que tu peux fabriquer. " + + "Cela te confèrera " + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:old_creaking_chestplate"))).getAdditionalMaxTime() + " secondes supplémentaires " + + "par pièces d'armure équipées." ) ); } 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 6e805282a..27a97f929 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 @@ -31,7 +31,9 @@ public SleepQuest() { "§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." + "Pour l'heure, je te propose de découvrir ce dont tu vas avoir besoin pour découvrir ce monde.", + "§3Voyageur : Sache que si tu ne souhaites pas rester jusqu'à la fin du temps, tu peux te réveiller avec la commande §d/leave§3.\n" + + "A contrario, tu peux revenir ici plus fréquemment en te fabriquant un §dPyjama§3. Cela te permet d'augmenter tes chances de passer dans ce monde en dormant." ) ); } 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 de4aed7d7..fd43a85c7 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 @@ -10,9 +10,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; @@ -25,15 +22,22 @@ public SoulOrbQuest() { "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." + "§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(), 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) + new QuestTier(1), + List.of( + "§6Et de deux ! En revanche, je n'ai plus l'Orbe de Domination...", + "§3Voyageur : Oui, il te faudra en refaire une. Mais ce n'est pas le plus compliqué.", + "§3Voyageur : Maintenant que tu as l'Orbe des Âmes, tu vas pouvoir accéder à la §dnouvelle zone§3 qui, tu vas le voir, ne ressemble pas du tout au monde actuel...", + "§3Voyageur : Il faut monter dans le ciel, dans les §dnuages§3.", + "§6Peux-tu me parler un peu du but de cette quête ?", + "§3Voyageur : Les orbes sont au nombre de 5, et chacun d'eux renferme un pouvoir. Seuls, ils ne servent à rien. Mais ensemble, ils pourraient aider ce monde.", + "§6Et... toi, tu es qui au fait ?", + "§3Voyageur : J'étais...", + "§3Voyageur : Je suis un joueur tout comme toi, mais un joueur de ce monde." ) ); } 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 b9c65b31a..fce64bbae 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 @@ -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 SoulsQuest() { 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) + new QuestTier(20), + List.of( + "§6Et de 20 ! Que dois-je faire maintenant ? Il y a un craft spécifique de l'orbe à faire ?", + "§3Voyageur : Non, il faut simplement répéter l'incantation suivante 2 fois : §dAshkara no thari fu laq to !", + "§6Ashkara no thari fu laq to ! Ashkara no thari fu laq to !", + "§6...pas facile à dire...", + "§3Voyageur : Ahah, en réalité, il te faut simplement intéragir à nouveau avec l'Orbe de Domination sur l'§dAltar§3." ) ); } 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 index 5257eece6..59692cb67 100644 --- 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 @@ -26,14 +26,17 @@ public TransferableObjectQuest() { super( "Ce n'était qu'un rêve ?", List.of( - "§fRécupérer un objet §dtransferable §fdans l'Overworld" + "§fRécupérer un objet §dtransferable §fdans l'Overworld", + "§8§oCe monde m'a l'aide tout de même réel. La singularité ne serait-elle pas " + + "un portail dimensionnel pour le loot ?" ), Material.LAPIS_BLOCK, MilestoneType.DREAM, DreamSteps.TRANSFERABLE_OBJECT, new QuestTier( 1, - new QuestTextReward("", Prefix.DREAM, MessageType.SUCCESS) + new QuestTextReward("Il y a bien un lien entre cette dimension et le monde réel. " + + "Et ce n'est que le début d'une nouvelle aventure !", Prefix.DREAM, MessageType.SUCCESS) ) ); } 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 0e2371779..68d008276 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -7,16 +7,19 @@ import fr.openmc.core.features.quests.rewards.QuestMethodsReward; import lombok.Getter; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.List; import java.util.UUID; +import java.util.function.Consumer; @Getter public class MilestoneQuest extends Quest { protected final MilestoneType type; protected final Enum step; //TODO a fix dans #1209 + protected final Consumer afterDialog; public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, Enum step, QuestTier quest) { this(name, baseDescription, new ItemStack(icon), type, step, quest); @@ -30,6 +33,7 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, this.addTier(quest.addReward( new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)) )); + this.afterDialog = null; } public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs) { @@ -38,6 +42,14 @@ public MilestoneQuest(String name, List baseDescription, Material icon, } public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs) { + this(name, baseDescription, new ItemStack(icon), type, step, quest, dialogs, null); + } + + public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs, Consumer afterDialog) { + this(name, baseDescription, new ItemStack(icon), type, step, quest, dialogs, afterDialog); + } + + public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, DreamSteps step, QuestTier quest, List dialogs, Consumer afterDialog) { super(name, baseDescription, icon); this.type = type; this.step = step; @@ -48,6 +60,7 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, DreamMilestoneDialog.send(player, step, dialogs); }) )); + this.afterDialog = afterDialog; } /** 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 5403545a8..5f885f8c4 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 @@ -82,7 +82,7 @@ public void onInventoryClick(InventoryClickEvent click) { inventory.put(12, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { itemMeta.displayName(Component.text("§3Milestone des villes")); itemMeta.lore(loreMilestoneVille); - }).setOnClick(event -> { + }).setOnClick(_ -> { if (playerCity == null) { new NoCityMenu(player).open(); } else { @@ -98,9 +98,7 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(dreamMilestone.getType(), player) + 1 >= dreamMilestone.getSteps().size()); }).setOnClick(_ -> dreamMilestone.getMenu(player).open())); - inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> { - itemMeta.displayName(Component.text(" §ks §cComming soon §ke")); - })); + inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> itemMeta.displayName(Component.text(" §ks §cComming soon §ke")))); inventory.put(35, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(Component.text("§r§aRetour")), true)); 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 166842eb2..35eafa6bd 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,7 +284,6 @@ 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); @@ -314,7 +313,6 @@ 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()); } From d0bcf6426fd540560e74c233879e50d6a22e8b4e Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sun, 29 Mar 2026 18:07:11 +0200 Subject: [PATCH 10/22] Resolved build & test errors --- .../core/features/dream/milestone/DreamMilestoneDialog.java | 4 ++-- .../core/features/milestones/menus/MainMilestonesMenu.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java index a6ef19a2f..43f4cde80 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -38,7 +38,7 @@ public static void send(Player player, DreamSteps step, List dialogs) { ) .type(DialogType.notice( ActionButton.builder(Component.text(btn.getLabel())) - .action(DialogAction.customClick((_, _) -> { + .action(DialogAction.customClick((response, audience) -> { player.closeInventory(); if (dialogs.size() == 1) { Consumer runnable = step.getQuest().getAfterDialog(); @@ -74,7 +74,7 @@ private static void send(Player player, DreamSteps step, List dialogs, i ) .type(DialogType.notice( ActionButton.builder(Component.text(btn.getLabel())) - .action(DialogAction.customClick((_, _) -> { + .action(DialogAction.customClick((response, audience) -> { player.closeInventory(); if (dialogs.size() <= messageStep) { DreamManager.removeMilestoneDialogPlayer(player); 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 5f885f8c4..5fcf8550e 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 @@ -59,7 +59,7 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.displayName(Component.text(tutoMilestone.getName())); itemMeta.lore(tutoMilestone.getDescription()); itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(tutoMilestone.getType(), player) + 1 >= tutoMilestone.getSteps().size()); - }).setOnClick(_ -> tutoMilestone.getMenu(player).open())); + }).setOnClick(inventoryClickEvent -> tutoMilestone.getMenu(player).open())); List loreMilestoneVille = new ArrayList<>(); @@ -82,7 +82,7 @@ public void onInventoryClick(InventoryClickEvent click) { inventory.put(12, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { itemMeta.displayName(Component.text("§3Milestone des villes")); itemMeta.lore(loreMilestoneVille); - }).setOnClick(_ -> { + }).setOnClick(inventoryClickEvent -> { if (playerCity == null) { new NoCityMenu(player).open(); } else { @@ -96,7 +96,7 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.displayName(Component.text(dreamMilestone.getName())); itemMeta.lore(dreamMilestone.getDescription()); itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(dreamMilestone.getType(), player) + 1 >= dreamMilestone.getSteps().size()); - }).setOnClick(_ -> dreamMilestone.getMenu(player).open())); + }).setOnClick(inventoryClickEvent -> dreamMilestone.getMenu(player).open())); inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> itemMeta.displayName(Component.text(" §ks §cComming soon §ke")))); From 787892b67be4bac8acd485cd3939a4e37970504c Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Sun, 29 Mar 2026 18:13:28 +0200 Subject: [PATCH 11/22] Resolved build & test errors 2 --- .../milestone/quests/CrystallizedPickaxeQuest.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) 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 index e074f2fad..b23566c84 100644 --- 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 @@ -1,7 +1,5 @@ package fr.openmc.core.features.dream.milestone.quests; -import fr.openmc.core.OMCPlugin; -import fr.openmc.core.features.cube.multiblocks.MultiBlock; import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.milestone.DreamSteps; @@ -18,14 +16,11 @@ import org.bukkit.event.entity.EntityPickupItemEvent; import java.util.List; +import java.util.Objects; public class CrystallizedPickaxeQuest extends MilestoneQuest implements Listener { public CrystallizedPickaxeQuest() { - MultiBlock multiblock = MultiBlockManager.getMultiblockAtDimension("world_dream"); - if (multiblock == null) { - OMCPlugin.getInstance().getSLF4JLogger().error("Multiblock in dream dimension is null!"); - } super( "Bonne pioche", List.of( @@ -42,8 +37,8 @@ public CrystallizedPickaxeQuest() { "pour la dernière étape de cette quête.", "§6Alors ne traînons pas, pastons en grotte.", "§3Voyageur : Non ! Avant d'aller chercher le dernier orbe, fais un détour aux coordonnées " + - multiblock.origin.getBlockX() + " " + - multiblock.origin.getBlockZ() + ". Comme promis, je te dois des explications." + Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockX() + " " + + Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockZ() + ". Comme promis, je te dois des explications." ) ); } From 84393140345f3be556986c347c258055f7ff38b5 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Wed, 8 Apr 2026 20:30:48 +0200 Subject: [PATCH 12/22] =?UTF-8?q?Ajout=20des=20cr=C3=A9dits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fr/openmc/core/features/credits/Credits.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/fr/openmc/core/features/credits/Credits.java b/src/main/java/fr/openmc/core/features/credits/Credits.java index 8b2c448e1..43d5224ac 100644 --- a/src/main/java/fr/openmc/core/features/credits/Credits.java +++ b/src/main/java/fr/openmc/core/features/credits/Credits.java @@ -14,6 +14,7 @@ public enum Credits { CUBE(Material.LAPIS_BLOCK, "Le Cube", Set.of("iambibi_")), CITY(CustomItemRegistry.getByName("omc_homes:omc_homes_icon_chateau").getBest(), "Les Villes", Set.of("iambibi_", "Gyro", "gab400", "Nocolm", "Axeno", "PuppyTransGirl"), Set.of("Tfloa", "Gexary")), DREAM(Material.SCULK, "La Dimension des Rêves", Set.of("iambibi_"), Set.of("Tfloa"), Set.of("Mcross_bow")), + DREAM_MILESTONE(CustomItemRegistry.getByName("omc_dream:singularity").getBest(), "Le Milestone des Rêves", Set.of("gab400", "Rylo42 (histoire et dialogues)")), MASCOTS(Material.ZOMBIE_SPAWN_EGG, "Les Mascottes", Set.of("Nocolm")), MAYOR(CustomItemRegistry.getByName("omc_homes:omc_homes_icon_bank").getBest(), "Les Maires", Set.of("iambibi_"), Set.of("Gexary")), CITY_MILESTONE(Material.NETHER_STAR, "Le Milestone des Villes", Set.of("iambibi_")), From d643354d4bb62aafb0a078ace94944c97eef09f8 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:49:52 +0200 Subject: [PATCH 13/22] Update credits --- src/main/java/fr/openmc/core/features/credits/Credits.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/credits/Credits.java b/src/main/java/fr/openmc/core/features/credits/Credits.java index 43d5224ac..03d94a41b 100644 --- a/src/main/java/fr/openmc/core/features/credits/Credits.java +++ b/src/main/java/fr/openmc/core/features/credits/Credits.java @@ -13,7 +13,7 @@ public enum Credits { ANIMATIONS(Material.AMETHYST_BLOCK, "Les Animations", Set.of("iambibi_", "gab400"), Set.of("Tfloa")), CUBE(Material.LAPIS_BLOCK, "Le Cube", Set.of("iambibi_")), CITY(CustomItemRegistry.getByName("omc_homes:omc_homes_icon_chateau").getBest(), "Les Villes", Set.of("iambibi_", "Gyro", "gab400", "Nocolm", "Axeno", "PuppyTransGirl"), Set.of("Tfloa", "Gexary")), - DREAM(Material.SCULK, "La Dimension des Rêves", Set.of("iambibi_"), Set.of("Tfloa"), Set.of("Mcross_bow")), + DREAM(Material.SCULK, "La Dimension des Rêves", Set.of("iambibi_", "gab400"), Set.of("Tfloa"), Set.of("Mcross_bow")), DREAM_MILESTONE(CustomItemRegistry.getByName("omc_dream:singularity").getBest(), "Le Milestone des Rêves", Set.of("gab400", "Rylo42 (histoire et dialogues)")), MASCOTS(Material.ZOMBIE_SPAWN_EGG, "Les Mascottes", Set.of("Nocolm")), MAYOR(CustomItemRegistry.getByName("omc_homes:omc_homes_icon_bank").getBest(), "Les Maires", Set.of("iambibi_"), Set.of("Gexary")), From cabcaff5f8080c677a2a0248470b5aa88c349593 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:50:18 +0200 Subject: [PATCH 14/22] Removing milestone call before dreamdim --- src/main/java/fr/openmc/core/OMCPlugin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/OMCPlugin.java b/src/main/java/fr/openmc/core/OMCPlugin.java index 565990564..6bcf9bb29 100644 --- a/src/main/java/fr/openmc/core/OMCPlugin.java +++ b/src/main/java/fr/openmc/core/OMCPlugin.java @@ -158,7 +158,6 @@ public void loadWithItemsAdder() { CustomLootTableRegistry.init(); // ** FEATURES ** - MilestonesManager.init(); QuestsManager.init(); CityManager.init(); ContestManager.init(); From 02afb4303ec1670d3814c429ca99d5c0fe015b10 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:50:58 +0200 Subject: [PATCH 15/22] Modified cube to implement in milestone --- .../features/cube/listeners/CubeListener.java | 36 +++++++++++++------ .../milestone/quests/CubeTempleQuest.java | 6 ++-- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java index bd6d64d26..8143c719d 100644 --- a/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java +++ b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java @@ -52,45 +52,61 @@ public void onPlayerMove(PlayerMoveEvent event) { } @EventHandler - public void onPlayerEnterAndLeaveBubble(PlayerMoveEvent event) { + public void onPlayerEnterAndLeaveCubeZone(PlayerMoveEvent event) { Player player = event.getPlayer(); + if (!player.getLocation().getWorld().getName().equals("world") + && !player.getLocation().getWorld().getName().equals("world_dream")) return; boolean insideAny = false; Cube cube = null; for (MultiBlock mb : MultiBlockManager.getMultiBlocks()) { if (!(mb instanceof Cube loopCube)) continue; - if (loopCube.corruptedBubbleTask == null) continue; Location center = loopCube.getCenter(); double radius = loopCube.RADIUS_BUBBLE; if (!player.getWorld().equals(center.getWorld())) continue; + cube = loopCube; if (player.getLocation().distance(center) <= radius) { - cube = loopCube; insideAny = true; break; } } - - AttributeInstance attr = player.getAttribute(Attribute.GRAVITY); - if (attr == null) return; + + if (cube == null) { + throw new NullPointerException("No Cube found in world: " + player.getLocation().getWorld().getName()); + } UUID uuid = player.getUniqueId(); if (insideAny && !playersInBubble.contains(uuid)) { playersInBubble.add(uuid); - attr.setBaseValue(0.04); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, Integer.MAX_VALUE, 2, true, false, true)); Bukkit.getPluginManager().callEvent(new EnterCubeZoneEvent(player, cube)); + if (cube.corruptedBubbleTask != null) onPlayerEnterBubble(player); } else if (!insideAny && playersInBubble.contains(uuid)) { playersInBubble.remove(uuid); - attr.setBaseValue(0.08); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); + if (cube.corruptedBubbleTask != null) onPlayerExitBubble(player); Bukkit.getPluginManager().callEvent(new ExitCubeZoneEvent(player)); } } + + public void onPlayerEnterBubble(Player player) { + AttributeInstance attr = player.getAttribute(Attribute.GRAVITY); + if (attr == null) return; + + attr.setBaseValue(0.04); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, Integer.MAX_VALUE, 2, true, false, true)); + } + + public void onPlayerExitBubble(Player player) { + AttributeInstance attr = player.getAttribute(Attribute.GRAVITY); + if (attr == null) return; + + attr.setBaseValue(0.08); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); + } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { 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 44578e3c9..adbdf3f5b 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 @@ -21,7 +21,7 @@ public CubeTempleQuest() { 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§oon est malgré tout dans Minecraft, même dans un rêve !" ), Material.POLISHED_BLACKSTONE_BRICKS, MilestoneType.DREAM, @@ -31,10 +31,10 @@ public CubeTempleQuest() { "§3Voyageur : Sache qu'il s'agit d'un autel qui a été érigé pour...", "§6Pour ?", "§3Voyageur : ...", - "§6Voyageur : Passons, ce n'est pas le moment. Restons sur le fait qu'il s'agit du maître des lieux.", + "§3Voyageur : Passons, ce n'est pas le moment. Restons sur le fait qu'il s'agit du maître des lieux.", "§6Comment ça le maitre des lieux ?", "§3Voyageur : Peu importe, maintenant que tu as compris le principe de cette dimension, je vais pouvoir te " + - "parler de son but et de ce que l'on fait ici.", + "parler de son §dbut §3et de ce que l'on fait ici.", "§3Voyageur : Commence déjà par aller au §dcentre du temple§3 et déposer l'orbe." ) ); From 45176a21f415cb3a0b576d9714c461b499ee6ba3 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:51:41 +0200 Subject: [PATCH 16/22] Patch NullPointerException in cold calculation --- .../features/dream/mecanism/cold/ColdManager.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdManager.java b/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdManager.java index b79fd6a6e..76dc9d0aa 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdManager.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/cold/ColdManager.java @@ -15,9 +15,11 @@ import org.bukkit.block.Block; import org.bukkit.block.data.type.Campfire; import org.bukkit.entity.Player; -import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; +import java.util.Arrays; +import java.util.List; + public class ColdManager { private static final NamespacedKey COLD_SPEED_KEY = new NamespacedKey(OMCPlugin.getInstance(), "cold_speed_modifier"); @@ -31,13 +33,12 @@ public static void init() { public static int calculateColdResistance(Player player) { int sommeColdResistance = 0; - EntityEquipment equipement = player.getEquipment(); - - if (equipement == null) return 0; - ItemStack[] armorContents = equipement.getArmorContents(); + List armorContents = Arrays.stream(player.getEquipment().getArmorContents()).toList(); + if (armorContents.isEmpty()) return 0; for (ItemStack item : armorContents) { + if (item == null) continue; if (DreamItemRegistry.getByItemStack(item) instanceof DreamEquipableItem dreamEquipableItem) { Integer coldResistance = dreamEquipableItem.getColdResistance(); From 989d783131937e72044f7a7c5d36d0645cd2e72c Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:52:27 +0200 Subject: [PATCH 17/22] Added admin command to show dialogs and refactor dialog logic --- .../dream/commands/AdminDreamCommands.java | 30 ++++++++++++++ .../DreamMilestoneStepsAutoComplete.java | 17 ++++++++ .../dream/milestone/DreamMilestoneDialog.java | 40 +------------------ 3 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/dream/commands/autocomplete/DreamMilestoneStepsAutoComplete.java diff --git a/src/main/java/fr/openmc/core/features/dream/commands/AdminDreamCommands.java b/src/main/java/fr/openmc/core/features/dream/commands/AdminDreamCommands.java index 9a8d99d97..58d07df8a 100644 --- a/src/main/java/fr/openmc/core/features/dream/commands/AdminDreamCommands.java +++ b/src/main/java/fr/openmc/core/features/dream/commands/AdminDreamCommands.java @@ -2,13 +2,23 @@ import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.dream.DreamManager; +import fr.openmc.core.features.dream.commands.autocomplete.DreamMilestoneStepsAutoComplete; import fr.openmc.core.features.dream.listeners.orb.PlayerObtainOrb; +import fr.openmc.core.features.dream.milestone.DreamMilestoneDialog; +import fr.openmc.core.features.dream.milestone.DreamSteps; import fr.openmc.core.features.dream.models.db.DBDreamPlayer; import fr.openmc.core.features.dream.models.db.DreamPlayer; +import fr.openmc.core.features.milestones.MilestoneQuest; +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.entity.Player; import revxrsal.commands.annotation.*; import revxrsal.commands.bukkit.annotation.CommandPermission; +import java.util.List; + @Command("admdream") @CommandPermission("omc.admins.commands.admindream") public class AdminDreamCommands { @@ -37,4 +47,24 @@ void setProgressionOrb( cache1.setProgressionOrb(orbProgression); DreamManager.saveDreamPlayerData(cache1); } + + @Subcommand("showdialog") + @CommandPermission("omc.admins.commands.admindream.showdialog") + void showMilestoneDialog(Player player, @Named("milestone_step") @SuggestWith(DreamMilestoneStepsAutoComplete.class) String stepName) { + MilestoneQuest quest; + try { + quest = DreamSteps.valueOf(stepName).getQuest(); + } catch (IllegalArgumentException e) { + MessagesManager.sendMessage(player, Component.text("§cLe nom de l'étape n'est pas valide !"), Prefix.DREAM, MessageType.ERROR, false); + return; + } + + List dialogs = quest.getDialogs(); + if (dialogs == null || dialogs.isEmpty()) { + MessagesManager.sendMessage(player, Component.text("§cCette étape n'a pas de dialogs !"), Prefix.DREAM, MessageType.WARNING, false); + return; + } + + DreamMilestoneDialog.send(player, (DreamSteps) quest.getStep(), dialogs, 1); + } } diff --git a/src/main/java/fr/openmc/core/features/dream/commands/autocomplete/DreamMilestoneStepsAutoComplete.java b/src/main/java/fr/openmc/core/features/dream/commands/autocomplete/DreamMilestoneStepsAutoComplete.java new file mode 100644 index 000000000..1f112e434 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/commands/autocomplete/DreamMilestoneStepsAutoComplete.java @@ -0,0 +1,17 @@ +package fr.openmc.core.features.dream.commands.autocomplete; + +import fr.openmc.core.features.dream.milestone.DreamSteps; +import org.jetbrains.annotations.NotNull; +import revxrsal.commands.autocomplete.SuggestionProvider; +import revxrsal.commands.bukkit.actor.BukkitCommandActor; +import revxrsal.commands.node.ExecutionContext; + +import java.util.Arrays; +import java.util.Collection; + +public class DreamMilestoneStepsAutoComplete implements SuggestionProvider { + @Override + public @NotNull Collection getSuggestions(@NotNull ExecutionContext context) { + return Arrays.stream(DreamSteps.values()).map(Enum::name).toList(); + } +} diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java index 43f4cde80..0431b4504 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -1,6 +1,5 @@ package fr.openmc.core.features.dream.milestone; -import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.utils.dialog.ButtonType; import io.papermc.paper.dialog.Dialog; @@ -11,7 +10,6 @@ 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; @@ -20,43 +18,7 @@ public class DreamMilestoneDialog { - public static void send(Player player, DreamSteps 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.getQuest().getName())) - .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) { - Consumer runnable = step.getQuest().getAfterDialog(); - if (runnable != null) runnable.accept(player); - 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, DreamSteps step, List dialogs, int messageStep) { + public static void send(Player player, DreamSteps step, List dialogs, int messageStep) { List body = new ArrayList<>(); for (int i = 0; i < messageStep; i++) { From f160f2010795f922fa017f436758e243eb8476be Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 15:52:47 +0200 Subject: [PATCH 18/22] Finished milestone --- .../listeners/biomes/PlayerEnteredBiome.java | 5 +-- .../features/dream/milestone/DreamSteps.java | 16 ++++----- .../dream/milestone/quests/AltarQuest.java | 6 ++-- .../milestone/quests/CloudCastleQuest.java | 3 +- .../milestone/quests/CloudValleyQuest.java | 5 ++- .../quests/CraftDominationOrbQuest.java | 2 +- .../quests/CraftEternalFireQuest.java | 10 +++--- .../quests/CraftSingularityQuest.java | 8 ++--- .../milestone/quests/CraftingTableQuest.java | 3 +- .../dream/milestone/quests/CraftsQuest.java | 3 +- .../milestone/quests/CreakingHeartQuest.java | 2 +- .../quests/CrystallizedPickaxeQuest.java | 35 +++++++++---------- .../dream/milestone/quests/EweniteQuest.java | 15 ++++++-- .../dream/milestone/quests/FindCubeQuest.java | 20 +++++------ .../milestone/quests/GlaciteOrbQuest.java | 6 ++-- .../milestone/quests/GrottoCampQuest.java | 7 ++-- .../milestone/quests/IllusionistQuest.java | 12 ++++--- .../milestone/quests/KillBreezyQuest.java | 32 ++++++++++------- .../milestone/quests/MetalDetectorQuest.java | 28 ++++++++------- .../dream/milestone/quests/MudBeachQuest.java | 16 ++++----- .../dream/milestone/quests/MudOrbQuest.java | 34 +++++++++--------- .../dream/milestone/quests/OldAxeQuest.java | 6 ++-- .../dream/milestone/quests/SleepQuest.java | 7 ++-- .../dream/milestone/quests/SoulOrbQuest.java | 7 ++-- .../dream/milestone/quests/SoulsQuest.java | 7 ++-- .../quests/TransferableObjectQuest.java | 5 +-- .../features/dream/models/db/DreamPlayer.java | 2 ++ .../features/milestones/MilestoneQuest.java | 12 +++++-- .../java/fr/openmc/core/utils/ItemUtils.java | 8 +++++ 29 files changed, 184 insertions(+), 138 deletions(-) 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 5e3e4d87c..40cdb5e9c 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 @@ -56,7 +56,9 @@ public void onPlayerMove(PlayerMoveEvent event) { Biome biome = player.getLocation().getBlock().getBiome(); int index = BIOME_ORDER.indexOf(biome); if (index == -1) return; - + + Bukkit.getServer().getPluginManager().callEvent(new PlayerEnterBiomeEvent(player, biome)); + DBDreamPlayer cacheData = DreamManager.getCacheDreamPlayer(player); int unlocked = cacheData == null ? 0 : cacheData.getProgressionOrb(); @@ -88,7 +90,6 @@ 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/milestone/DreamSteps.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java index 72d4119be..8ddea69bf 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 @@ -10,9 +10,9 @@ public enum DreamSteps { SLEEP(null), CRAFTS(null), CRAFTING_TABLE(null), - GET_HEART(null), + CREAKING_HEART(null), OLD_AXE(null), - DOMINATION_ORB(null), + CRAFT_DOMINATION_ORB(null), CUBE_TEMPLE(null), ALTAR(null), SOULS(null), @@ -25,12 +25,12 @@ public enum DreamSteps { MUD_ORB(null), CRYSTALLIZED_PICKAXE(null), FIND_CUBE(null), - ETERNAL_FIRE(null), + CRAFT_ETERNAL_FIRE(null), GROTTO_CAMP(null), ILLUSIONIST(null), EWENITE(null), GLACITE_ORB(null), - SINGULARITY(null), + CRAFT_SINGULARITY(null), TRANSFERABLE_OBJECT(null) ; @@ -44,9 +44,9 @@ public enum DreamSteps { SLEEP.quest = new SleepQuest(); CRAFTS.quest = new CraftsQuest(); CRAFTING_TABLE.quest = new CraftingTableQuest(); - GET_HEART.quest = new CreakingHeartQuest(); + CREAKING_HEART.quest = new CreakingHeartQuest(); OLD_AXE.quest = new OldAxeQuest(); - DOMINATION_ORB.quest = new CraftDominationOrbQuest(); + CRAFT_DOMINATION_ORB.quest = new CraftDominationOrbQuest(); CUBE_TEMPLE.quest = new CubeTempleQuest(); ALTAR.quest = new AltarQuest(); SOULS.quest = new SoulsQuest(); @@ -59,12 +59,12 @@ public enum DreamSteps { MUD_ORB.quest = new MudOrbQuest(); CRYSTALLIZED_PICKAXE.quest = new CrystallizedPickaxeQuest(); FIND_CUBE.quest = new FindCubeQuest(); - ETERNAL_FIRE.quest = new CraftEternalFireQuest(); + CRAFT_ETERNAL_FIRE.quest = new CraftEternalFireQuest(); GROTTO_CAMP.quest = new GrottoCampQuest(); ILLUSIONIST.quest = new IllusionistQuest(); EWENITE.quest = new EweniteQuest(); GLACITE_ORB.quest = new GlaciteOrbQuest(); - SINGULARITY.quest = new CraftSingularityQuest(); + CRAFT_SINGULARITY.quest = new CraftSingularityQuest(); TRANSFERABLE_OBJECT.quest = new TransferableObjectQuest(); } } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java index c590dd0f7..0d5e29493 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java @@ -34,13 +34,13 @@ public AltarQuest() { List.of( "§3Voyageur : Pour obtenir de l'orbe des âmes, il te faudra...", "§6Des âmes ?!", - "§3Voyageur : Oui ! C'est ça ! Il te faudra §d20§3 âmes pour obtenir celui-ci.", + "§3Voyageur : Oui ! C'est ça ! Il t'en faudra §d20§3", "§3Voyageur : Mais fais attention à toi, elles adorent le temps encore plus que les creakings", "§6Comment puis-je en trouver, et comment les reconnaître ?", "§3Voyageur : Regarde autour de l'autel, vers les §darbres§3. Les âmes se baladent à l'extérieur du bâtiment.", - "§3Voyageur : Tout comme l'armure \"Creaking\", il est possible d'avoir l'armure des \"Âmes\". Celle-ci te confèrera " + + "§3Voyageur : Tout comme l'armure \"Creaking\", il est possible d'avoir l'armure des §d\"Âmes\"§3. Celle-ci te confèrera §d" + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:soul_chestplate"))).getAdditionalMaxTime() + - " secondes supplémentaires par pièces d'armure équipées.", + " secondes §3supplémentaires par pièces d'armure équipées.", "§3Voyageur : Tu peux également transformer ta hache à l'autel avec quelques âmes supplémentaires." ) ); 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 index 464a018a7..f90ebda96 100644 --- 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 @@ -10,10 +10,11 @@ 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 CloudCastleQuest extends MilestoneQuest { +public class CloudCastleQuest extends MilestoneQuest implements Listener { public CloudCastleQuest() { super( "Laputa", 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 index b480cbf54..58439d236 100644 --- 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 @@ -27,7 +27,7 @@ public CloudValleyQuest() { DreamSteps.CLOUD_VALLEY, new QuestTier(1), List.of( - "§6Nous sommes dans une pleine... des nuages ???", + "§6Nous sommes dans une pleine... de nuages ???", "§3Voyageur : Il s'agit d'une pleine d'un ancien peuple ayant dompté les forces du vent.", "§3Voyageur : Tu devrais pouvoir y trouver des §drestes de leur civilisation§3.", "§6C'est à dire ?", @@ -38,10 +38,9 @@ public CloudValleyQuest() { @EventHandler public void onEnterBiome(PlayerEnterBiomeEvent e) { + if (e.getBiome() != DreamBiome.CLOUD_LAND.getBiome()) return; 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 477192321..a62d18489 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 @@ -27,7 +27,7 @@ public CraftDominationOrbQuest() { ), DreamItemRegistry.getByName("omc_dream:domination_orb").getBest(), MilestoneType.DREAM, - DreamSteps.DOMINATION_ORB, + DreamSteps.CRAFT_DOMINATION_ORB, new QuestTier(1), List.of( "§6Voilà l'orbe, que dois-je faire avec ?", 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 index e6e88bb6c..c0bd7d02e 100644 --- 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 @@ -23,21 +23,21 @@ public CraftEternalFireQuest() { super( "L'ère glacière", List.of( - "§fFabriquer le feu éternel", + "§fFabriquer le §dfeu éternel", "§8§oVa-t-on retrouver des dinosaures fossilisés ou Sid ?" ), DreamItemRegistry.getByName("omc_dream:eternal_campfire").getBest(), MilestoneType.DREAM, - DreamSteps.ETERNAL_FIRE, + DreamSteps.CRAFT_ETERNAL_FIRE, new QuestTier(1), List.of( "§3Voyageur : Bien ! Ce feu te sera utile.", "§6Il s'agit d'un feu, ça va me permettre de cuire quelque chose ?", - "§3Voyageur : Dans ce monde, ce feu te servira à limiter les effets du froid des profondeurs. Tu vas rentrer dans un monde glacial, chaque seconde passée " + - "dans celui-ci te ralentira et finira par te tuer.", + "§3Voyageur : Dans ce monde, ce feu te servira à limiter les §deffets du froid §3des profondeurs. Tu vas rentrer dans un monde glacial, chaque seconde passée " + + "dans celui-ci §dte ralentira §3et finira par §dte tuer§3.", "§3Voyageur : En posant ce feu au sol et en restant proche de lui, tu vas te réchauffer et éviter cela.", "§6Comme lorsqu'on sort de la poudreuse.", - "§3Voyageur : Oui. Maintenant que tu as compris le principe, partons à la recherche des camps présents dans les grottes des profondeurs." + "§3Voyageur : Oui. Maintenant que tu as compris le principe, partons à la recherche des §dcamps §3présents dans les §dgrottes des profondeurs§3." ) ); } 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 index 7be571c47..8f8549f9d 100644 --- 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 @@ -30,7 +30,7 @@ public CraftSingularityQuest() { ), DreamItemRegistry.getByName("omc_dream:singularity").getBest(), MilestoneType.DREAM, - DreamSteps.SINGULARITY, + DreamSteps.CRAFT_SINGULARITY, new QuestTier(1), List.of( "§6Voilà ! Que faut-il faire pour pouvoir maintenant remonter le temps ?", @@ -45,11 +45,11 @@ public CraftSingularityQuest() { "sans doute utiles dans ton monde.", "§6...", "§3Voyageur : Je n'ai pas réussi à sauver cette dimension, mais j'ai tout de même réussi à t'aider \"toi\" dans cette dimension.", - "§3Voyageur : Quoi qu'il en soit, tu vas pouvoir récupérer les enchantements de cette dimension grâce à la singularité et même l'armure si tu le souhaites.", + "§3Voyageur : Quoi qu'il en soit, tu vas pouvoir §drécupérer les enchantements §3de cette dimension grâce à la singularité et même l'§darmure §3si tu le souhaites.", "§3Voyageur : La singularité n'est pas assez puissante pour moi, mais largement assez pour des nouvelles armes ou armures.", "§3Voyageur : Tout comme les orbes précédents, tu as la possibilité de te fabriquer une nouvelle armure. Celle-ci en revanche va nécessiter de refaire " + - "l'ensemble des orbes, mais ça en vaut le coup, car elle rajoute " + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:dream_chestplate"))).getAdditionalMaxTime() - + " secondes de plus par pièce portée, mais aussi des effets.", + "l'ensemble des orbes, mais ça en vaut le coup, car elle rajoute §d" + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:dream_chestplate"))).getAdditionalMaxTime() + + " secondes §3de plus par pièce portée, mais aussi des effets.", "§6... Merci !", "§3Voyageur : Non ! C'est moi qui te remercie. Car un jour, quelqu'un que je respectais comme personne m'a dit : \"Remercie la personne que tu as aidé, " + "car elle t'a permis de faire une bonne action\".", 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 8605a430c..89c08a728 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 @@ -21,7 +21,8 @@ public CraftingTableQuest() { "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" + "§8§oBizarre cette survie de nuit...", + "§8§oon ne voit pas en dehors des pleines de sculks" ), Material.CRAFTING_TABLE, MilestoneType.DREAM, 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 0389eb0ff..ae18260fb 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 @@ -20,7 +20,8 @@ public CraftsQuest() { "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" + "§8§oCette dimension a ses propres règles,", + "§8§oje dois les apprendre pour y survivre" ), Material.BOOK, MilestoneType.DREAM, 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 5f0efaa7c..6d8144ec9 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 @@ -28,7 +28,7 @@ public CreakingHeartQuest() { ), Material.RESIN_CLUMP, MilestoneType.DREAM, - DreamSteps.GET_HEART, + DreamSteps.CREAKING_HEART, new QuestTier(1), List.of( "§6Ah ! Mais c'est vrai qu'ils protègent leurs cœurs.", 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 index b23566c84..ae06762bc 100644 --- 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 @@ -2,6 +2,7 @@ import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.MetalDetectorLootEvent; 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; @@ -13,7 +14,6 @@ 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; import java.util.Objects; @@ -32,28 +32,27 @@ public CrystallizedPickaxeQuest() { DreamSteps.CRYSTALLIZED_PICKAXE, new QuestTier(1), List.of( - "§3Voyageur : Celle-ci sera ta meilleure amie dans les grottes, en remplacement de ta hache.", - "§3Voyageur : À partir de maintenant, tu vas devoir principalement miner. Les profondeurs de ce monde regorgent de minerais utiles " + - "pour la dernière étape de cette quête.", - "§6Alors ne traînons pas, pastons en grotte.", - "§3Voyageur : Non ! Avant d'aller chercher le dernier orbe, fais un détour aux coordonnées " + - Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockX() + " " + - Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockZ() + ". Comme promis, je te dois des explications." + "§3Voyageur : Celle-ci sera ta meilleure amie dans les §dgrottes§3, en remplacement de ta hache.", + "§3Voyageur : À partir de maintenant, tu vas devoir principalement miner. Les profondeurs de ce monde regorgent de §dminerais utiles " + + "§3pour la §ddernière étape §3de cette quête.", + "§6Alors ne traînons pas, partons en grotte.", + "§3Voyageur : Non ! Avant d'aller chercher le dernier orbe, fais un détour aux coordonnées §cX: " + + Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockX() + " §9Z: " + + Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockZ() + "§3. Comme promis, je te dois des explications." ) ); } @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()); - } + public void onPickUp(MetalDetectorLootEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getLoot().getFirst()); + 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/EweniteQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java index 306ff45fc..5968c6018 100644 --- 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 @@ -1,6 +1,7 @@ package fr.openmc.core.features.dream.milestone.quests; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.GlaciteTradeEvent; 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; @@ -23,7 +24,8 @@ public EweniteQuest() { "Aywenite, Awyenito ou Ewenite ?", List.of( "§fObtenir de l'§dEwenite", - "§8§oUn nouveau minerai à exploiter. Bizarre, ce nom m'est familier." + "§8§oUn nouveau minerai à exploiter.", + "§8§oBizarre, ce nom m'est familier." ), DreamItemRegistry.getByName("omc_dream:ewenite").getBest(), MilestoneType.DREAM, @@ -33,7 +35,7 @@ public EweniteQuest() { "§6Le début de la richesse. Qu'il s'agisse de miner ou de les échanger, j'ai l'impression que la recherche va être longue.", "§3Voyageur : Le minerai n'est pas commun, mais tu peux en trouver plusieurs rapidement.", "§6N'y a-t-il pas moyen d'aller plus vite ?", - "§3Voyageur : Tu peux te fabriquer la pioche mécanique si tu le souhaites, ça sera plus rapide." + "§3Voyageur : Tu peux te fabriquer la §dPioche mécanique §3si tu le souhaites, ça sera plus rapide." ) ); } @@ -51,4 +53,13 @@ public void onPickUp(EntityPickupItemEvent e) { } } } + + @EventHandler + public void onTrade(GlaciteTradeEvent e) { + Player player = e.getPlayer(); + if (e.getTrade().getResult() 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/FindCubeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java index 688653dce..cc8afc70a 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/FindCubeQuest.java @@ -19,7 +19,7 @@ public FindCubeQuest() { super( "Un petit détour", List.of( - "§fTrouver le cube", + "§fTrouver le §dCube", "§8§oMystère et explications" ), Material.LAPIS_BLOCK, @@ -27,27 +27,27 @@ public FindCubeQuest() { DreamSteps.FIND_CUBE, new QuestTier(1), List.of( - "§3Voyageur : Voilà l'origine de la catastrophe de ce monde. Il s'agit du \"Cube\", le maître des lieux. Il a été vénéré par le peuple de cette dimension " + - "qui a construit les temples que tu as vu. Son nom : Bobby.", + "§3Voyageur : Voilà l'origine de la catastrophe de ce monde. Il s'agit du §d\"Cube\"§3, le maître des lieux. Il a été vénéré par le peuple de cette dimension " + + "qui a construit les temples que tu as vu. Son nom : §dBobby§3.", "§6Mais qu'a-t-il fait et pourquoi n'y a-t-il pas de sculk autour de lui ?", "§3Voyageur : Au début, celui-ci nous apportait paix et prospérité. Mais un jour, un violent orage serait survenu, un éclair l'aurait frappé et l'aurait endommagé. ", - "§3Voyageur : Le cube après s'être régénéré durant une longue période, aurait commencé à bouger et peu à peu, à corrompre le monde, mais en installant un écosystème autosuffisant " + - "pour son nouvel état. C'est-à-dire que lui-même se protège et se propage seul, en se nourrissant de la vie du monde.", - "§3Voyageur : Cela a conduit à la anhilation ou la corruption de toute vie dans ce lieu.", + "§3Voyageur : Le cube après s'être régénéré durant une longue période, aurait commencé à bouger et peu à peu, à §dcorrompre §3le monde, mais en installant un §décosystème autosuffisant " + + "§3pour son nouvel état. C'est-à-dire que lui-même se protège et se propage seul, en se nourrissant de la §dvie §3du monde.", + "§3Voyageur : Cela a conduit à la §danhilation §3ou la §dcorruption §3de toute vie dans ce lieu.", "§6Et toi dans tout cela, qui es-tu ? Depuis le début de notre aventure, tu me parles, mais tu n'es pas vraiment là.", "§3Voyageur : Il est très probable que je ne sois plus de ce monde, du moins physiquement. Lorsque le cube a corrompu la carte, au lieu de lutter contre lui, " + - "le l'ai utilisé pour détruire mon corps, en forçant la survie de mon esprit. Étant donné que j'ai utilisé le cube pour survivre, il ne peut pas m'éliminer " + + "le l'ai utilisé pour §ddétruire mon corps§3, en forçant la §dsurvie §3de mon esprit. Étant donné que j'ai utilisé le cube pour survivre, il ne peut pas m'éliminer " + "sans se tuer par lui-même.", - "§3Voyageur : Je suis alors présent pour aider se monde à retrouver son ancienne vie. Lorsque je t'ai vu arriver, je t'ai suivi afin que tu puisses réaliser à ma place, " + + "§3Voyageur : Je suis alors présent pour aider se monde à §dretrouver son ancienne vie§3. Lorsque je t'ai vu arriver, je t'ai suivi afin que tu puisses §dréaliser §3à ma place, " + "la quête que j'étais censé réaliser.", "§6...", - "§3Voyageur : Voilà, maintenant que tu en sais un peu plus, nous devons avancer dans la quête qui est désormais la tienne. Direction : les grottes." + "§3Voyageur : Voilà, maintenant que tu en sais un peu plus, nous devons avancer dans la quête qui est désormais la tienne. Direction : §dles grottes§3." ) ); } @EventHandler - public void onEnterCubeZone(EnterCubeZoneEvent e) { //TODO A voir si ça fonctionne + public void onEnterCubeZone(EnterCubeZoneEvent e) { Player player = e.getPlayer(); if (!DreamUtils.isInDreamWorld(player)) return; 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 index eb34025e5..52f1b2e3e 100644 --- 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 @@ -30,10 +30,10 @@ public GlaciteOrbQuest() { List.of( "§3Voyageur : Enfin, nous touchons au but. Bien plus qu'une seule étape pour enfin être libéré de cette situation.", "§6Que dois-je faire ?", - "§3Voyageur : Il faut les combiner", + "§3Voyageur : Il faut les §dcombiner§3.", "§6Les combiner ? Pas d'incantation cette fois ?", - "§3Voyageur : Non, promis. Combine-les dans la table de craft que nous avons confectionné tous les deux au début de notre aventure. " + - "Nous pourrons ensuite utiliser le pouvoir de la singularité." + "§3Voyageur : Non, promis. Combine-les dans la §dtable de craft §3que nous avons confectionné tous les deux au début de notre aventure. " + + "Nous pourrons ensuite utiliser le pouvoir de la §dsingularité§3." ) ); } 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 index 1daed09b5..6b1fee1ca 100644 --- 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 @@ -21,7 +21,8 @@ public GrottoCampQuest() { "La survie en mode fin du monde ?", List.of( "§fTrouver un §dcamp de grotte", - "§8§oIl n'y a pas de Transperceneige mais, y aurait-il, une zone protégée." + "§8§oIl n'y a pas de Transperceneige mais,", + "§8§oy aurait-il, une zone protégée." ), Material.DEEPSLATE, MilestoneType.DREAM, @@ -30,9 +31,9 @@ public GrottoCampQuest() { List.of( "§6Voilà un camp.", "§3Voyageur : Voyons si nous pouvons trouver le dernier dépositaire de l'orbe. Il doit être dans les parages.", - "§6Mais si le Cube à tou corrompu et tué, comment le marchand peut-il être encore vivant ?", + "§6Mais si le Cube à tout corrompu et tué, comment le marchand peut-il être encore vivant ?", "§3Voyageur : L'orbe, mon ami. Avant, il s'agissait d'un marchand ambulant qui parcourait le monde pour échanger ses marchandises.", - "§3Voyageur : Et chaque orbe possède un pouvoir, et je pense celui de l'§bOrbe de Glace §3a permis à ce marchant de survivre, mais à quel prix..." + "§3Voyageur : Et chaque orbe possède un pouvoir, et je pense celui de l'§dOrbe de Glace §3a permis à ce marchant de survivre, mais à quel prix..." ) ); } 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 index f8681e2f5..71d40447c 100644 --- 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 @@ -7,6 +7,7 @@ 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.utils.ItemUtils; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -21,19 +22,20 @@ public IllusionistQuest() { "Y'a quelqu'un ?", List.of( "§fTrouver et aller voir le §dmarchand", - "§8§oS'il y a des feux allumés, c'est qu'il y a de la vie dans le coin." + "§8§oS'il y a des feux allumés,", + "§8§oc'est qu'il y a de la vie dans le coin." ), - Material.EVOKER_SPAWN_EGG, + ItemUtils.getTexturedItem(Material.PILLAGER_SPAWN_EGG), MilestoneType.DREAM, DreamSteps.ILLUSIONIST, new QuestTier(1), List.of( "§6Voilà le marchand. Il n'a plus l'air de vouloir se déplacer.", - "§3Voyageur : Comme je l'ai déjà dit, la corruption l'a modifié profondément, même si l'orbe l'a protégé de la mort.", + "§3Voyageur : Comme je l'ai déjà dit, la corruption l'a §dmodifié §3profondément, même si l'orbe l'a §dprotégé §3de la mort.", "§3Voyageur : Je ne t'en avais pas parlé jusqu'à présent, mais n'as-tu rien remarqué dans chaque lieu où nous avons trouvé un orbe ?", "§6...", - "§3Voyageur : Les orbes ont préservé les vies autour d'eux. Creakings, Araignées, Âmes, Breeze, Phantom, Vagabond, Grenouilles, Têtards, et ici le marchand.", - "§3Voyageur : Mais à nous de la faire revenir réellement. Alors vas-y, fais l'échange pour l'Orbe." + "§3Voyageur : Les orbes ont §dpréservé §3les vies autour d'eux. Creakings, Araignées, Âmes, Breeze, Phantom, Vagabond, Grenouilles, Têtards, et ici le marchand.", + "§3Voyageur : Mais à nous de la faire revenir réellement. Alors vas-y, fais l'§déchange §3pour l'Orbe." ) ); } 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 index 35e4ffa88..145f748ad 100644 --- 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 @@ -5,8 +5,9 @@ import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager; import fr.openmc.core.features.dream.milestone.DreamSteps; import fr.openmc.core.features.dream.models.registry.items.DreamEquipableItem; +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.mobs.Breezy; +import fr.openmc.core.features.dream.registries.items.orb.CloudOrb; import fr.openmc.core.features.milestones.MilestoneQuest; import fr.openmc.core.features.milestones.MilestoneType; import fr.openmc.core.features.milestones.MilestonesManager; @@ -15,7 +16,8 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.inventory.ItemStack; import java.util.List; import java.util.Objects; @@ -26,7 +28,8 @@ public KillBreezyQuest() { "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 ?" + "§8§oOn va dompter un des esprits de la montagne", + "§8§ode Poncahontas, ou alors c'est Elsa ?" ), Material.WIND_CHARGE, MilestoneType.DREAM, @@ -36,28 +39,31 @@ public KillBreezyQuest() { "§6Mais c'est qu'il est balèze ce Breeze !!", "§3Voyageur : Oui, c'est ce que je craignais... même ici, tout a été corrompu.", "§6Comment ça corrompu ?", - "§3Voyageur : Les explications arriveront en temps et en heures. Pour le moment, redescends sur la terre, et dirige-toi vers les plages. " + + "§3Voyageur : Les explications arriveront en temps et en heures. Pour le moment, redescends sur terre, et dirige-toi vers les §dplages§3. " + "J'aimerais pouvoir dire de sable fin...", - "§3Voyageur : Mais avant de partir, tu peux récupérer dans les coffres du château l'armure des Nuages, qui te donnera " + + "§3Voyageur : Mais avant de partir, tu peux récupérer dans les coffres du château l'§dArmure des Nuages§3, qui te donnera §d" + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:cloud_chestplate"))).getAdditionalMaxTime() + - " secondes de temps supplémentaire par pièces d'armure. Tu peux également récupérer une canne à pêche des nuages, et un livre enchanté.", + " secondes §3de temps supplémentaire par pièces d'armure. Tu peux également récupérer une §dcanne à pêche des nuages§3, et un §dlivre enchanté§3.", "§6Une canne à pêche ? Mais pour pêcher quoi ? Des gouttelettes de nuage ?!", - "§3Voyageur : Exactement ! Celle-ci te permettra de pêcher dans les nuages comme si c'était de l'eau. Tu pourras notamment récupérer des " + - "somnifères qui te permettent de rester plus longtemps endormi, ou de t'endormir efficacement, dans le cas où tu es éveillé." + "§3Voyageur : Exactement ! Celle-ci te permettra de pêcher dans les nuages comme si c'était un lac. Tu pourras notamment récupérer des " + + "§dsomnifères §3qui te permettent de rester plus longtemps endormi, ou de t'endormir efficacement, dans le cas où tu es éveillé." ) ); } @EventHandler - public void onKillBreezy(EntityDeathEvent e) { - if (e.getDamageSource().getCausingEntity() instanceof Player player) { + public void onCollectOrb(EntityPickupItemEvent e) { + if (e.getEntity() 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")) { + ItemStack baseItem = e.getItem().getItemStack(); + + DreamItem item = DreamItemRegistry.getByItemStack(baseItem); + if (item == null) return; + if (item instanceof CloudOrb) { if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; - this.incrementProgressInDream(player.getUniqueId()); + this.incrementProgressInDream(player.getUniqueId(), baseItem.getAmount()); } } } 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 index 63757b51c..6ba380363 100644 --- 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 @@ -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; @@ -11,7 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.inventory.ItemStack; import java.util.List; @@ -22,7 +23,7 @@ public MetalDetectorQuest() { super( "Coooooooaaaaaaa", List.of( - "§fFabriquer le détecteur à métaux", + "§fRécupérer le §ddétecteur à métaux", "§8§oPourquoi les têtards sont aussi gros ?" ), DreamItemRegistry.getByName("omc_dream:metal_detector").getBest(), @@ -31,24 +32,25 @@ public MetalDetectorQuest() { new QuestTier(1), List.of( "§3Voyageur : Ah, enfin le détecteur. Nous allons pouvoir rechercher l'orbe dans cette boue plus facilement.", - "§3Voyageur : Ces plages étaient avant bien de sable et d'eau. Mais avec la catastrophe, les grenouilles et têtards se sont transformés. " + - "Cette transformation s'est soldée, pour eux, par une grande soif.", + "§3Voyageur : Ces plages étaient avant bien de sable et d'eau. Mais avec la catastrophe, les §dgrenouilles §3et §dtêtards §3se sont transformés. " + + "Cette transformation s'est soldée, pour eux, par une §dgrande soif§3.", "§6D'où l'absence d'eau." ) ); } @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) { + public void onCollectDetector(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 MetalDetector) { if (MilestonesManager.getPlayerStep(getType(), player) != getStep().ordinal()) return; - this.incrementProgressInDream(player.getUniqueId()); + this.incrementProgressInDream(player.getUniqueId(), baseItem.getAmount()); } } } 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 index 0ead4dd6b..c761219a5 100644 --- 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 @@ -22,7 +22,7 @@ public MudBeachQuest() { 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§oTiens, 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, @@ -32,14 +32,14 @@ public MudBeachQuest() { List.of( "§6Enfin sur la plage, et en effet, il n'y a ni sable chaud, ni soleil rayonnant, juste de la boue et... rien d'autre en fait.", "§3Voyageur : Très bien, pose-toi là, je te dois des explications.", - "§3Voyageur : Ce monde, a subi une catastrophe, d'où son apparence. Auparavant, il était si... si seulement je pouvais le revoir.", + "§3Voyageur : Ce monde, a subi une §dcatastrophe§3, d'où son apparence. Auparavant, il était si... si seulement je pouvais le revoir.", "§6Tu m'as parlé de 5 orbes. Ceux-ci permettraient-ils de faire revenir l'ancien monde, avec un pouvoir de terraformation ?", - "§3Voyageur : Non, c'est bien plus puissant que cela. Ils permettent de créer un trou de ver entre cette dimension et la tienne. Nous pourrons alors " + - "utiliser une partie de l'énergie de ta dimension pour remonter le temps dans celle-ci, et rétablir son équilibre.", - "§3Utiliser une partie de l'énergie ? Mais, cela est sans risque pour ma dimentsion ??", - "§6Voyageur : Oui, bien évidemment, sinon je n'en prendrais pas le risque. Chaque bloc de ton monde donnerait une petite perle de son énergie.", - "§3Quelle énergie ?", - "§6Voyageur : Nous devons avancer maintenant. Cherche des grenouilles, elles nous seront utiles." + "§3Voyageur : Non, c'est bien plus puissant que cela. Ils permettent de créer un §dtrou de ver §3entre cette §ddimension et la tienne§3. Nous pourrons alors " + + "utiliser une partie de l'§dénergie §3de ta dimension pour §dremonter le temps §3dans celle-ci, et rétablir son équilibre.", + "§6Utiliser une partie de l'énergie ? Mais, cela est sans risque pour ma dimentsion ??", + "§3Voyageur : Oui, bien évidemment, sinon je n'en prendrais pas le risque. Chaque bloc de ton monde donnerait une petite perle de son énergie.", + "§6Quelle énergie ?", + "§3Voyageur : Nous devons avancer maintenant. Cherche des §dgrenouilles§3, elles nous seront utiles." ) ); } 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 index fc4996be5..210458c0e 100644 --- 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 @@ -1,6 +1,7 @@ package fr.openmc.core.features.dream.milestone.quests; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.MetalDetectorLootEvent; 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; @@ -12,7 +13,6 @@ 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; @@ -22,9 +22,10 @@ public MudOrbQuest() { super( "Bip Biip Biiiiiiip", List.of( - "§gTrouver l'Orbe de Boue", - "§8§oBon, pas de sable, mais de la boue. Possible que les gens perdent tout de même " + - "des choses. Ah tiens, 6 blocks vers la droite." + "§fTrouver l'§dOrbe de Boue", + "§8§oBon, pas de sable, mais de la boue.", + "§8§oPossible que les gens perdent tout de même", + "§8§odes choses. Ah tiens, 6 blocks vers la droite." ), DreamItemRegistry.getByName("omc_dream:mud_orb").getBest(), MilestoneType.DREAM, @@ -32,11 +33,11 @@ public MudOrbQuest() { new QuestTier(1), List.of( "§6Cela me rappelle mes vacances à chercher des trésors sur la plage. Même si là, c'est pour une meilleure cause. Et maintenant que le 4ème orbe est avec nous, que dois-je faire ?", - "§3Voyageur : Plus qu'un. Comme nous avons fait toute la surface, alors il ne nous reste plus qu'à chercher sous terre. Il faudra bien se préparer, et notamment un bon feu. " + + "§3Voyageur : Plus qu'un. Comme nous avons fait toute la surface et les nuages, alors il ne nous reste plus qu'à chercher §dsous terre§3. Il faudra bien se préparer, et notamment un §dbon feu§3. " + "Pour ce qui est du détecteur, tu as dû voir que l'on a obtenu plusieurs choses.", "§6Oui, mon inventaire est bien rempli.", - "§3Voyageur : Tout comme la canne à pêche, tu peux y obtenir divers objets comme les chips, même si certaines sont très rares, des somnifères, " + - "un livre enchanté différent de celui des nuages, ou encore une pioche qui te sera utile pour la suite... Je vais d'ailleurs check si tu n'en as pas déjà une." + "§3Voyageur : Tout comme la canne à pêche, tu peux y obtenir divers objets comme les §dchips§3, même si certaines sont très rares, des §dsomnifères§3, " + + "un autre §dlivre enchanté§3, ou encore une §dpioche §3qui te sera utile pour la suite... Je vais d'ailleurs check si tu n'en as pas déjà une." ), player -> { if (player.getInventory().contains(DreamItemRegistry.getByName("omc_dream:crystallized_pickaxe").getBest())) @@ -46,16 +47,15 @@ public MudOrbQuest() { } @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()); - } + public void onGetOrb(MetalDetectorLootEvent e) { + Player player = e.getPlayer(); + if (!DreamUtils.isInDreamWorld(player)) return; + + DreamItem item = DreamItemRegistry.getByItemStack(e.getLoot().getFirst()); + 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 1456f0761..adf2d7613 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 @@ -32,12 +32,12 @@ public OldAxeQuest() { DreamSteps.OLD_AXE, new QuestTier(1), List.of( - "§3Voyageur : Bien ! Cela va nous être utile. Le prochain objectif va être d'obtenir l'Orbe de Domination.", + "§3Voyageur : Bien ! Cela va nous être utile. Le prochain objectif va être d'obtenir l'§dOrbe de Domination§3.", "§6À quoi va-t-elle servir ?", "§3Voyageur : Je t'expliquerai lorsque tu l'auras. Elle va être facile à récupérer avec la hache.", "§6Ai-je besoin d'autre chose ?", - "§3Voyageur : Ce n'est pas obligatoire, mais elle te permettrait de rester plus longtemps dans ce monde. Il existe l'armure \"Creaking\" que tu peux fabriquer. " + - "Cela te confèrera " + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:old_creaking_chestplate"))).getAdditionalMaxTime() + " secondes supplémentaires " + + "§3Voyageur : Ce n'est pas obligatoire, mais elle te permettrait de rester plus longtemps dans ce monde. Il existe l'armure §d\"Creaking\" §3que tu peux fabriquer. " + + "Cela te confèrera §d" + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:old_creaking_chestplate"))).getAdditionalMaxTime() + " secondes §3supplémentaires " + "par pièces d'armure équipées." ) ); 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 27a97f929..4fa8ac2c9 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 @@ -20,7 +20,8 @@ public SleepQuest() { "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..." + "§8§oQue c'est bon de dormir pour", + "§8§ose reposer de la dure vie des villes..." ), Material.RED_BED, MilestoneType.DREAM, @@ -28,10 +29,10 @@ public SleepQuest() { 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...", + "§3Voyageur : Que..? Comment est-ce possible ??! Je pensais être le seul ici. Et cela fait si longtemps que je n'ai vu personne...", "§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, je te propose de découvrir ce dont tu vas avoir besoin pour découvrir ce monde.", + "Pour l'heure, je te propose de découvrir ce dont tu vas avoir besoin pour découvrir ce monde avec la commande §d/crafts§3.", "§3Voyageur : Sache que si tu ne souhaites pas rester jusqu'à la fin du temps, tu peux te réveiller avec la commande §d/leave§3.\n" + "A contrario, tu peux revenir ici plus fréquemment en te fabriquant un §dPyjama§3. Cela te permet d'augmenter tes chances de passer dans ce monde en dormant." ) 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 fd43a85c7..e4b4a60a7 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 @@ -22,7 +22,8 @@ public SoulOrbQuest() { "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." + "§8§oÂmes dans la poche, permettez-moi, par votre pouvoir,", + "§8§od'obtenir votre orbe avec le sacrifice de l'Orbe de Domination." ), DreamItemRegistry.getByName("omc_dream:ame_orb").getBest(), MilestoneType.DREAM, @@ -34,10 +35,10 @@ public SoulOrbQuest() { "§3Voyageur : Maintenant que tu as l'Orbe des Âmes, tu vas pouvoir accéder à la §dnouvelle zone§3 qui, tu vas le voir, ne ressemble pas du tout au monde actuel...", "§3Voyageur : Il faut monter dans le ciel, dans les §dnuages§3.", "§6Peux-tu me parler un peu du but de cette quête ?", - "§3Voyageur : Les orbes sont au nombre de 5, et chacun d'eux renferme un pouvoir. Seuls, ils ne servent à rien. Mais ensemble, ils pourraient aider ce monde.", + "§3Voyageur : Les orbes sont au nombre de §d5§3, et chacun d'eux renferme un §dpouvoir§3. Seuls, ils ne servent à rien. Mais ensemble, ils pourraient aider ce monde.", "§6Et... toi, tu es qui au fait ?", "§3Voyageur : J'étais...", - "§3Voyageur : Je suis un joueur tout comme toi, mais un joueur de ce monde." + "§3Voyageur : Je suis un joueur tout comme toi, mais un joueur de §dce monde§3." ) ); } 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 fce64bbae..97667d523 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 @@ -23,7 +23,8 @@ public SoulsQuest() { "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." + "§8§oIl me semble avoir vu des créatures", + "§8§ovolantes rôder vers les grands arbres sombres." ), DreamItemRegistry.getByName("omc_dream:soul").getBest(), MilestoneType.DREAM, @@ -31,10 +32,10 @@ public SoulsQuest() { new QuestTier(20), List.of( "§6Et de 20 ! Que dois-je faire maintenant ? Il y a un craft spécifique de l'orbe à faire ?", - "§3Voyageur : Non, il faut simplement répéter l'incantation suivante 2 fois : §dAshkara no thari fu laq to !", + "§3Voyageur : Non, il faut simplement répéter l'incantation suivante 2 fois : §dAshkara no thari fu laq to", "§6Ashkara no thari fu laq to ! Ashkara no thari fu laq to !", "§6...pas facile à dire...", - "§3Voyageur : Ahah, en réalité, il te faut simplement intéragir à nouveau avec l'Orbe de Domination sur l'§dAltar§3." + "§3Voyageur : Ahah, en réalité, il te faut simplement intéragir à nouveau avec l'§dOrbe de Domination sur l'§dAltar§3." ) ); } 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 index 59692cb67..3b08f35d6 100644 --- 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 @@ -27,8 +27,9 @@ public TransferableObjectQuest() { "Ce n'était qu'un rêve ?", List.of( "§fRécupérer un objet §dtransferable §fdans l'Overworld", - "§8§oCe monde m'a l'aide tout de même réel. La singularité ne serait-elle pas " + - "un portail dimensionnel pour le loot ?" + "§8§oCe monde m'a l'aide tout de même réel.", + "§8§oLa singularité ne serait-elle pas un portail", + "§8§odimensionnel pour le loot ?" ), Material.LAPIS_BLOCK, MilestoneType.DREAM, 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 e12e42001..95ecc9ffe 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 @@ -124,6 +124,8 @@ public void scheduleColdTask() { boolean isInBaseCamp = DreamStructuresManager.isInsideStructure(player.getLocation(), DreamStructure.DreamType.BASE_CAMP); double resistance = ColdManager.calculateColdResistance(player); boolean inColdBiome = player.getLocation().getBlock().getBiome().equals(DreamBiome.GLACITE_GROTTO.getBiome()); + + if (player.getGameMode().equals(GameMode.CREATIVE) || player.getGameMode().equals(GameMode.SPECTATOR)) return; if (isInBaseCamp) { cold = Math.max(0, cold - 15); 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 68d008276..de7c70976 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -1,11 +1,14 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.OMCPlugin; +import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.milestone.DreamMilestoneDialog; import fr.openmc.core.features.dream.milestone.DreamSteps; 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 lombok.Getter; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -20,6 +23,7 @@ public class MilestoneQuest extends Quest { protected final MilestoneType type; protected final Enum step; //TODO a fix dans #1209 protected final Consumer afterDialog; + protected List dialogs; public MilestoneQuest(String name, List baseDescription, Material icon, MilestoneType type, Enum step, QuestTier quest) { this(name, baseDescription, new ItemStack(icon), type, step, quest); @@ -53,11 +57,15 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, super(name, baseDescription, icon); this.type = type; this.step = step; + this.dialogs = dialogs; this.addTier(quest.addRewards( new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)), new QuestMethodsReward(player -> { - player.closeInventory(); - DreamMilestoneDialog.send(player, step, dialogs); + Bukkit.getServer().getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { + player.closeInventory(); + DreamManager.addMilestoneDialogPlayer(player); + DreamMilestoneDialog.send(player, step, dialogs, 1); + }, 20); }) )); this.afterDialog = afterDialog; diff --git a/src/main/java/fr/openmc/core/utils/ItemUtils.java b/src/main/java/fr/openmc/core/utils/ItemUtils.java index 2f82d6e28..f7abe4714 100644 --- a/src/main/java/fr/openmc/core/utils/ItemUtils.java +++ b/src/main/java/fr/openmc/core/utils/ItemUtils.java @@ -475,6 +475,14 @@ public static String getTag(ItemStack item, String key) { NamespacedKey namespacedKey = new NamespacedKey(OMCPlugin.getInstance(), key); return meta.getPersistentDataContainer().get(namespacedKey, PersistentDataType.STRING); } + + public static ItemStack getTexturedItem(Material replacement) { + if (replacement == null) return null; + ItemStack item = new ItemStack(Material.PAPER); + item.editMeta(meta -> meta.setItemModel(replacement.getKey())); + return item; + } + /** * Compare deux {@link ItemStack} pour vérifier s'ils sont similaires. * Deux items sont considérés similaires s'ils ont le même type From 4771a598edc59b636bb040c1fc22d72d09397088 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Thu, 9 Apr 2026 20:36:12 +0200 Subject: [PATCH 19/22] Added cube GPS --- .../quests/CrystallizedPickaxeQuest.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) 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 index ae06762bc..13adf4f4e 100644 --- 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 @@ -1,5 +1,6 @@ package fr.openmc.core.features.dream.milestone.quests; +import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.dream.events.MetalDetectorLootEvent; @@ -11,15 +12,21 @@ 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.utils.DirectionUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.scheduler.BukkitRunnable; import java.util.List; import java.util.Objects; public class CrystallizedPickaxeQuest extends MilestoneQuest implements Listener { + private static final Location cubeLoc = Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin; + public CrystallizedPickaxeQuest() { super( "Bonne pioche", @@ -37,9 +44,27 @@ public CrystallizedPickaxeQuest() { "§3pour la §ddernière étape §3de cette quête.", "§6Alors ne traînons pas, partons en grotte.", "§3Voyageur : Non ! Avant d'aller chercher le dernier orbe, fais un détour aux coordonnées §cX: " + - Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockX() + " §9Z: " + - Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin.getBlockZ() + "§3. Comme promis, je te dois des explications." - ) + CrystallizedPickaxeQuest.cubeLoc.getBlockX() + " §9Z: " + + CrystallizedPickaxeQuest.cubeLoc.getBlockZ() + "§3. Comme promis, je te dois des explications." + ), + (player) -> new BukkitRunnable() { + @Override + public void run() { + if (!player.isOnline() || !DreamUtils.isInDream(player)) { + this.cancel(); + return; + } + + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) > DreamSteps.FIND_CUBE.ordinal()) { + this.cancel(); + return; + } + + int distance = (int) player.getLocation().distance(CrystallizedPickaxeQuest.cubeLoc); + String direction = DirectionUtils.getDirectionArrow(player, CrystallizedPickaxeQuest.cubeLoc); + player.sendActionBar(Component.text("§b【Cube】 §eDistance : §6" + distance + " blocs §7(" + direction + ")")); + } + }.runTaskTimer(OMCPlugin.getInstance(), 0L, 5L) ); } From 88d976906fbee1ff633acc00a60a6bfcadf5f124 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Fri, 10 Apr 2026 23:04:56 +0200 Subject: [PATCH 20/22] Review bibi 1 --- .../features/cube/listeners/CubeListener.java | 3 ++- .../core/features/dream/DreamManager.java | 20 ++----------------- .../listeners/dream/PlayerChatListener.java | 20 ------------------- .../registry/DreamMobDamageListener.java | 4 ++-- .../mecanism/singularity/SingularityMenu.java | 2 +- .../dream/milestone/DreamMilestoneDialog.java | 19 ++++++++++++++++-- .../features/dream/models/db/DreamPlayer.java | 3 ++- .../items/armors/cloud/CloudChestplate.java | 2 +- .../dream/registries/mobs/Breezy.java | 4 ++-- .../features/milestones/MilestoneQuest.java | 3 +-- 10 files changed, 30 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java diff --git a/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java index 8143c719d..0697c8e9b 100644 --- a/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java +++ b/src/main/java/fr/openmc/core/features/cube/listeners/CubeListener.java @@ -5,6 +5,7 @@ import fr.openmc.core.features.cube.events.ExitCubeZoneEvent; import fr.openmc.core.features.cube.multiblocks.MultiBlock; import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; +import fr.openmc.core.features.dream.generation.DreamDimensionManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; @@ -55,7 +56,7 @@ public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerEnterAndLeaveCubeZone(PlayerMoveEvent event) { Player player = event.getPlayer(); if (!player.getLocation().getWorld().getName().equals("world") - && !player.getLocation().getWorld().getName().equals("world_dream")) return; + && !player.getLocation().getWorld().getName().equals(DreamDimensionManager.DIMENSION_NAME)) return; boolean insideAny = false; Cube cube = null; 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 ff976c8bf..34daf093e 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamManager.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamManager.java @@ -44,15 +44,12 @@ import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; 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 { @@ -63,8 +60,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; @@ -328,19 +324,7 @@ 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/listeners/dream/PlayerChatListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java deleted file mode 100644 index d9443cea8..000000000 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerChatListener.java +++ /dev/null @@ -1,20 +0,0 @@ -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 596f9b65b..3bb3d12d2 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,7 +1,7 @@ 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.milestone.DreamMilestoneDialog; import fr.openmc.core.features.dream.models.registry.DreamMob; import fr.openmc.core.features.dream.registries.DreamMobsRegistry; import org.bukkit.Sound; @@ -43,7 +43,7 @@ public void onPlayerDamage(EntityDamageByEntityEvent event) { if (dreamMob == null) return; event.setCancelled(true); - if (DreamManager.isPlayerInMilestoneDialog(p)) return; + if (DreamMilestoneDialog.isPlayerInMilestoneDialog(p)) return; Vector kb = p.getLocation().toVector() .subtract(livingEntity.getLocation().toVector()) 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 d45c8e071..6bcc0d400 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 @@ -144,7 +144,7 @@ public void onInventoryClick(InventoryClickEvent event) { event.setCancelled(true); return; } - if (clickInPlayerInv) return; // Laisser + if (clickInPlayerInv) return; } else if (inDream) { if (!cursorDream.isTransferable()) event.setCancelled(true); } diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java index 0431b4504..c640639d9 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -1,6 +1,5 @@ package fr.openmc.core.features.dream.milestone; -import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.utils.dialog.ButtonType; import io.papermc.paper.dialog.Dialog; import io.papermc.paper.registry.data.dialog.ActionButton; @@ -13,11 +12,15 @@ import org.bukkit.entity.Player; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.function.Consumer; public class DreamMilestoneDialog { + public static final Set dreamMilestoneDialogPlayer = new HashSet<>(); + public static void send(Player player, DreamSteps step, List dialogs, int messageStep) { List body = new ArrayList<>(); @@ -39,7 +42,7 @@ public static void send(Player player, DreamSteps step, List dialogs, in .action(DialogAction.customClick((response, audience) -> { player.closeInventory(); if (dialogs.size() <= messageStep) { - DreamManager.removeMilestoneDialogPlayer(player); + removeMilestoneDialogPlayer(player); Consumer runnable = step.getQuest().getAfterDialog(); if (runnable != null) runnable.accept(player); return; @@ -51,4 +54,16 @@ public static void send(Player player, DreamSteps step, List dialogs, in ); player.showDialog(dialog); } + + 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); + } } 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 95ecc9ffe..e1514e6d0 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 @@ -12,6 +12,7 @@ import fr.openmc.core.features.dream.generation.structures.DreamStructure; import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager; import fr.openmc.core.features.dream.mecanism.cold.ColdManager; +import fr.openmc.core.features.dream.milestone.DreamMilestoneDialog; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -93,7 +94,7 @@ public void cancelTimeTask() { public void scheduleTimeTask() { this.timeTask = Bukkit.getScheduler().runTaskTimer(OMCPlugin.getInstance(), () -> { if (!player.getGameMode().equals(GameMode.SURVIVAL)) return; - if (DreamManager.isPlayerInMilestoneDialog(player)) return; + if (DreamMilestoneDialog.isPlayerInMilestoneDialog(player)) return; if (dreamTime <= 0) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> Bukkit.getServer().getPluginManager().callEvent(new DreamEndEvent(this.player)) 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 5ae10dd6d..5cb8735e6 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 @@ -3,10 +3,10 @@ import fr.openmc.core.features.dream.models.registry.items.DreamEquipableItem; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.models.registry.items.DreamRarity; +import lombok.NonNull; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import org.jspecify.annotations.NonNull; public class CloudChestplate extends DreamItem implements DreamEquipableItem { public CloudChestplate(String name) { 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 3a1768537..13aba2bde 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,9 +1,9 @@ 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.milestone.DreamMilestoneDialog; import fr.openmc.core.features.dream.models.registry.DreamMob; import fr.openmc.core.utils.ParticleUtils; import org.bukkit.*; @@ -108,7 +108,7 @@ 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; + if (DreamMilestoneDialog.isPlayerInMilestoneDialog(p)) continue; DreamUtils.removeDreamTime(p, this.getDamageTime(), true); p.setVelocity(p.getLocation().toVector().subtract(loc.toVector()).normalize().multiply(1.2).setY(0.6)); } 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 de7c70976..9af398f08 100644 --- a/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/MilestoneQuest.java @@ -1,7 +1,6 @@ package fr.openmc.core.features.milestones; import fr.openmc.core.OMCPlugin; -import fr.openmc.core.features.dream.DreamManager; import fr.openmc.core.features.dream.milestone.DreamMilestoneDialog; import fr.openmc.core.features.dream.milestone.DreamSteps; import fr.openmc.core.features.quests.objects.Quest; @@ -63,7 +62,7 @@ public MilestoneQuest(String name, List baseDescription, ItemStack icon, new QuestMethodsReward(player -> { Bukkit.getServer().getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { player.closeInventory(); - DreamManager.addMilestoneDialogPlayer(player); + DreamMilestoneDialog.addMilestoneDialogPlayer(player); DreamMilestoneDialog.send(player, step, dialogs, 1); }, 20); }) From 4b709e706fb1654597eac19fff627e31ee02569c Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Fri, 10 Apr 2026 23:15:18 +0200 Subject: [PATCH 21/22] Review bibi 2 --- .../dream/displays/DreamScoreboard.java | 2 +- .../features/dream/generation/DreamBiome.java | 17 +++++++---------- .../dream/milestone/quests/AltarQuest.java | 2 +- .../milestone/quests/CloudCastleQuest.java | 2 +- .../milestone/quests/CloudValleyQuest.java | 5 +++-- .../dream/milestone/quests/CraftsQuest.java | 3 ++- .../quests/CrystallizedPickaxeQuest.java | 12 +++++++++++- .../dream/milestone/quests/CubeTempleQuest.java | 2 +- .../dream/milestone/quests/MudBeachQuest.java | 4 ++-- .../dream/milestone/quests/SoulsQuest.java | 9 ++++++--- 10 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java index 53108870e..958f4da0e 100644 --- a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java +++ b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java @@ -74,7 +74,7 @@ public void update(Player player, SternalBoard board) { lines.add(text(" • ", NamedTextColor.DARK_GRAY) .append(text(textToSmall("biome:"), NamedTextColor.GRAY)) .appendSpace() - .append(dreamBiome.getName()) + .append(Component.text(textToSmall(dreamBiome.getName()))) ); } diff --git a/src/main/java/fr/openmc/core/features/dream/generation/DreamBiome.java b/src/main/java/fr/openmc/core/features/dream/generation/DreamBiome.java index 0610563ea..54fd75f9b 100644 --- a/src/main/java/fr/openmc/core/features/dream/generation/DreamBiome.java +++ b/src/main/java/fr/openmc/core/features/dream/generation/DreamBiome.java @@ -3,44 +3,41 @@ import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; import lombok.Getter; -import net.kyori.adventure.text.Component; import org.bukkit.NamespacedKey; import org.bukkit.Registry; import org.bukkit.block.Biome; import org.jetbrains.annotations.NotNull; -import static fr.openmc.core.utils.messages.MessagesManager.textToSmall; - @Getter public enum DreamBiome { SCULK_PLAINS( - Component.text(textToSmall("§3Plaine de Sculk")), + "§3Plaine de Sculk", NamespacedKey.fromString("openmc:sculk_plains") ), SOUL_FOREST( - Component.text(textToSmall("§5Forêt des Âmes")), + "§5Forêt des Âmes", NamespacedKey.fromString("openmc:soul_forest") ), MUD_BEACH( - Component.text(textToSmall("§8Plage de boue")), + "§8Plage de boue", NamespacedKey.fromString("openmc:mud_beach") ), CLOUD_LAND( - Component.text(textToSmall("§fVallée des Nuages")), + "§fVallée des Nuages", NamespacedKey.fromString("openmc:cloud_land") ), GLACITE_GROTTO( - Component.text(textToSmall("§bGrotte glacée")), + "§bGrotte glacée", NamespacedKey.fromString("openmc:glacite_grotto") ); private final Registry<@NotNull Biome> registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.BIOME); - private final Component name; + private final String name; private final NamespacedKey biomeKey; private final Biome biome; - DreamBiome(Component name, NamespacedKey biomeKey) { + DreamBiome(String name, NamespacedKey biomeKey) { this.name = name; this.biomeKey = biomeKey; this.biome = registry.get(biomeKey); diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java index 0d5e29493..0d559edf2 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java @@ -34,7 +34,7 @@ public AltarQuest() { List.of( "§3Voyageur : Pour obtenir de l'orbe des âmes, il te faudra...", "§6Des âmes ?!", - "§3Voyageur : Oui ! C'est ça ! Il t'en faudra §d20§3", + "§3Voyageur : Oui ! C'est ça ! Il t'en faudra §d" + SoulsQuest.SOULS + "§3", "§3Voyageur : Mais fais attention à toi, elles adorent le temps encore plus que les creakings", "§6Comment puis-je en trouver, et comment les reconnaître ?", "§3Voyageur : Regarde autour de l'autel, vers les §darbres§3. Les âmes se baladent à l'extérieur du bâtiment.", 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 index f90ebda96..6802631e4 100644 --- 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 @@ -19,7 +19,7 @@ public CloudCastleQuest() { super( "Laputa", List.of( - "§fEntrer dans le §dChâteau des Nuages", + "§fEntrer dans le §d" + DreamStructure.DreamType.CLOUD_CASTLE.getName().substring(2), "§8§oUn nouveau château à conquérir ?" ), Material.QUARTZ_PILLAR, 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 index 58439d236..82bb0ff0b 100644 --- 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 @@ -2,6 +2,7 @@ import fr.openmc.core.features.dream.events.PlayerEnterBiomeEvent; import fr.openmc.core.features.dream.generation.DreamBiome; +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; @@ -19,7 +20,7 @@ public CloudValleyQuest() { super( "Montée au septième ciel", List.of( - "§fDécouvrir la §dVallée des Nuages", + "§fDécouvrir la §d" + DreamBiome.CLOUD_LAND.getName().substring(2), "§8§oCes nuages de ce rêve doivent bien cacher quelque chose..." ), Material.SNOW_BLOCK, @@ -31,7 +32,7 @@ public CloudValleyQuest() { "§3Voyageur : Il s'agit d'une pleine d'un ancien peuple ayant dompté les forces du vent.", "§3Voyageur : Tu devrais pouvoir y trouver des §drestes de leur civilisation§3.", "§6C'est à dire ?", - "§3Voyageur : Tu as bien trouvé le Temple du Cube non ?" + "§3Voyageur : Tu as bien trouvé le " + DreamStructure.DreamType.SOUL_ALTAR.getName() + " non ?" ) ); } 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 ae18260fb..e92829924 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 @@ -1,6 +1,7 @@ package fr.openmc.core.features.dream.milestone.quests; import fr.openmc.core.features.dream.DreamUtils; +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; @@ -30,7 +31,7 @@ public CraftsQuest() { 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.", + "Pour le moment, tu ne peux qu'accéder à la §d" + DreamBiome.SCULK_PLAINS.getName().substring(2) + "§3, mais les autres biomes seront bientôt accessibles.", "§6Hmmm, cela m'intrigue. Mais tu as dit 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/CrystallizedPickaxeQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java index 13adf4f4e..b18b736e6 100644 --- 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 @@ -3,7 +3,9 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.cube.multiblocks.MultiBlockManager; import fr.openmc.core.features.dream.DreamUtils; +import fr.openmc.core.features.dream.events.DreamEnterEvent; import fr.openmc.core.features.dream.events.MetalDetectorLootEvent; +import fr.openmc.core.features.dream.generation.DreamDimensionManager; 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; @@ -25,7 +27,7 @@ public class CrystallizedPickaxeQuest extends MilestoneQuest implements Listener { - private static final Location cubeLoc = Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension("world_dream")).origin; + private static final Location cubeLoc = Objects.requireNonNull(MultiBlockManager.getMultiblockAtDimension(DreamDimensionManager.DIMENSION_NAME)).origin; public CrystallizedPickaxeQuest() { super( @@ -80,4 +82,12 @@ public void onPickUp(MetalDetectorLootEvent e) { this.incrementProgressInDream(player.getUniqueId()); } } + + @EventHandler + public void onPlayerReturnDim(DreamEnterEvent e) { + Player player = e.getPlayer(); + if (MilestonesManager.getPlayerStep(MilestoneType.DREAM, player) == DreamSteps.FIND_CUBE.ordinal()) { + this.afterDialog.accept(player); + } + } } 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 adbdf3f5b..7764ec110 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 @@ -19,7 +19,7 @@ public CubeTempleQuest() { super( "Vénérer le Cube des Ämes", List.of( - "§fEntrer dans le §dTemple des Âmes", + "§fEntrer dans le §d" + DreamStructure.DreamType.SOUL_ALTAR.getName().substring(2), "§8§oA la recherche du monument du Cube des Âmes...", "§8§oon est malgré tout dans Minecraft, même dans un rêve !" ), 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 index c761219a5..90c1036d1 100644 --- 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 @@ -20,7 +20,7 @@ public MudBeachQuest() { super( "Je préfère la plage", List.of( - "§fEntrer sur la §dPlage de Boue", + "§fEntrer sur la §d" + DreamBiome.MUD_BEACH.getName().substring(2), "§8§oProfitons de ce rêve pour aller se dorer la pilule au Soleil.", "§8§oTiens, 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 ?" @@ -33,7 +33,7 @@ public MudBeachQuest() { "§6Enfin sur la plage, et en effet, il n'y a ni sable chaud, ni soleil rayonnant, juste de la boue et... rien d'autre en fait.", "§3Voyageur : Très bien, pose-toi là, je te dois des explications.", "§3Voyageur : Ce monde, a subi une §dcatastrophe§3, d'où son apparence. Auparavant, il était si... si seulement je pouvais le revoir.", - "§6Tu m'as parlé de 5 orbes. Ceux-ci permettraient-ils de faire revenir l'ancien monde, avec un pouvoir de terraformation ?", + "§6Tu m'as parlé de cinq orbes. Ceux-ci permettraient-ils de faire revenir l'ancien monde, avec un pouvoir de terraformation ?", "§3Voyageur : Non, c'est bien plus puissant que cela. Ils permettent de créer un §dtrou de ver §3entre cette §ddimension et la tienne§3. Nous pourrons alors " + "utiliser une partie de l'§dénergie §3de ta dimension pour §dremonter le temps §3dans celle-ci, et rétablir son équilibre.", "§6Utiliser une partie de l'énergie ? Mais, cela est sans risque pour ma dimentsion ??", 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 97667d523..d3aeab72c 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 @@ -18,20 +18,23 @@ import java.util.List; public class SoulsQuest extends MilestoneQuest implements Listener { + + public static final int SOULS = 20; + public SoulsQuest() { super( "Mes amis viennent de l'au-delà", List.of( - "§fRécuérer §d20 §fâmes", + "§fRécuérer §d" + SOULS + " §fâmes", "§8§oIl me semble avoir vu des créatures", "§8§ovolantes rôder vers les grands arbres sombres." ), DreamItemRegistry.getByName("omc_dream:soul").getBest(), MilestoneType.DREAM, DreamSteps.SOULS, - new QuestTier(20), + new QuestTier(SOULS), List.of( - "§6Et de 20 ! Que dois-je faire maintenant ? Il y a un craft spécifique de l'orbe à faire ?", + "§6Et de " + SOULS + " ! Que dois-je faire maintenant ? Il y a un craft spécifique de l'orbe à faire ?", "§3Voyageur : Non, il faut simplement répéter l'incantation suivante 2 fois : §dAshkara no thari fu laq to", "§6Ashkara no thari fu laq to ! Ashkara no thari fu laq to !", "§6...pas facile à dire...", From d022825be98da236bacf0951fccdc402155774fd Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Fri, 10 Apr 2026 23:17:05 +0200 Subject: [PATCH 22/22] oubli :) --- .../core/features/dream/milestone/quests/CloudValleyQuest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 82bb0ff0b..fe9052fd8 100644 --- 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 @@ -32,7 +32,7 @@ public CloudValleyQuest() { "§3Voyageur : Il s'agit d'une pleine d'un ancien peuple ayant dompté les forces du vent.", "§3Voyageur : Tu devrais pouvoir y trouver des §drestes de leur civilisation§3.", "§6C'est à dire ?", - "§3Voyageur : Tu as bien trouvé le " + DreamStructure.DreamType.SOUL_ALTAR.getName() + " non ?" + "§3Voyageur : Tu as bien trouvé le " + DreamStructure.DreamType.SOUL_ALTAR.getName().substring(2) + " non ?" ) ); }