diff --git a/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimation.java b/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimation.java index 489b10e9a..fbf36f416 100644 --- a/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimation.java +++ b/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimation.java @@ -34,8 +34,8 @@ public void complete(Player winner) { else loot = reward.rollLoots(winner); - this.stop(); ChatAnimationManager.onAnimationCompleted(this, winner, loot); + this.stop(); } public final boolean isFinished() { diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/display/DailyEventBossbar.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/display/DailyEventBossbar.java index b5048919c..5d60b5bd0 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/display/DailyEventBossbar.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/display/DailyEventBossbar.java @@ -84,7 +84,8 @@ protected BossBar.Overlay style(Player player) { @Override protected boolean shouldDisplay(Player player) { return DailyEventsManager.isActiveDailyEvent() - && DailyEventsManager.getActiveDailyEvent() instanceof HasBossBar; + && DailyEventsManager.getActiveDailyEvent() instanceof HasBossBar + && player.getWorld().getName().equals(DailyEventsManager.getActiveDailyEvent().getWorldEvent()); } /** diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/listeners/DailyEventAmbientListeners.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/listeners/DailyEventAmbientListeners.java index 658a1f47c..262705d0b 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/listeners/DailyEventAmbientListeners.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/listeners/DailyEventAmbientListeners.java @@ -1,12 +1,13 @@ package fr.openmc.core.features.events.contents.dailyevents.listeners; import fr.openmc.core.features.events.contents.dailyevents.DailyEventsManager; +import fr.openmc.core.features.events.contents.dailyevents.models.ScheduleDailyEvent; import fr.openmc.core.features.events.contents.dailyevents.models.dailyevent.DailyEvent; import fr.openmc.core.features.events.contents.dailyevents.models.dailyevent.HasAmbient; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerTeleportEvent; /** * Classe gérant l'application des ambiences dans les événements journalier @@ -16,24 +17,27 @@ public class DailyEventAmbientListeners implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { if (!DailyEventsManager.isActiveDailyEvent()) return; - DailyEvent dailyEvent = DailyEventsManager.outgoingEvent.getDailyEvent(); + if (!event.getPlayer().getWorld().getName().equals(dailyEvent.getWorldEvent())) return; if (!(dailyEvent instanceof HasAmbient hasAmbient)) return; hasAmbient.apply(event.getPlayer(), true); } @EventHandler - public void onChangeWorld(PlayerTeleportEvent event) { + public void onChangeWorld(PlayerChangedWorldEvent event) { if (!DailyEventsManager.isActiveDailyEvent()) return; - DailyEvent dailyEvent = DailyEventsManager.outgoingEvent.getDailyEvent(); + ScheduleDailyEvent scheduleDailyEvent = DailyEventsManager.outgoingEvent; - if (!(dailyEvent instanceof HasAmbient hasAmbient)) return; + if (scheduleDailyEvent == null) return; + DailyEvent dailyEvent = scheduleDailyEvent.getDailyEvent(); + if (dailyEvent == null) return; - if (dailyEvent.getWorldEvent().equals(event.getFrom().getWorld().getName())) return; - if (!dailyEvent.getWorldEvent().equals(event.getTo().getWorld().getName())) return; + if (!(dailyEvent instanceof HasAmbient hasAmbient)) return; + if (dailyEvent.getWorldEvent().equals(event.getFrom().getName())) return; + if (!dailyEvent.getWorldEvent().equals(event.getPlayer().getWorld().getName())) return; hasAmbient.apply(event.getPlayer()); } diff --git a/src/main/java/fr/openmc/core/registry/loottable/CustomLootTable.java b/src/main/java/fr/openmc/core/registry/loottable/CustomLootTable.java index cbc32dbc2..c352cf5e2 100644 --- a/src/main/java/fr/openmc/core/registry/loottable/CustomLootTable.java +++ b/src/main/java/fr/openmc/core/registry/loottable/CustomLootTable.java @@ -33,6 +33,11 @@ public LootReward rollLoots(Player receiver) { List guaranted = this.getLoots().stream() .filter(loot -> loot.getChance() >= 1.0) .toList(); + + for (CustomLoot loot : guaranted) { + loot.run(receiver); + } + List result = new ArrayList<>(guaranted); List remaining = new ArrayList<>(this.getLoots().stream() .filter(loot -> loot.getChance() < 1.0).toList()); diff --git a/src/main/java/fr/openmc/core/registry/loottable/LootReward.java b/src/main/java/fr/openmc/core/registry/loottable/LootReward.java index 5e275b637..2058cfca0 100644 --- a/src/main/java/fr/openmc/core/registry/loottable/LootReward.java +++ b/src/main/java/fr/openmc/core/registry/loottable/LootReward.java @@ -1,6 +1,7 @@ package fr.openmc.core.registry.loottable; import fr.openmc.core.registry.loottable.loots.CustomLoot; +import fr.openmc.core.registry.loottable.loots.ItemLoot; import net.kyori.adventure.text.Component; import java.util.Collection; @@ -19,7 +20,11 @@ public Component buildComponent() { Component component = null; for (CustomLoot loot : loots) { - Component lootComponent = loot.buildLootComponent(-1); + int amount = -1; + if (loot instanceof ItemLoot itemLoot) { + amount = itemLoot.getRepresentativeItem().getAmount(); + } + Component lootComponent = loot.buildLootComponent(amount); if (lootComponent == null) continue; if (component == null) diff --git a/src/main/java/fr/openmc/core/registry/loottable/loots/ItemLoot.java b/src/main/java/fr/openmc/core/registry/loottable/loots/ItemLoot.java index 9373a944b..f17e5ec79 100644 --- a/src/main/java/fr/openmc/core/registry/loottable/loots/ItemLoot.java +++ b/src/main/java/fr/openmc/core/registry/loottable/loots/ItemLoot.java @@ -18,6 +18,7 @@ import java.util.function.Predicate; import java.util.function.Supplier; +// todo: enlever le concept d'avoir plusieurs items en une entrée @Getter public class ItemLoot implements CustomLoot, RepresentedItem { @Setter @@ -173,6 +174,7 @@ public ItemStack getFirstLoot() { } public int getRandomAmount() { + if (minAmount == maxAmount) return minAmount; return minAmount + (int) (Math.random() * (maxAmount - minAmount + 1)); }