Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4ca58d8
Dream Milestone Part.1
Feb 10, 2026
c991f9d
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Feb 10, 2026
01c6a4f
Merge branch 'master' into feat/dream_milestone
Feb 11, 2026
809dc11
Petites améliorations
Feb 11, 2026
5c790f3
Continue milestone
Feb 11, 2026
820c57c
Dream Milestone part. 2
Feb 16, 2026
0c1de21
Dream Milestone part. 3
Feb 18, 2026
9292644
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Feb 21, 2026
75026d3
Merge branch 'master' into feat/dream_milestone
Mar 5, 2026
76cebd6
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 13, 2026
ef163ee
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 14, 2026
05aedca
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 19, 2026
4f4f7f5
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 20, 2026
1b7d3f7
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 28, 2026
9a79589
Review bibi -> changing menu
Mar 28, 2026
bacd464
Review bibi -> added todo
Mar 28, 2026
4f16389
Review bibi -> moved dream milestone dialog
Mar 28, 2026
e428922
Finished story
Mar 29, 2026
d0bcf64
Resolved build & test errors
Mar 29, 2026
787892b
Resolved build & test errors 2
Mar 29, 2026
a64b414
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Mar 30, 2026
ab6282a
Merge branch 'ServerOpenMC:master' into feat/dream_milestone
gab4000 Apr 5, 2026
8439314
Ajout des crédits
Apr 8, 2026
d643354
Update credits
Apr 9, 2026
cabcaff
Removing milestone call before dreamdim
Apr 9, 2026
02afb43
Modified cube to implement in milestone
Apr 9, 2026
45176a2
Patch NullPointerException in cold calculation
Apr 9, 2026
989d783
Added admin command to show dialogs and refactor dialog logic
Apr 9, 2026
f160f20
Finished milestone
Apr 9, 2026
4771a59
Added cube GPS
Apr 9, 2026
88d9769
Review bibi 1
Apr 10, 2026
4b709e7
Review bibi 2
Apr 10, 2026
d022825
oubli :)
Apr 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/fr/openmc/core/OMCPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/fr/openmc/core/features/credits/Credits.java
Original file line number Diff line number Diff line change
Expand Up @@ -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_")),
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}
11 changes: 7 additions & 4 deletions src/main/java/fr/openmc/core/features/dream/DreamManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -59,7 +60,7 @@ public class DreamManager {

private static final HashMap<UUID, DreamPlayer> dreamPlayerData = new HashMap<>();
public static final HashMap<UUID, DBDreamPlayer> cacheDreamPlayer = new HashMap<>();

private static Dao<DBDreamPlayer, String> dreamPlayerDao;
private static Dao<DBPlayerSave, String> savePlayerDao;

Expand All @@ -81,7 +82,9 @@ public static void init() {
new CloudStructureDispenserListener(),
new CraftingConvertorListener(),
new DreamItemEquipListener(),
new SingularityCraftListener()
new SingularityCraftListener(),
new PlayerEnterStructureListener(),
new PlayerExitStructureListener()
);

// ** MANAGERS **
Expand Down Expand Up @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/fr/openmc/core/features/dream/DreamUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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<String> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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<BukkitCommandActor> {
@Override
public @NotNull Collection<String> getSuggestions(@NotNull ExecutionContext<BukkitCommandActor> context) {
return Arrays.stream(DreamSteps.values()).map(Enum::name).toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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())))
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Loading
Loading