diff --git a/pom.xml b/pom.xml index af6d973..abea7e3 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 me.mrgeneralq sleep-most - 5.1.1 + 5.1.2 SleepMost diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 2044e23..404b81d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -74,7 +74,7 @@ public void onEnable() { pm.registerEvents(new PlayerBedLeaveEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getSleepMostWorldService()),this); pm.registerEvents(new WorldUnloadEventListener(bootstrapper.getBossBarService(), bootstrapper.getSleepMostWorldService()),this); - pm.registerEvents(new PlayerSleepStateChangeEventListener(this, bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService()), this); + pm.registerEvents(new PlayerSleepStateChangeEventListener(this, bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getSleepMostWorldService()), this); pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getSleepMostWorldService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); pm.registerEvents(new PlayerConsumeEventListener(bootstrapper.getSleepService(), bootstrapper.getInsomniaService(), bootstrapper.getMessageService(), bootstrapper.getFlagsRepository()), this); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java index e2e1e06..e80782f 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java @@ -7,6 +7,7 @@ import me.mrgeneralq.sleepmost.events.PlayerSleepStateChangeEvent; import me.mrgeneralq.sleepmost.interfaces.*; import me.mrgeneralq.sleepmost.builders.MessageBuilder; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.statics.DataContainer; import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.Bukkit; @@ -28,6 +29,7 @@ public class PlayerSleepStateChangeEventListener implements Listener { private final IBossBarService bossBarService; private final IMessageService messageService; private final ICooldownService cooldownService; + private final ISleepMostWorldService sleepMostWorldService; public PlayerSleepStateChangeEventListener( Sleepmost sleepmost, @@ -35,7 +37,8 @@ public PlayerSleepStateChangeEventListener( IFlagsRepository flagsRepository, IBossBarService bossBarService, IMessageService messageService, - ICooldownService cooldownService + ICooldownService cooldownService, + ISleepMostWorldService sleepMostWorldService ) { this.sleepmost = sleepmost; this.sleepService = sleepService; @@ -43,6 +46,7 @@ public PlayerSleepStateChangeEventListener( this.bossBarService = bossBarService; this.messageService = messageService; this.cooldownService = cooldownService; + this.sleepMostWorldService = sleepMostWorldService; } @EventHandler @@ -92,9 +96,18 @@ public void onPlayerSleepStateChange(PlayerSleepStateChangeEvent e){ this.cooldownService.startCooldown(player); } - //duration check before executing any skip methods + if(this.sleepService.getSleepersAmount(world) > this.sleepService.getRequiredSleepersCount(world)) + return; + Bukkit.getScheduler().runTaskLater(sleepmost, () -> { + + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + //if animation is already running, cancel + if(sleepMostWorld.isTimeCycleAnimationIsRunning()) + return; + //final check before night skip is required if(!this.sleepService.shouldSkip(world)){ return;