diff --git a/src/main/java/fr/openmc/core/OMCPlugin.java b/src/main/java/fr/openmc/core/OMCPlugin.java index c731d53a4..6bcf9bb29 100644 --- a/src/main/java/fr/openmc/core/OMCPlugin.java +++ b/src/main/java/fr/openmc/core/OMCPlugin.java @@ -158,13 +158,13 @@ public void loadWithItemsAdder() { CustomLootTableRegistry.init(); // ** FEATURES ** - MilestonesManager.init(); QuestsManager.init(); CityManager.init(); ContestManager.init(); WeeklyEventsManager.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/credits/Credits.java b/src/main/java/fr/openmc/core/features/credits/Credits.java index 8b2c448e1..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,8 @@ 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")), CITY_MILESTONE(Material.NETHER_STAR, "Le Milestone des Villes", Set.of("iambibi_")), 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..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 @@ -1,8 +1,12 @@ 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 fr.openmc.core.features.dream.generation.DreamDimensionManager; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; @@ -49,41 +53,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(DreamDimensionManager.DIMENSION_NAME)) return; 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; - 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; + cube = loopCube; if (player.getLocation().distance(center) <= radius) { 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/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/DreamManager.java b/src/main/java/fr/openmc/core/features/dream/DreamManager.java index ec28869e2..34daf093e 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamManager.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamManager.java @@ -25,6 +25,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; @@ -42,7 +44,6 @@ 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; @@ -59,7 +60,7 @@ public class DreamManager { private static final HashMap dreamPlayerData = new HashMap<>(); public static final HashMap cacheDreamPlayer = new HashMap<>(); - + private static Dao dreamPlayerDao; private static Dao savePlayerDao; @@ -81,7 +82,9 @@ public static void init() { new CloudStructureDispenserListener(), new CraftingConvertorListener(), new DreamItemEquipListener(), - new SingularityCraftListener() + new SingularityCraftListener(), + new PlayerEnterStructureListener(), + new PlayerExitStructureListener() ); // ** MANAGERS ** @@ -321,7 +324,7 @@ public static void preloadSavePlayer(Player player, Location dreamLocation) thro ) ); } - + public static void setMaxTime(Player player, long maxTime) { DBDreamPlayer cache = DreamManager.getCacheDreamPlayer(player); 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/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/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/events/AltarBindEvent.java b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java new file mode 100644 index 000000000..f095ebc44 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/AltarBindEvent.java @@ -0,0 +1,34 @@ +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.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class AltarBindEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + private final DreamItem item; + private final AltarRecipes recipe; + private final Location altarLocation; + + public AltarBindEvent(Player player, DreamItem item, AltarRecipes recipe, Location altarLocation) { + super(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 58% 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..a12ec00c2 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,23 +1,22 @@ -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; -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; - - /** - * @param player The player whose dream time has ended - */ - public AltarCraftingEvent(Player player, DreamItem craftItem) { - this.player = player; + + public AltarCraftingEvent(Player player, AltarRecipes recipe, DreamItem craftItem) { + 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 new file mode 100644 index 000000000..d5eab36f3 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/DreamEnterEvent.java @@ -0,0 +1,28 @@ +package fr.openmc.core.features.dream.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 DreamEnterEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + + /** + * @param player The player whose enter in his dream + */ + public DreamEnterEvent(Player player) { + super(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/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 new file mode 100644 index 000000000..1009d67dd --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterBiomeEvent.java @@ -0,0 +1,32 @@ +package fr.openmc.core.features.dream.events; + +import lombok.Getter; +import org.bukkit.block.Biome; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerEnterBiomeEvent extends PlayerEvent { + + private static final HandlerList HANDLERS = new HandlerList(); + private final Biome biome; + + /** + * @param player The player whose dream time has ended + */ + public PlayerEnterBiomeEvent(Player player, Biome biome) { + super(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/PlayerEnterStructureEvent.java b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java new file mode 100644 index 000000000..dc291eaa7 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerEnterStructureEvent.java @@ -0,0 +1,32 @@ +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.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerEnterStructureEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + 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) { + super(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..5392f6483 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/PlayerExitStructureEvent.java @@ -0,0 +1,32 @@ +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.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +@Getter +public class PlayerExitStructureEvent extends PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + 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) { + super(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/events/TakeFromSingularityEvent.java b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java new file mode 100644 index 000000000..15a307361 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/events/TakeFromSingularityEvent.java @@ -0,0 +1,28 @@ +package fr.openmc.core.features.dream.events; + +import lombok.Getter; +import org.bukkit.entity.Player; +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 PlayerEvent { + private static final HandlerList HANDLERS = new HandlerList(); + private final ItemStack item; + + public TakeFromSingularityEvent(Player player, ItemStack item) { + super(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/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/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/biomes/PlayerEnteredBiome.java b/src/main/java/fr/openmc/core/features/dream/listeners/biomes/PlayerEnteredBiome.java index 6f35dacdf..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 @@ -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; @@ -55,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(); @@ -80,7 +83,7 @@ public void onPlayerMove(PlayerMoveEvent event) { return; } - applyFog(player); + applyEffects(player); spawnParticles(player); }, 0L, 40L @@ -96,8 +99,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/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/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 744175869..f1b647be6 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; 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/registry/DreamMobDamageListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/registry/DreamMobDamageListener.java index 20912196c..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,6 +1,7 @@ package fr.openmc.core.features.dream.listeners.registry; 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; @@ -42,6 +43,7 @@ public void onPlayerDamage(EntityDamageByEntityEvent event) { if (dreamMob == null) return; event.setCancelled(true); + 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/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 e2a4dd274..046670d64 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/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/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(); 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..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 @@ -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; } @@ -145,10 +146,7 @@ public void onInventoryClick(InventoryClickEvent event) { } if (clickInPlayerInv) return; } 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/DreamMilestone.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java new file mode 100644 index 000000000..b9538e679 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestone.java @@ -0,0 +1,62 @@ +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.MilestoneModel; +import fr.openmc.core.features.milestones.MilestoneQuest; +import fr.openmc.core.features.milestones.MilestoneType; +import fr.openmc.core.features.milestones.menus.MilestoneMenu; +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 Dimension des Rêves"; + } + + @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/DreamMilestoneDialog.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java new file mode 100644 index 000000000..c640639d9 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamMilestoneDialog.java @@ -0,0 +1,69 @@ +package fr.openmc.core.features.dream.milestone; + +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.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<>(); + + 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.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() <= messageStep) { + removeMilestoneDialogPlayer(player); + Consumer runnable = step.getQuest().getAfterDialog(); + if (runnable != null) runnable.accept(player); + return; + } + send(player, step, dialogs, messageStep + 1); + }, ClickCallback.Options.builder().build())) + .build() + )) + ); + 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/milestone/DreamSteps.java b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java new file mode 100644 index 000000000..8ddea69bf --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/DreamSteps.java @@ -0,0 +1,70 @@ +package fr.openmc.core.features.dream.milestone; + +import fr.openmc.core.features.dream.milestone.quests.*; +import fr.openmc.core.features.milestones.MilestoneQuest; +import lombok.Getter; + +@Getter +public enum DreamSteps { + + SLEEP(null), + CRAFTS(null), + CRAFTING_TABLE(null), + CREAKING_HEART(null), + OLD_AXE(null), + CRAFT_DOMINATION_ORB(null), + CUBE_TEMPLE(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), + FIND_CUBE(null), + CRAFT_ETERNAL_FIRE(null), + GROTTO_CAMP(null), + ILLUSIONIST(null), + EWENITE(null), + GLACITE_ORB(null), + CRAFT_SINGULARITY(null), + TRANSFERABLE_OBJECT(null) + ; + + private MilestoneQuest quest; + + DreamSteps(MilestoneQuest quest) { + this.quest = quest; + } + + static { + SLEEP.quest = new SleepQuest(); + CRAFTS.quest = new CraftsQuest(); + CRAFTING_TABLE.quest = new CraftingTableQuest(); + CREAKING_HEART.quest = new CreakingHeartQuest(); + OLD_AXE.quest = new OldAxeQuest(); + CRAFT_DOMINATION_ORB.quest = new CraftDominationOrbQuest(); + CUBE_TEMPLE.quest = new CubeTempleQuest(); + 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(); + FIND_CUBE.quest = new FindCubeQuest(); + CRAFT_ETERNAL_FIRE.quest = new CraftEternalFireQuest(); + GROTTO_CAMP.quest = new GrottoCampQuest(); + ILLUSIONIST.quest = new IllusionistQuest(); + EWENITE.quest = new EweniteQuest(); + GLACITE_ORB.quest = new GlaciteOrbQuest(); + 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 new file mode 100644 index 000000000..0d559edf2 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/AltarQuest.java @@ -0,0 +1,62 @@ +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.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 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() { + 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, + MilestoneType.DREAM, + DreamSteps.ALTAR, + new QuestTier(1), + List.of( + "§3Voyageur : Pour obtenir de l'orbe des âmes, il te faudra...", + "§6Des âmes ?!", + "§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.", + "§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 §3supplémentaires par pièces d'armure équipées.", + "§3Voyageur : Tu peux également transformer ta hache à l'autel avec quelques âmes supplémentaires." + ) + ); + } + + @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(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..6802631e4 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CloudCastleQuest.java @@ -0,0 +1,49 @@ +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 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 implements Listener { + public CloudCastleQuest() { + super( + "Laputa", + List.of( + "§fEntrer dans le §d" + DreamStructure.DreamType.CLOUD_CASTLE.getName().substring(2), + "§8§oUn nouveau château à conquérir ?" + ), + Material.QUARTZ_PILLAR, + MilestoneType.DREAM, + DreamSteps.CLOUD_CASTLE, + 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 : ..." + ) + ); + } + + @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..fe9052fd8 --- /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.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 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 §d" + DreamBiome.CLOUD_LAND.getName().substring(2), + "§8§oCes nuages de ce rêve doivent bien cacher quelque chose..." + ), + Material.SNOW_BLOCK, + MilestoneType.DREAM, + DreamSteps.CLOUD_VALLEY, + new QuestTier(1), + List.of( + "§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 ?", + "§3Voyageur : Tu as bien trouvé le " + DreamStructure.DreamType.SOUL_ALTAR.getName().substring(2) + " non ?" + ) + ); + } + + @EventHandler + public void onEnterBiome(PlayerEnterBiomeEvent e) { + if (e.getBiome() != DreamBiome.CLOUD_LAND.getBiome()) 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/CraftDominationOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.java new file mode 100644 index 000000000..a62d18489 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftDominationOrbQuest.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.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 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 MilestoneQuest 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(), + MilestoneType.DREAM, + DreamSteps.CRAFT_DOMINATION_ORB, + new QuestTier(1), + List.of( + "§6Voilà l'orbe, que dois-je faire avec ?", + "§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..." + ) + ); + } + + @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 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..c0bd7d02e --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftEternalFireQuest.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.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 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( + "§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.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 §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 §dcamps §3présents dans les §dgrottes des profondeurs§3." + ) + ); + } + + @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/CraftSingularityQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java new file mode 100644 index 000000000..8f8549f9d --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftSingularityQuest.java @@ -0,0 +1,78 @@ +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.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; +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.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; +import java.util.Objects; + +public class CraftSingularityQuest extends MilestoneQuest implements Listener { + + public CraftSingularityQuest() { + super( + "La finalité ?", + List.of( + "§fCrafter la §dSingularité", + "§8§oLes orbes n'auraient-ils pas une utilité finale ?" + ), + DreamItemRegistry.getByName("omc_dream:singularity").getBest(), + MilestoneType.DREAM, + DreamSteps.CRAFT_SINGULARITY, + 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 §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 §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\".", + "§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..." + ) + ); + } + + @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 new file mode 100644 index 000000000..89c08a728 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CraftingTableQuest.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.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 org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.Recipe; + +import java.util.List; + +public class CraftingTableQuest extends MilestoneQuest implements Listener { + public CraftingTableQuest() { + super( + "Une nouvelle survie ?", + List.of( + "§fFabriquer une §dtable de craft", + "§8§oBizarre cette survie de nuit...", + "§8§oon ne voit pas en dehors des pleines de sculks" + ), + Material.CRAFTING_TABLE, + MilestoneType.DREAM, + DreamSteps.CRAFTING_TABLE, + 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 œ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 ?", + "§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." + ) + ); + } + + @EventHandler + public void onCraft(CraftItemEvent e) { + if (e.getWhoClicked() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) 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 new file mode 100644 index 000000000..e92829924 --- /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.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 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 MilestoneQuest 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,", + "§8§oje dois les apprendre pour y survivre" + ), + Material.BOOK, + MilestoneType.DREAM, + DreamSteps.CRAFTS, + 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 §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." + ) + ); + } + + @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(getType(), player) != getStep().ordinal()) return; + this.incrementProgressInDream(player.getUniqueId()); + } +} 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 new file mode 100644 index 000000000..6d8144ec9 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CreakingHeartQuest.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.CreakingHeart; +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 org.bukkit.event.entity.EntityPickupItemEvent; + +import java.util.List; + +public class CreakingHeartQuest extends MilestoneQuest implements Listener { + + public CreakingHeartQuest() { + 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, + MilestoneType.DREAM, + DreamSteps.CREAKING_HEART, + new QuestTier(1), + List.of( + "§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...", + "§6Comment ça \"finir comme toi\" ?", + "§3Voyageur : Tu comprendras. Pour éviter cela, il faut continuer, fais-toi une hache pour le moment." + ) + ); + } + + @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(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..b18b736e6 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CrystallizedPickaxeQuest.java @@ -0,0 +1,93 @@ +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.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; +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.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(DreamDimensionManager.DIMENSION_NAME)).origin; + + public CrystallizedPickaxeQuest() { + super( + "Bonne pioche", + List.of( + "§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), + List.of( + "§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: " + + 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) + ); + } + + @EventHandler + 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()); + } + } + + @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 new file mode 100644 index 000000000..7764ec110 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/CubeTempleQuest.java @@ -0,0 +1,51 @@ +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 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 MilestoneQuest implements Listener { + public CubeTempleQuest() { + super( + "Vénérer le Cube des Ämes", + List.of( + "§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 !" + ), + Material.POLISHED_BLACKSTONE_BRICKS, + MilestoneType.DREAM, + DreamSteps.CUBE_TEMPLE, + new QuestTier(1), + List.of( + "§3Voyageur : Sache qu'il s'agit d'un autel qui a été érigé pour...", + "§6Pour ?", + "§3Voyageur : ...", + "§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 §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." + ) + ); + } + + @EventHandler + public void onCastleEnter(PlayerEnterStructureEvent e) { + if (e.getStructure().type() != DreamStructure.DreamType.SOUL_ALTAR) 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/EweniteQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java new file mode 100644 index 000000000..5968c6018 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/EweniteQuest.java @@ -0,0 +1,65 @@ +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; +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 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", + "§8§oUn nouveau minerai à exploiter.", + "§8§oBizarre, ce nom m'est familier." + ), + DreamItemRegistry.getByName("omc_dream:ewenite").getBest(), + MilestoneType.DREAM, + DreamSteps.EWENITE, + 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 §dPioche mécanique §3si tu le souhaites, ça sera plus rapide." + ) + ); + } + + @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()); + } + } + } + + @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 new file mode 100644 index 000000000..cc8afc70a --- /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 §dCube", + "§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 §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, à §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 §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 à §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 : §dles grottes§3." + ) + ); + } + + @EventHandler + public void onEnterCubeZone(EnterCubeZoneEvent e) { + 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 new file mode 100644 index 000000000..52f1b2e3e --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GlaciteOrbQuest.java @@ -0,0 +1,49 @@ +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 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", + "§8§oDernière ligne droite pour les collecter toutes." + ), + DreamItemRegistry.getByName("omc_dream:glacite_orb").getBest(), + MilestoneType.DREAM, + DreamSteps.GLACITE_ORB, + 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 §dcombiner§3.", + "§6Les combiner ? Pas d'incantation cette fois ?", + "§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." + ) + ); + } + + @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..6b1fee1ca --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/GrottoCampQuest.java @@ -0,0 +1,49 @@ +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 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", + "§8§oIl n'y a pas de Transperceneige mais,", + "§8§oy aurait-il, une zone protégée." + ), + Material.DEEPSLATE, + MilestoneType.DREAM, + DreamSteps.GROTTO_CAMP, + 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 à 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'§dOrbe de Glace §3a permis à ce marchant de survivre, mais à quel prix..." + ) + ); + } + + @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..71d40447c --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/IllusionistQuest.java @@ -0,0 +1,52 @@ +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.utils.ItemUtils; +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 le §dmarchand", + "§8§oS'il y a des feux allumés,", + "§8§oc'est qu'il y a de la vie dans le coin." + ), + 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 §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 §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." + ) + ); + } + + @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..145f748ad --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/KillBreezyQuest.java @@ -0,0 +1,70 @@ +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.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.CloudOrb; +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 org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.Objects; + +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", + "§8§ode Poncahontas, ou alors c'est Elsa ?" + ), + Material.WIND_CHARGE, + MilestoneType.DREAM, + DreamSteps.KILL_BREEZY, + 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 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'§dArmure des Nuages§3, qui te donnera §d" + + ((DreamEquipableItem) Objects.requireNonNull(DreamItemRegistry.getByName("omc_dream:cloud_chestplate"))).getAdditionalMaxTime() + + " 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 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 onCollectOrb(EntityPickupItemEvent e) { + if (e.getEntity() instanceof Player player) { + if (!DreamUtils.isInDreamWorld(player)) return; + if (!DreamStructuresManager.isInsideStructure(player.getLocation(), DreamStructure.DreamType.CLOUD_CASTLE)) return; + + 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(), 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 new file mode 100644 index 000000000..6ba380363 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MetalDetectorQuest.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.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 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 MetalDetectorQuest extends MilestoneQuest implements Listener { + + public MetalDetectorQuest() { + super( + "Coooooooaaaaaaa", + List.of( + "§fRécupérer le §ddé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), + 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 §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 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(), 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 new file mode 100644 index 000000000..90c1036d1 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/MudBeachQuest.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.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 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 §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 ?" + ), + Material.MUD, + MilestoneType.DREAM, + DreamSteps.MUD_BEACH, + 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 §dcatastrophe§3, d'où son apparence. Auparavant, il était si... si seulement je pouvais le revoir.", + "§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 ??", + "§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." + ) + ); + } + + @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..210458c0e --- /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.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; +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 org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class MudOrbQuest extends MilestoneQuest implements Listener { + + public MudOrbQuest() { + super( + "Bip Biip Biiiiiiip", + List.of( + "§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, + DreamSteps.MUD_ORB, + 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 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 §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())) + DreamSteps.CRYSTALLIZED_PICKAXE.getQuest().incrementProgressInDream(player.getUniqueId()); + } + ); + } + + @EventHandler + 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 new file mode 100644 index 000000000..adf2d7613 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/OldAxeQuest.java @@ -0,0 +1,60 @@ +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; +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.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; +import java.util.Objects; + +public class OldAxeQuest extends MilestoneQuest 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").getBest(), + MilestoneType.DREAM, + DreamSteps.OLD_AXE, + new QuestTier(1), + List.of( + "§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 §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." + ) + ); + } + + @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(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 new file mode 100644 index 000000000..4fa8ac2c9 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SleepQuest.java @@ -0,0 +1,50 @@ +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.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 SleepQuest extends MilestoneQuest 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", + "§8§ose reposer de la dure vie des villes..." + ), + Material.RED_BED, + MilestoneType.DREAM, + DreamSteps.SLEEP, + 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...", + "§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 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." + ) + ); + } + + @EventHandler + public void onDreamEnter(DreamEnterEvent e) { + 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/SoulOrbQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java new file mode 100644 index 000000000..e4b4a60a7 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulOrbQuest.java @@ -0,0 +1,59 @@ +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.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.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.List; + +public class SoulOrbQuest extends MilestoneQuest 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,", + "§8§od'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), + 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 §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 §dce monde§3." + ) + ); + } + + @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(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 new file mode 100644 index 000000000..d3aeab72c --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/SoulsQuest.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.loots.Soul; +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.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 MilestoneQuest implements Listener { + + public static final int SOULS = 20; + + public SoulsQuest() { + super( + "Mes amis viennent de l'au-delà", + List.of( + "§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(SOULS), + List.of( + "§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...", + "§3Voyageur : Ahah, en réalité, il te faut simplement intéragir à nouveau avec l'§dOrbe de Domination sur l'§dAltar§3." + ) + ); + } + + @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(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..3b08f35d6 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.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.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", + "§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, + DreamSteps.TRANSFERABLE_OBJECT, + new QuestTier( + 1, + 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) + ) + ); + } + + @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/dream/models/db/DreamPlayer.java b/src/main/java/fr/openmc/core/features/dream/models/db/DreamPlayer.java index 530c48d22..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; @@ -20,6 +21,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 +93,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)) return; + if (DreamMilestoneDialog.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); } @@ -122,6 +125,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/dream/models/registry/DreamEnchantment.java b/src/main/java/fr/openmc/core/features/dream/models/registry/DreamEnchantment.java index 5b5d4548a..457610917 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 @@ -16,13 +16,14 @@ 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 extends CustomEnchantment { 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 005530dc6..86830a829 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 @@ -5,6 +5,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; 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 9b173bef8..2823f71ca 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public CloudBoots(String name) { @@ -38,7 +39,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 036841bd3..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,6 +3,7 @@ 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; @@ -38,7 +39,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 7ac2342cc..a0c31d27b 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public CloudHelmet(String name) { @@ -38,7 +39,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 8c301d4ab..a4a584922 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public CloudLeggings(String name) { @@ -38,7 +39,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 a84339ecf..4a4f94ff0 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public ColdBoots(String name) { @@ -38,7 +39,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 05058bfb0..886bc2dbf 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public ColdChestplate(String name) { @@ -38,7 +39,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 8f9d08a9c..3035e32a9 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public ColdHelmet(String name) { @@ -38,7 +39,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 101e34617..b40644729 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public ColdLeggings(String name) { @@ -38,7 +39,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 fede1e33f..a992cbc88 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public OldCreakingBoots(String name) { @@ -38,7 +39,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 2c9ab5fa1..d99783ab5 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public OldCreakingChestplate(String name) { @@ -38,7 +39,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 67c0c2c8e..5e6c6f5b5 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public OldCreakingHelmet(String name) { @@ -38,7 +39,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 e715c1a01..fb1e78996 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public OldCreakingLeggings(String name) { @@ -38,7 +39,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 572e433c0..79115a7da 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 @@ -7,6 +7,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -45,7 +46,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 c247a2425..476b00c29 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 @@ -7,6 +7,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -44,7 +45,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 f60d7b48c..5d54992cf 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 @@ -7,6 +7,7 @@ import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.jspecify.annotations.NonNull; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -44,7 +45,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 f97752e62..9f5c0f1ea 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 @@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; - +import org.jspecify.annotations.NonNull; import java.util.HashMap; import java.util.Set; @@ -44,7 +44,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 bf22292ef..6a409a63c 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public SoulBoots(String name) { @@ -38,7 +39,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 89ec069e4..0d36bfe4c 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public SoulChestplate(String name) { @@ -38,7 +39,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 214e182b9..5df586c26 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public SoulHelmet(String name) { @@ -38,7 +39,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 ecb0cedbf..e482d0807 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 @@ -6,6 +6,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 DreamItem implements DreamEquipableItem { public SoulLeggings(String name) { @@ -38,7 +39,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/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/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/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/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 825929a5c..fd775b8f1 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 @@ -9,6 +9,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 DreamItem implements UsableItem { public Singularity(String name) { @@ -31,7 +32,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 51aaa320f..9d18b009b 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 @@ -16,6 +16,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; @@ -43,7 +44,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 737188db1..fe4cde02b 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 @@ -17,6 +17,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 DreamItem implements UsableItem { private static final long COOLDOWN_METEO_WAND = 8 * 60 * 60 * 1000L; // 2 jours @@ -40,7 +41,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 16f619070..16863664b 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..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 @@ -3,6 +3,7 @@ import fr.openmc.core.OMCPlugin; 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.*; @@ -66,6 +67,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)); @@ -106,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 (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)); } } - charge.remove(); } } \ No newline at end of file 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/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 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..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,30 +1,93 @@ package fr.openmc.core.features.milestones; +import fr.openmc.core.OMCPlugin; +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; 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; + 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); + + } + + public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, Enum step, QuestTier quest) { super(name, baseDescription, icon); this.type = type; this.step = step; this.addTier(quest.addReward( new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)) )); + this.afterDialog = null; } - public MilestoneQuest(String name, List baseDescription, ItemStack icon, MilestoneType type, Enum step, QuestTier quest) { - this(name, baseDescription, icon.getType(), type, step, quest); + 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) { + 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; + this.dialogs = dialogs; + this.addTier(quest.addRewards( + new QuestMethodsReward(player -> MilestoneUtils.completeStep(type, player, step)), + new QuestMethodsReward(player -> { + Bukkit.getServer().getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { + player.closeInventory(); + DreamMilestoneDialog.addMilestoneDialogPlayer(player); + DreamMilestoneDialog.send(player, step, dialogs, 1); + }, 20); + }) + )); + this.afterDialog = afterDialog; + } + + /** + * 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/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 6979f390f..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,20 +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 boosBar; + private final boolean bossBar; MilestoneType(Milestone milestone, boolean bossBar) { this.milestone = milestone; - this.boosBar = bossBar; + this.bossBar = bossBar; } } 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 fe9bc5672..36b5c0d2a 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()) { int step = playerData.getValue().getStep(); @@ -174,7 +176,6 @@ public static void registerMilestone(Milestone milestone) { 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 7ec4785a0..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 @@ -7,6 +7,7 @@ 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; @@ -51,20 +52,16 @@ public void onInventoryClick(InventoryClickEvent click) { public @NotNull Map getContent() { Map inventory = new HashMap<>(); 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(); - })); - } - }); - - 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(inventoryClickEvent -> 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!")); @@ -81,25 +78,27 @@ public void onInventoryClick(InventoryClickEvent click) { loreMilestoneVille.add(Component.empty()); loreMilestoneVille.add(Component.text("§e§lCLIQUEZ ICI POUR ACCEDER A VOTRE MILESTONE")); } - - inventory.put(12, new ItemBuilder(this, Material.SCULK, itemMeta -> { - itemMeta.displayName(Component.text(" §kd §r§cComming soon §kr")); - })); - - 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 -> { + }).setOnClick(inventoryClickEvent -> { if (playerCity == null) { new NoCityMenu(player).open(); } else { new CityMilestoneMenu(player, playerCity).open(); } })); - - inventory.put(16, new ItemBuilder(this, Material.DEAD_BUBBLE_CORAL_BLOCK, itemMeta -> { - itemMeta.displayName(Component.text(" §ks §cComming soon §ke")); - })); + + 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(inventoryClickEvent -> dreamMilestone.getMenu(player).open())); + + 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/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/features/milestones/tutorial/quests/CityCreateQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java index bdaf28170..c2053abe0 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 @@ -6,6 +6,7 @@ import fr.openmc.core.features.city.events.MemberJoinEvent; 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.milestones.tutorial.TutorialStep; import fr.openmc.core.features.quests.objects.QuestTier; 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 e38f616cf..72ad7f0e2 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 @@ -489,8 +489,19 @@ 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 of the quest for a player by a specified amount. @@ -498,8 +509,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); @@ -508,7 +520,7 @@ public void incrementProgress(UUID playerUUID, int amount) { if (onlinePlayer == null) return; if (!onlinePlayer.isOnline()) return; if ((!onlinePlayer.getGameMode().equals(GameMode.SURVIVAL) - || DreamUtils.isInDreamWorld(onlinePlayer))) return; + || (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/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/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 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 6b3309d6b..3f5711d2b 100644 --- a/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java +++ b/src/main/java/fr/openmc/core/utils/database/DatabaseManager.java @@ -75,6 +75,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); 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; 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); + } }