Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
6fcfdb3
Fix soul chestplate altar crafting
iambibi Feb 17, 2026
d89c65f
Change SoulAxe rarity from COMMON to RARE
iambibi Feb 18, 2026
728e677
Correctif de la possibilité de se faire de l'argent a l'infini (#1158)
iambibi Feb 24, 2026
d139ae9
fix: incorrect singularity transfer (#1157)
iambibi Feb 24, 2026
e6b919e
Refonte du principe pour aller dans la dimension des rêves (#1156)
iambibi Feb 27, 2026
7d3a0d5
Merge branch 'v2.5' into master
iambibi Feb 27, 2026
d23de02
fix: metal detector chest spawning only in +x +z direction (#1169)
gtolontop Mar 11, 2026
ba318cd
Add tests methods in contributing.md
iambibi Mar 13, 2026
356a7c6
Update CONTRIBUTING.md
iambibi Mar 13, 2026
716d7fd
Update CONTRIBUTING.md
iambibi Mar 13, 2026
505a0a4
fix Double is null (#1192)
iambibi Mar 14, 2026
295a8b5
fix if milestone was finished (#1193)
iambibi Mar 14, 2026
96be457
Update target path for OpenMC.jar in workflow
iambibi Mar 17, 2026
8dd759f
Add sleeping npc at sleeping location of player when dream
iambibi Mar 17, 2026
07e2e5e
Update pterodactyl-upload-action to version 2.5
iambibi Mar 17, 2026
eca0239
Add command to restart OpenMC after deployment
iambibi Mar 17, 2026
7fe9d24
add more sfx (leave/enter) + rework of methods in ParticleUtils
iambibi Mar 17, 2026
54ce73e
Update source path for OpenMC.jar in workflow
iambibi Mar 17, 2026
2bdef01
add more sfx (singularity crafting, leave, enter) + move all dream li…
iambibi Mar 18, 2026
c7fc667
add more sfx (orb obtain)
iambibi Mar 18, 2026
0e66155
Update source path for OpenMC.jar in workflow
iambibi Mar 18, 2026
23971f8
Update source path for OpenMC.jar in workflow
iambibi Mar 18, 2026
55752e5
Update target path in milestone-close.yml
iambibi Mar 18, 2026
c6d6fb3
Update milestone-close.yml
iambibi Mar 18, 2026
9960b1f
Downgrade pterodactyl-upload-action version to v2.4
iambibi Mar 18, 2026
2dde494
Update milestone-close.yml
iambibi Mar 18, 2026
5c5c72d
Update milestone-close.yml
iambibi Mar 18, 2026
2aed8d7
Update milestone-close.yml
iambibi Mar 18, 2026
da65aeb
add different pose in case if player is sleeping or fallback case sit…
iambibi Mar 18, 2026
268ae90
equilibrate sfx
iambibi Mar 18, 2026
34647d5
improve data particle in ParticleUtils, fixes particles, sfx ...
iambibi Mar 19, 2026
59ff3a2
Merge branch 'master' into feat/sfx-dream
iambibi Mar 19, 2026
3d678f2
Merge remote-tracking branch 'upstream/v2.5' into feat/sfx-dream
iambibi Mar 19, 2026
8a052ef
build: fix
iambibi Mar 19, 2026
503ae98
buuild :fix
iambibi Mar 19, 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
4 changes: 2 additions & 2 deletions .github/workflows/milestone-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ jobs:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}

- name: Deploy to server
uses: rexlmanu/pterodactyl-upload-action@v2.4
uses: blobles-dev/pterodactyl-upload-action@pterodactyl-file-upload-modification-allow-http-200-fileupload
with:
panel-host: ${{ secrets.PANEL_HOST }}
api-key: ${{ secrets.API_KEY }}
server-id: ${{ secrets.SERVER_ID }}
source: builds/OpenMC.jar
target: "./plugins/OpenMC.jar"
target: "./plugins/update/"
2 changes: 2 additions & 0 deletions src/main/java/fr/openmc/api/hooks/FancyNpcsHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ public class FancyNpcsHook {
@Getter
private static boolean hasFancyNpc = false;

public static long FANCY_INIT_DELAY = 20L * 30; // 30 seconds

public static void init() {
hasFancyNpc = Bukkit.getPluginManager().isPluginEnabled("FancyNpcs");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,8 @@ private static void showChunkBorders(@NotNull Player player, @NotNull ChunkPos c
particleLocations.forEach(location ->
ParticleUtils.sendParticlePacket(
player,
location,
particle,
location,
1,
0D, 0D, 0D,
0D,
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/fr/openmc/core/features/dream/DreamManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,15 @@
import fr.openmc.core.features.dream.generation.listeners.CloudStructureDispenserListener;
import fr.openmc.core.features.dream.generation.listeners.ReplaceBlockListener;
import fr.openmc.core.features.dream.generation.structures.DreamStructuresManager;
import fr.openmc.core.features.dream.listeners.biomes.PlayerEnteredBiome;
import fr.openmc.core.features.dream.listeners.dream.*;
import fr.openmc.core.features.dream.listeners.orb.PlayerObtainOrb;
import fr.openmc.core.features.dream.listeners.others.CraftingConvertorListener;
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.CraftingConvertorListener;
import fr.openmc.core.features.dream.listeners.registry.DreamItemEquipListener;
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;
import fr.openmc.core.features.dream.mecanism.rng.DreamLootListener;
import fr.openmc.core.features.dream.mecanism.sfx.PlayerCloneNpc;
import fr.openmc.core.features.dream.mecanism.singularity.SingularityCraftListener;
import fr.openmc.core.features.dream.mecanism.singularity.SingularityManager;
import fr.openmc.core.features.dream.mecanism.tradernpc.GlaciteNpcManager;
import fr.openmc.core.features.dream.models.db.DBDreamPlayer;
Expand All @@ -43,7 +41,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 Down Expand Up @@ -90,6 +87,7 @@ public static void init() {
// ** MANAGERS **
DreamDimensionManager.init();
GlaciteNpcManager.init();
PlayerCloneNpc.init();
DreamStructuresManager.init();
DreamItemRegistry.init();
DreamLootTableRegistry.init();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete;
import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.listeners.orb.PlayerObtainOrb;
import fr.openmc.core.features.dream.listeners.dream.PlayerObtainOrb;
import fr.openmc.core.features.dream.models.db.DBDreamPlayer;
import fr.openmc.core.features.dream.models.db.DreamPlayer;
import org.bukkit.entity.Player;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
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.mecanism.sfx.PlayerCloneNpc;
import fr.openmc.core.features.dream.models.db.DreamPlayer;
import fr.openmc.core.utils.ParticleUtils;
import org.bukkit.Bukkit;
import org.bukkit.Particle;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.Player;
import org.bukkit.entity.Pose;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerTeleportEvent;
Expand Down Expand Up @@ -44,6 +50,13 @@ public void onDreamEntrered(PlayerTeleportEvent event) {
AttributeInstance inst = player.getAttribute(Attribute.MAX_HEALTH);
if (inst == null) return;
player.setHealth(inst.getBaseValue());

// * SFX
sendSFX(player);
if (PlayerCloneNpc.getCloneNpc(player) == null)
PlayerCloneNpc.createCloneNpc(player, player.getLocation(), Pose.SITTING);
Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () ->
sendSFX(player), 20);
}

@EventHandler
Expand All @@ -62,5 +75,16 @@ public void onDreamLeave(PlayerTeleportEvent event) {
BossbarManager.removeBossBar(BossbarsType.DREAM, player);

DreamManager.removeDreamPlayer(player, event.getFrom());

// * SFX
sendSFX(player);
Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () ->
sendSFX(player), 20);
}

private void sendSFX(Player player) {
// * SFX
ParticleUtils.sendParticlePacket(Particle.FLASH, player.getLocation().add(0, 1, 0), 15);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.REVERSE_PORTAL, 20, 15, 1, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.events.DreamEndEvent;
import fr.openmc.core.features.dream.mecanism.sfx.PlayerCloneNpc;
import fr.openmc.core.features.dream.models.db.DreamPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand All @@ -13,6 +14,7 @@ public class PlayerDreamTimeEndListener implements Listener {
public void onTimeEnd(DreamEndEvent event) {
Player player = event.getPlayer();

PlayerCloneNpc.deleteCloneNpc(player);
DreamPlayer dreamPlayer = DreamManager.getDreamPlayer(player);

if (dreamPlayer == null) return;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.openmc.core.features.dream.listeners.others;
package fr.openmc.core.features.dream.listeners.dream;

import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.DreamUtils;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.openmc.core.features.dream.listeners.biomes;
package fr.openmc.core.features.dream.listeners.dream;

import fr.openmc.core.OMCPlugin;
import fr.openmc.core.features.dream.DreamManager;
Expand Down Expand Up @@ -103,8 +103,8 @@ private void applyFog(Player player) {
private void spawnParticles(Player player) {
ParticleUtils.sendParticlePacket(
player,
player.getLocation(),
Particle.CLOUD,
player.getLocation(),
100, 1.0, 1.0, 1.0, 0.1, null
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.DreamUtils;
import fr.openmc.core.features.dream.listeners.orb.PlayerObtainOrb;
import fr.openmc.core.features.dream.models.db.DBDreamPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package fr.openmc.core.features.dream.listeners.orb;
package fr.openmc.core.features.dream.listeners.dream;

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.GlaciteTradeEvent;
import fr.openmc.core.features.dream.events.MetalDetectorLootEvent;
import fr.openmc.core.features.dream.generation.DreamBiome;
Expand All @@ -12,19 +11,18 @@
import fr.openmc.core.features.dream.models.db.DreamPlayer;
import fr.openmc.core.features.dream.models.registry.items.DreamItem;
import fr.openmc.core.features.dream.registries.DreamItemRegistry;
import fr.openmc.core.utils.ParticleUtils;
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.Keyed;
import org.bukkit.NamespacedKey;
import org.bukkit.Particle;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe;

public class PlayerObtainOrb implements Listener {
private final int SCULK_PLAINS_ORB = 1;
Expand All @@ -34,20 +32,21 @@ public class PlayerObtainOrb implements Listener {
private final int GLACITE_GROTTO_ORB = 5;

@EventHandler
public void onCraft(PrepareItemCraftEvent event) {
Recipe recipe = event.getRecipe();
if (recipe == null) return;
if (event.getViewers().isEmpty()) return;
public void onCraft(CraftItemEvent event) {
ItemStack item = event.getCurrentItem();
if (item == null) return;

Player player = (Player) event.getViewers().getFirst();
DreamItem dreamItem = DreamItemRegistry.getByItemStack(item);
if (dreamItem == null) return;
if (!(event.getWhoClicked() instanceof Player player)) return;

if (!DreamUtils.isInDream(player)) return;
if (!(recipe instanceof Keyed keyed)) return;
if (!dreamItem.getName().equals("omc_dream:domination_orb")) return;

NamespacedKey key = keyed.getKey();
if (key.toString().contains("omc_dream") && key.toString().contains("domination_orb")) { // contains beacuse key is ex zzzfake_omc_items:aywenite
setProgressionOrb(player, SCULK_PLAINS_ORB, DreamBiome.SOUL_FOREST);
}
setProgressionOrb(player, SCULK_PLAINS_ORB, DreamBiome.SOUL_FOREST);

// * SFX
player.getWorld().playSound(player.getLocation(), "minecraft:entity.wither.spawn", 1f, 2f);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.TRIAL_SPAWNER_DETECTION, 15, 15, 0.5, null);
}

@EventHandler
Expand All @@ -60,6 +59,10 @@ public void onAltarCraft(AltarCraftingEvent event) {
Player player = event.getPlayer();

setProgressionOrb(player, SOUL_FOREST_ORB, DreamBiome.CLOUD_LAND);

// * SFX
player.getWorld().playSound(player.getLocation(), "minecraft:entity.wither.spawn", 1f, 2f);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.SCULK_SOUL, 15, 15, 0.5, null);
}

@EventHandler
Expand All @@ -73,6 +76,10 @@ public void onCloudOrbDispense(EntityPickupItemEvent event) {
if (!dreamItem.getName().equals("omc_dream:cloud_orb")) return;

setProgressionOrb(player, CLOUD_CASTLE_ORB, DreamBiome.MUD_BEACH);

// * SFX
player.getWorld().playSound(player.getLocation(), "minecraft:entity.wither.spawn", 1f, 2f);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.GUST, 15, 15, 0.5, null);
}

@EventHandler
Expand All @@ -86,6 +93,10 @@ public void onMetalDetectorLoot(MetalDetectorLootEvent event) {
if (!dreamItem.getName().equals("omc_dream:mud_orb")) continue;

setProgressionOrb(player, MUD_BEACH_ORB, DreamBiome.GLACITE_GROTTO);

// * SFX
player.getWorld().playSound(player.getLocation(), "minecraft:entity.wither.spawn", 1f, 2f);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.ASH, 15, 15, 0.5, null);
break;
}
}
Expand All @@ -97,6 +108,10 @@ public void onGlaciteTrade(GlaciteTradeEvent event) {
if (!event.getTrade().equals(GlaciteTrade.ORB_GLACITE)) return;

setProgressionOrb(player, GLACITE_GROTTO_ORB, null);

// * SFX
player.getWorld().playSound(player.getLocation(), "minecraft:entity.wither.spawn", 1f, 2f);
ParticleUtils.spawnDispersingParticles(player.getLocation(), Particle.SNOWFLAKE, 15, 15, 0.5, null);
}

public static void setProgressionOrb(Player player, int progressionOrb, DreamBiome unlocked) {
Expand All @@ -122,6 +137,21 @@ public static void setProgressionOrb(Player player, int progressionOrb, DreamBio
DreamManager.saveDreamPlayerData(cache);
if (unlocked != null)
sendMessageProgression(player, unlocked);
sendBroadcastMessageOrb(player, progressionOrb);
}

private static void sendBroadcastMessageOrb(Player player, int progressionOrb) {
String strOrb;
switch (progressionOrb) {
case 1 -> strOrb = "l'Orbe de Domination";
case 2 -> strOrb = "l'Orbe des Ames";
case 3 -> strOrb = "l'Orbe des Nuages";
case 4 -> strOrb = "l'Orbe de Boue";
case 5 -> strOrb = "l'Orbe Glaciale";
default -> strOrb = "une Orbe Inconnu";
}

MessagesManager.broadcastMessage(player.getWorld(), Component.text(player.getName() + " a obtenu " + strOrb + " !"), Prefix.DREAM, MessageType.INFO);
}

private static void sendMessageProgression(Player player, DreamBiome biome) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.DreamUtils;
import fr.openmc.core.features.dream.mecanism.sfx.PlayerCloneNpc;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
Expand All @@ -16,6 +17,8 @@ public void onPlayerQuitWhenDream(PlayerQuitEvent event) {

if (!DreamUtils.isInDream(player)) return;

if (PlayerCloneNpc.getCloneNpc(player) != null)
PlayerCloneNpc.deleteCloneNpc(player);
DreamManager.removeDreamPlayer(player, player.getLocation());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import fr.openmc.core.OMCPlugin;
import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dream.mecanism.sfx.PlayerCloneNpc;
import fr.openmc.core.features.dream.models.db.DBDreamPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.entity.Pose;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerBedEnterEvent;
Expand All @@ -25,7 +27,7 @@ public class PlayerSleepListener implements Listener {

private final Set<Player> isPlayerSleeping = new HashSet<>();
private final int DREAM_TELEPORT_DELAY = 20 * 3;

@EventHandler
public void onPlayerEnterBed(PlayerBedEnterEvent event) {
Player player = event.getPlayer();
Expand Down Expand Up @@ -60,6 +62,7 @@ public void onNightSkip(TimeSkipEvent event) {
new BukkitRunnable() {
@Override
public void run() {
PlayerCloneNpc.createCloneNpc(player, player.getLocation(), Pose.SLEEPING);
DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player);
if(dbDreamPlayer ==null||(dbDreamPlayer.getDreamX()==null||dbDreamPlayer.getDreamY()==null||dbDreamPlayer.getDreamZ()==null)) {
DreamManager.tpPlayerDream(player);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.openmc.core.features.dream.listeners.others;
package fr.openmc.core.features.dream.listeners.registry;

import fr.openmc.core.features.dream.DreamUtils;
import fr.openmc.core.features.dream.models.registry.items.DreamItem;
Expand Down
Loading
Loading