diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/EventPool.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/EventPool.java index 379b6eb..14f650e 100644 --- a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/EventPool.java +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/EventPool.java @@ -26,7 +26,8 @@ public class EventPool implements Runnable { new SuperJumpEvent(), new OneHeartEvent(), new IncreasedMobDamageEvent(), - new AdventureEvent() + new AdventureEvent(), + new Insomnia() ); private @Inject Plugin plugin; @@ -72,7 +73,7 @@ public void run() { Bukkit.getPluginManager().registerEvent( entry.getKey(), current, - EventPriority.NORMAL, + current.priority(), entry.getValue(), plugin ); @@ -95,9 +96,14 @@ public void run() { } } + int interval = configuration.get().getInt("events.interval", 10); + + if (current.subtractDuration()) { + interval -= current.duration(); + } + current = null; - int interval = configuration.get().getInt("events.interval", 10); if (interval < 1) { run(); return; diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/model/GameEvent.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/model/GameEvent.java index 6d75143..eb1321b 100644 --- a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/model/GameEvent.java +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/model/GameEvent.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.title.Title; import org.bukkit.event.Event; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import team.devblook.pepitocore.api.Identity; import team.devblook.pepitocore.plugin.module.event.GameEventExecutor; @@ -39,4 +40,12 @@ default void end() { default Map, GameEventExecutor> events() { return DEFAULT_EVENTS; } + + default EventPriority priority() { + return EventPriority.NORMAL; + } + + default boolean subtractDuration() { + return false; + } } \ No newline at end of file diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/type/Insomnia.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/type/Insomnia.java new file mode 100644 index 0000000..00b8872 --- /dev/null +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/event/type/Insomnia.java @@ -0,0 +1,123 @@ +package team.devblook.pepitocore.plugin.module.event.type; + +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.title.Title; +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerBedEnterEvent; +import team.devblook.pepitocore.plugin.module.event.GameEventExecutor; +import team.devblook.pepitocore.plugin.module.event.model.GameEvent; + +import java.time.Duration; +import java.util.Map; + +public class Insomnia implements GameEvent { + + private final BossBar bossBar = BossBar.bossBar( + this::name, + 1.0f, + BossBar.Color.BLUE, + BossBar.Overlay.PROGRESS + ); + + @Override + public Component name() { + return Component.text("ɪɴѕᴏᴍɴɪᴏ", TextColor.fromHexString("#2661e0")); + } + + @Override + public Component description() { + return Component.text() + .appendNewline() + .appendNewline() + .appendNewline() + .appendNewline() + .append(Component.text("¡No podrás dormir!", TextColor.fromHexString("#2661e0"))) + .appendNewline() + .appendNewline() + .append(Component.text(" Ahora es de noche y parece que por el mal día no puedes", TextColor.color(0xE4FFE5))) + .appendNewline() + .append(Component.text(" dormir, cuidado con los peligros de la noche.", TextColor.color(0xE4FFE5))) + .appendNewline() + .appendNewline() + .appendNewline() + .build(); + } + + @Override + public Title title() { + return Title.title( + Component.text("¡ɪɴѕᴏᴍɴɪᴏ!", TextColor.fromHexString("#2661e0")), + Component.text("Nos quedamos sin píldoras para dormir", TextColor.color(0xE4FFE5)), + Title.Times.times( + Duration.ofSeconds(2), + Duration.ofSeconds(5), + Duration.ofSeconds(2) + ) + ); + } + + @Override + public Sound sound() { + return Sound.sound( + Key.key("minecraft", "entity.enderman.death"), + Sound.Source.PLAYER, + 1.0f, + 1.0f + ); + } + + @Override + public BossBar bossBar() { + return this.bossBar; + } + + @Override + public int duration() { + return 9; + } + + @Override + public String id() { + return "insomnia"; + } + + @Override + public void begin() { + Bukkit.getWorlds().get(0).setTime(13000); + } + + @Override + public Map, GameEventExecutor> events() { + return Map.of( + PlayerBedEnterEvent.class, + new GameEventExecutor<>( + PlayerBedEnterEvent.class, + event -> { + if (event.getBedEnterResult() == PlayerBedEnterEvent.BedEnterResult.OK) { + event.getPlayer().sendMessage(Component.text( + "No puedes dormir ahora, no tienes sueño.", + TextColor.fromHexString("#E7783C") + )); + event.setCancelled(true); + } + } + ) + ); + } + + @Override + public EventPriority priority() { + return EventPriority.LOWEST; + } + + @Override + public boolean subtractDuration() { + return true; + } +} diff --git a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/sleep/listener/SkipSleepListener.java b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/sleep/listener/SkipSleepListener.java index 725b44e..03a6216 100644 --- a/plugin/src/main/java/team/devblook/pepitocore/plugin/module/sleep/listener/SkipSleepListener.java +++ b/plugin/src/main/java/team/devblook/pepitocore/plugin/module/sleep/listener/SkipSleepListener.java @@ -22,6 +22,10 @@ public void onEnterBed(PlayerBedEnterEvent event) { return; } + if (event.isCancelled()) { + return; + } + int sleeping = SLEEPING.incrementAndGet(); int needed = needed();