From f6270b3d65b8e14dade51b26db1355b78f5afc3a Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 27 Feb 2026 18:33:06 +0100 Subject: [PATCH 1/3] update v2.5 branch (#1165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix soul chestplate altar crafting * Change SoulAxe rarity from COMMON to RARE * Correctif de la possibilité de se faire de l'argent a l'infini (#1158) * fix: claim dupli * fix: Cannot invoke "String.isEmpty()" because "content" is null * fix: FancyNpcsPlugin is null * fix: incorrect singularity transfer (#1157) * Refonte du principe pour aller dans la dimension des rêves (#1156) * fix: dream sleep (100%) * rework: sleep to dream --- .../city/actions/CityUnclaimAction.java | 22 ++++---- .../features/city/menu/CityChunkMenu.java | 21 ++++++-- .../core/features/dream/DreamManager.java | 2 + .../listeners/dream/PlayerSleepListener.java | 50 ++++++++----------- .../dream/registries/items/tools/SoulAxe.java | 2 +- 5 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java index 0d59ae137..645c34a33 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java @@ -9,6 +9,7 @@ import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import net.kyori.adventure.text.Component; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -26,7 +27,7 @@ public static int calculateAywenite(int chunkCount) { public static void startUnclaim(Player sender, int chunkX, int chunkZ) { City city = CityManager.getPlayerCity(sender.getUniqueId()); - org.bukkit.World bWorld = sender.getWorld(); + World bWorld = sender.getWorld(); if (!bWorld.getName().equals("world")) { MessagesManager.sendMessage(sender, Component.text("Tu ne peux pas étendre ta ville ici"), Prefix.CITY, MessageType.ERROR, false); return; @@ -42,14 +43,17 @@ public static void startUnclaim(Player sender, int chunkX, int chunkZ) { return; } - int price = calculatePrice(city.getChunks().size()); - int ayweniteNb = calculateAywenite(city.getChunks().size()); - - EconomyManager.addBalance(sender.getUniqueId(), price, "Unclaim de chunk de ville"); - ItemStack aywenite = ayweniteItemStack.clone(); - aywenite.setAmount(ayweniteNb); - for (ItemStack item : ItemUtils.splitAmountIntoStack(aywenite)) { - sender.dropItem(item); + // si on unclaim des claims gratuits on ne rend rien, sinon on rend une partie de l'argent et d'aywenite + if (city.getChunks().size() > CityCreateAction.FREE_CLAIMS+1) { + int price = calculatePrice(city.getChunks().size()); + int ayweniteNb = calculateAywenite(city.getChunks().size()); + + EconomyManager.addBalance(sender.getUniqueId(), price, "Unclaim de chunk de ville"); + ItemStack aywenite = ayweniteItemStack.clone(); + aywenite.setAmount(ayweniteNb); + for (ItemStack item : ItemUtils.splitAmountIntoStack(aywenite)) { + sender.dropItem(item); + } } city.removeChunk(chunkX, chunkZ); diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java index 553bf95fa..b444fdaa2 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; import fr.openmc.core.features.city.actions.CityClaimAction; +import fr.openmc.core.features.city.actions.CityCreateAction; import fr.openmc.core.features.city.actions.CityUnclaimAction; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.ChunkInfo; @@ -264,9 +265,9 @@ private ItemBuilder createProtectedChunkItem(Material material, int chunkX, int } private ItemBuilder createPlayerCityChunkItem(Material material, City city, int chunkX, int chunkZ) { - return new ItemBuilder(this, material, itemMeta -> { - itemMeta.displayName(Component.text("§9Claim de votre ville")); - itemMeta.lore(List.of( + List lore; + if (city.getChunks().size() > CityCreateAction.FREE_CLAIMS+1) { + lore = List.of( Component.text("§7Ville : §d" + city.getName()), Component.text("§7Position : §f" + chunkX + ", " + chunkZ), Component.empty(), @@ -275,7 +276,19 @@ private ItemBuilder createPlayerCityChunkItem(Material material, City city, int Component.text("§8- §d" + CityUnclaimAction.calculateAywenite(playerCity.getChunks().size()) + " d'Aywenite"), Component.empty(), Component.text("§e§lCLIQUEZ POUR UNCLAIM") - )); + ); + } else { + lore = List.of( + Component.text("§7Ville : §d" + city.getName()), + Component.text("§7Position : §f" + chunkX + ", " + chunkZ), + Component.empty(), + Component.text("§e§lCLIQUEZ POUR UNCLAIM") + ); + } + + return new ItemBuilder(this, material, itemMeta -> { + itemMeta.displayName(Component.text("§9Claim de votre ville")); + itemMeta.lore(lore); }).setOnClick(event -> handleChunkUnclaimClick(player, chunkX, chunkZ, hasPermissionClaim)); } 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 991b0dc94..ec28869e2 100644 --- a/src/main/java/fr/openmc/core/features/dream/DreamManager.java +++ b/src/main/java/fr/openmc/core/features/dream/DreamManager.java @@ -42,6 +42,7 @@ 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; @@ -231,6 +232,7 @@ public static void addDreamPlayer(Player player, Location oldLocation) throws IO } public static void removeDreamPlayer(Player player, Location dreamLocation) { + player.closeInventory(); player.clearActivePotionEffects(); // supprime les effets des armures des reves DreamPlayer dreamPlayer = dreamPlayerData.remove(player.getUniqueId()); diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerSleepListener.java index c3a2a52c0..744175869 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 @@ -8,62 +8,56 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerBedEnterEvent; +import org.bukkit.event.player.PlayerBedLeaveEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; public class PlayerSleepListener implements Listener { - private final Set playersDreaming = new HashSet<>(); + private final Set isPlayerSleeping = new HashSet<>(); @EventHandler - public void onPlayerSleep(PlayerBedEnterEvent event) { + public void onPlayerEnterBed(PlayerBedEnterEvent event) { Player player = event.getPlayer(); if (!event.getBedEnterResult().equals(PlayerBedEnterEvent.BedEnterResult.OK)) return; - if (playersDreaming.contains(player.getUniqueId())) return; - - Random random = new Random(); - double randomValue = random.nextDouble(); - - if (randomValue < DreamManager.calculateDreamProbability(player)) return; - - player.addPotionEffect(new PotionEffect( - PotionEffectType.NAUSEA, - 20 * 10, - 1, - false, - false, - false - )); - playersDreaming.add(player.getUniqueId()); - + if (isPlayerSleeping.contains(player)) return; + isPlayerSleeping.add(player); + } + @EventHandler + public void onPlayerLeaveBed(PlayerBedLeaveEvent event) { + isPlayerSleeping.remove(event.getPlayer()); } @EventHandler public void onNightSkip(TimeSkipEvent event) { - for (UUID uuid : playersDreaming) { - Player player = Bukkit.getPlayer(uuid); - if (player == null) continue; - DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player); - new BukkitRunnable() { - @Override - public void run() { + if (event.getSkipReason() == TimeSkipEvent.SkipReason.NIGHT_SKIP) { + if (isPlayerSleeping.isEmpty()) { + return; + } + for (Player player : isPlayerSleeping) { + if (ThreadLocalRandom.current().nextDouble() < DreamManager.calculateDreamProbability(player)) { + Random r = new Random(); + DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player); if (dbDreamPlayer == null || (dbDreamPlayer.getDreamX() == null || dbDreamPlayer.getDreamY() == null || dbDreamPlayer.getDreamZ() == null)) { DreamManager.tpPlayerDream(player); } else { DreamManager.tpPlayerToLastDreamLocation(player); } } - }.runTaskLater(OMCPlugin.getInstance(), 20L * 5); + } + + isPlayerSleeping.clear(); } - playersDreaming.clear(); } } diff --git a/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java b/src/main/java/fr/openmc/core/features/dream/registries/items/tools/SoulAxe.java index aae13e003..16f619070 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 @@ -13,7 +13,7 @@ public SoulAxe(String name) { @Override public DreamRarity getRarity() { - return DreamRarity.COMMON; + return DreamRarity.RARE; } @Override From ed68714fbb54c2088d7b8e45caf4630e2b67b2e3 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:31:19 +0100 Subject: [PATCH 2/3] impl fall damage --- .../dream/listeners/dream/PlayerDamageListener.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java index ddc990ffe..842a75696 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java @@ -7,13 +7,19 @@ import org.bukkit.event.entity.EntityDamageEvent; public class PlayerDamageListener implements Listener { - @EventHandler public void onFall(EntityDamageEvent event) { if (event.getCause() != EntityDamageEvent.DamageCause.FALL) return; if (!(event.getEntity() instanceof Player player)) return; if (DreamUtils.isInDream(player)) { + double fallDistance = player.getFallDistance(); + if (fallDistance < 5) return; + + long secondsLost = (long) (fallDistance * 2); + + DreamUtils.removeDreamTime(player, secondsLost, true); + event.setCancelled(true); } } From 2f7dbc8154c1a4e3c4b1572f2e94411e27823457 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:39:40 +0100 Subject: [PATCH 3/3] add sound --- .../features/dream/listeners/dream/PlayerDamageListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java index 842a75696..d2ad79d0e 100644 --- a/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java +++ b/src/main/java/fr/openmc/core/features/dream/listeners/dream/PlayerDamageListener.java @@ -1,6 +1,7 @@ package fr.openmc.core.features.dream.listeners.dream; import fr.openmc.core.features.dream.DreamUtils; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -16,9 +17,10 @@ public void onFall(EntityDamageEvent event) { double fallDistance = player.getFallDistance(); if (fallDistance < 5) return; - long secondsLost = (long) (fallDistance * 2); + long secondsLost = (long) (fallDistance * 1.5); DreamUtils.removeDreamTime(player, secondsLost, true); + player.playSound(player.getEyeLocation(), Sound.ENTITY_PLAYER_BIG_FALL, 1f, 1f); event.setCancelled(true); }