From 9ce316ee81d288a3b1dc244d34a6e2567e0d8929 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 12:34:12 +0200 Subject: [PATCH 01/25] initialcommit containg version change --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d538996..f2e779c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 me.mrgeneralq sleep-most - 5.0.4 + 5.1.0 SleepMost From 961e2f3dac06c4b6bcede5d1421cbf96ff743d4b Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 12:43:19 +0200 Subject: [PATCH 02/25] added check if world is enabled --- .../me/mrgeneralq/sleepmost/commands/SleepCommand.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java index f446197..a5c75a8 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java @@ -30,8 +30,15 @@ public boolean onCommand(CommandSender sender, Command command, String s, String this.messageService.sendMessage(sender, messageService.getMessagePrefixed(MessageKey.NO_CONSOLE_COMMAND).build()); return true; } + Player player = (Player) sender; + if(this.sleepService.isEnabledAt(player.getWorld())){ + this.messageService.sendMessage(player, this.messageService.getMessagePrefixed(MessageKey.NOT_ENABLED_FOR_WORLD).build()); + return true; + } + + if (!player.hasPermission("sleepmost.sleep")) { this.messageService.sendMessage(player, this.messageService.getMessagePrefixed(MessageKey.NO_PERMISSION_COMMAND).build()); return true; From 8d80ae2888461bc43e8583048900bd2caaa09a64 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 13:00:27 +0200 Subject: [PATCH 03/25] renamed messages to make previous message available again --- .../mrgeneralq/sleepmost/mappers/MessageMapper.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java index 2590a11..8245f7c 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java @@ -21,8 +21,8 @@ public static MessageMapper getMapper(){ public void loadMessages(){ this.messages.put(MessageKey.PREFIX, new ConfigMessage("prefix", "&7[&bSleep-Most&7]")); - this.messages.put(MessageKey.NIGHT_SKIPPED, new ConfigMessage("user.night-skipped", "&aNight skipped")); - this.messages.put(MessageKey.STORM_SKIPPED, new ConfigMessage("user.storm-skipped", "&eStorm skipped")); + this.messages.put(MessageKey.NIGHT_SKIPPED, new ConfigMessage("user.night-skipped-chat", "&aNight skipped")); + this.messages.put(MessageKey.STORM_SKIPPED, new ConfigMessage("user.storm-skipped-chat", "&eStorm skipped")); this.messages.put(MessageKey.PLAYERS_LEFT_TO_SKIP_NIGHT, new ConfigMessage("user.players-left-night", "&bSleeping to skip night &f[&c%sleeping%/%required%&f]&b!")); this.messages.put(MessageKey.PLAYERS_LEFT_TO_SKIP_STORM, new ConfigMessage("user.players-left-storm", "&bSleeping to skip the storm &f[&c%sleeping%/%required%&f]&b!")); this.messages.put(MessageKey.SLEEP_PREVENTED, new ConfigMessage("user.sleep-prevented", "&cYou cannot sleep in this world!")); @@ -61,10 +61,11 @@ public void loadMessages(){ this.messages.put(MessageKey.FLAG_RESET_IN_WORLD, new ConfigMessage("flag.reset-in-world", "&bThe &e%flag% &bflag has been reset to &e%default-value%")); this.messages.put(MessageKey.FLAG_DOES_NOT_EXIST, new ConfigMessage("flag.not-exist", "&cThis flag does not exist")); //TITLES - this.messages.put(MessageKey.NIGHT_SKIPPED_TITLE, new ConfigMessage("user.night-skipped.title", "&aNight skipped")); - this.messages.put(MessageKey.NIGHT_SKIPPED_SUBTITLE, new ConfigMessage("user.night-skipped.subtitle", "&bGood morning sunshine!")); - this.messages.put(MessageKey.STORM_SKIPPED_TITLE, new ConfigMessage("user.storm-skipped.title", "&eStorm skipped")); - this.messages.put(MessageKey.STORM_SKIPPED_SUBTITLE, new ConfigMessage("user.storm-skipped.subtitle", "&bWhat a weather...")); + this.messages.put(MessageKey.NIGHT_SKIPPED_TITLE, new ConfigMessage("user.night-skipped-title", "&aNight skipped")); + this.messages.put(MessageKey.NIGHT_SKIPPED_SUBTITLE, new ConfigMessage("user.night-skipped-subtitle", "&bGood morning sunshine!")); + this.messages.put(MessageKey.STORM_SKIPPED_TITLE, new ConfigMessage("user.storm-skipped-title", "&eStorm skipped")); + this.messages.put(MessageKey.STORM_SKIPPED_SUBTITLE, new ConfigMessage("user.storm-skipped-subtitle", "&bWhat a weather...")); + } From 3bd0834414dbff50d54851b00c2f35d72c98140c Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 13:09:38 +0200 Subject: [PATCH 04/25] added the auto-complete --- .../subcommands/ResetFlagSubCommand.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/ResetFlagSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/ResetFlagSubCommand.java index 8f7255c..23123c2 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/ResetFlagSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/ResetFlagSubCommand.java @@ -1,6 +1,7 @@ package me.mrgeneralq.sleepmost.commands.subcommands; import me.mrgeneralq.sleepmost.enums.MessageKey; +import me.mrgeneralq.sleepmost.flags.types.TabCompletedFlag; import org.apache.commons.lang3.StringUtils; import org.bukkit.World; import org.bukkit.command.Command; @@ -12,6 +13,11 @@ import me.mrgeneralq.sleepmost.interfaces.IMessageService; import me.mrgeneralq.sleepmost.interfaces.ISubCommand; import me.mrgeneralq.sleepmost.statics.CommandSenderUtils; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; public class ResetFlagSubCommand implements ISubCommand { @@ -57,7 +63,26 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL .setPlaceHolder("%default-value%", sleepFlag.getValueAt(world).toString()) .build()); - return true; } + + @Override + public List tabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, List args) { + if (args.size() == 1) { + return this.flagsRepository.getFlagsNames().stream() + .filter(flag -> flag.contains(args.get(0)) || flag.equalsIgnoreCase(args.get(0))) + .collect(Collectors.toList()); + } + + if (args.size() == 2) { + ISleepFlag flag = flagsRepository.getFlags().stream() + .filter(f -> f.getName().equalsIgnoreCase(args.get(0))) + .findFirst().orElse(null); + + if (flag instanceof TabCompletedFlag) { + return ((TabCompletedFlag) flag).tabComplete(sender, command, alias, args.subList(1, args.size())); + } + } + return new ArrayList<>(); + } } From b4649f7b59ccab56a763b29b0ce6644b24ea46e3 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 13:32:07 +0200 Subject: [PATCH 05/25] starting implementation of SleepMostPlayer class --- .../sleepmost/models/SleepMostPlayer.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java new file mode 100644 index 0000000..6274798 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java @@ -0,0 +1,25 @@ +package me.mrgeneralq.sleepmost.models; + +import org.bukkit.OfflinePlayer; + +public class SleepMostPlayer { + + private final OfflinePlayer player; + private boolean hasInsomnia = false; + + public SleepMostPlayer(OfflinePlayer player) { + this.player = player; + } + + public OfflinePlayer getPlayer() { + return player; + } + + public boolean isHasInsomnia() { + return hasInsomnia; + } + + public void setHasInsomnia(boolean hasInsomnia) { + this.hasInsomnia = hasInsomnia; + } +} From 75563a2c39c256e4c9550c4d7fe4a16a45890028 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 13:54:07 +0200 Subject: [PATCH 06/25] added implementation of SleepMostPlayer --- .../PlayerJoinEventListener.java | 7 +++- .../PlayerQuitEventListener.java | 7 +++- .../interfaces/ISleepMostPlayerService.java | 15 ++++++++ .../SleepMostPlayerRepository.java | 34 ++++++++++++++++++ .../services/SleepMostPlayerService.java | 36 +++++++++++++++++++ .../sleepmost/statics/Bootstrapper.java | 9 +++++ 6 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java index 24a4c9b..48e0058 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.interfaces.IBossBarService; import me.mrgeneralq.sleepmost.interfaces.IMessageService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; import me.mrgeneralq.sleepmost.interfaces.IUpdateService; import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.Bukkit; @@ -19,22 +20,26 @@ public class PlayerJoinEventListener implements Listener { private final IMessageService messageService; private final IBossBarService bossBarService; + private final ISleepMostPlayerService sleepMostPlayerService; private final IUpdateService updateService; private final Plugin plugin; private static final String UPDATE_PERMISSION = "sleepmost.alerts.update"; - public PlayerJoinEventListener(Plugin plugin, IUpdateService updateService, IMessageService messageService, IBossBarService bossBarService) { + public PlayerJoinEventListener(Plugin plugin, IUpdateService updateService, IMessageService messageService, IBossBarService bossBarService, ISleepMostPlayerService sleepMostPlayerService) { this.plugin = plugin; this.updateService = updateService; this.messageService = messageService; this.bossBarService = bossBarService; + this.sleepMostPlayerService = sleepMostPlayerService; } @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); + this.sleepMostPlayerService.registerNewPlayer(player); + if(ServerVersion.CURRENT_VERSION.supportsBossBars()) this.bossBarService.registerPlayer(player.getWorld(), player); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java index d880124..caf773f 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.interfaces.IBossBarService; import me.mrgeneralq.sleepmost.interfaces.ICooldownService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.Server; @@ -15,16 +16,20 @@ public class PlayerQuitEventListener implements Listener { private final ICooldownService cooldownService; private final ISleepService sleepService; private final IBossBarService bossBarService; + private final ISleepMostPlayerService sleepMostPlayerService; - public PlayerQuitEventListener(ICooldownService cooldownService, ISleepService sleepService, IBossBarService bossBarService) { + public PlayerQuitEventListener(ICooldownService cooldownService, ISleepService sleepService, IBossBarService bossBarService, ISleepMostPlayerService sleepMostPlayerService) { this.cooldownService = cooldownService; this.sleepService = sleepService; this.bossBarService = bossBarService; + this.sleepMostPlayerService = sleepMostPlayerService; } @EventHandler public void onPlayerLeave(PlayerQuitEvent e){ + Player player = e.getPlayer(); + this.sleepMostPlayerService.unregisterPlayer(player); if(ServerVersion.CURRENT_VERSION.supportsBossBars()) this.bossBarService.unregisterPlayer(player.getWorld(), player); diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java new file mode 100644 index 0000000..231800f --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java @@ -0,0 +1,15 @@ +package me.mrgeneralq.sleepmost.interfaces; + +import me.mrgeneralq.sleepmost.models.SleepMostPlayer; +import org.bukkit.OfflinePlayer; + +import java.util.UUID; + +public interface ISleepMostPlayerService { + + SleepMostPlayer getPlayer(OfflinePlayer playerId); + void updatePlayer(SleepMostPlayer player); + void unregisterPlayer(OfflinePlayer playerId); + void registerNewPlayer(OfflinePlayer offlinePlayer); + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java new file mode 100644 index 0000000..de24704 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java @@ -0,0 +1,34 @@ +package me.mrgeneralq.sleepmost.repositories; + +import me.mrgeneralq.sleepmost.interfaces.IRepository; +import me.mrgeneralq.sleepmost.models.SleepMostPlayer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class SleepMostPlayerRepository implements IRepository { + + Map playerMap = new HashMap<>(); + + @Override + public SleepMostPlayer get(UUID playerId) { + return this.playerMap.get(playerId); + } + + @Override + public void set(UUID playerId, SleepMostPlayer player) { + this.playerMap.put(playerId,player); + } + + @Override + public boolean exists(UUID playerId) { + return this.playerMap.containsKey(playerId); + } + + @Override + public void remove(UUID playerId) { + this.playerMap.remove(playerId); + } + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java new file mode 100644 index 0000000..038e41c --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java @@ -0,0 +1,36 @@ +package me.mrgeneralq.sleepmost.services; + +import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; +import me.mrgeneralq.sleepmost.models.SleepMostPlayer; +import me.mrgeneralq.sleepmost.repositories.SleepMostPlayerRepository; +import org.bukkit.OfflinePlayer; + +public class SleepMostPlayerService implements ISleepMostPlayerService { + + SleepMostPlayerRepository repository; + + public SleepMostPlayerService(SleepMostPlayerRepository sleepMostPlayerRepository) { + this.repository = sleepMostPlayerRepository; + } + + @Override + public SleepMostPlayer getPlayer(OfflinePlayer player) { + return this.repository.get(player.getUniqueId()); + } + + @Override + public void updatePlayer(SleepMostPlayer player) { + this.repository.set(player.getPlayer().getUniqueId(), player); + } + + @Override + public void unregisterPlayer(OfflinePlayer offlinePlayer) { + this.repository.remove(offlinePlayer.getUniqueId()); + } + + @Override + public void registerNewPlayer(OfflinePlayer offlinePlayer) { + SleepMostPlayer player = new SleepMostPlayer(offlinePlayer); + this.repository.set(offlinePlayer.getUniqueId(), player); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index 8f27c2a..c16ed19 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -25,6 +25,7 @@ public class Bootstrapper { private BossBarRepository bossBarRepository; private IBossBarService bossBarService; private IPlayerService playerService; + private ISleepMostPlayerService sleepMostPlayerService; private WorldPropertyRepository worldPropertyRepository; private IWorldPropertyService worldPropertyService; @@ -39,6 +40,8 @@ private Bootstrapper(){ } public void initialize(Sleepmost main){ + this.sleepMostPlayerService = new SleepMostPlayerService(new SleepMostPlayerRepository()); + this.configRepository = new ConfigRepository(main); this.configService = new ConfigService(main); this.flagsRepository = new FlagsRepository(configRepository); @@ -65,6 +68,8 @@ public void initialize(Sleepmost main){ this.configMessageMapper = ConfigMessageMapper.getMapper(); this.configMessageMapper.initialize(main); + + //check if boss bars are supported if(ServerVersion.CURRENT_VERSION.supportsBossBars()){ this.bossBarRepository = new BossBarRepository(); @@ -146,4 +151,8 @@ public IWorldPropertyService getWorldPropertyService() { public IPlayerService getPlayerService() { return playerService; } + + public ISleepMostPlayerService getSleepMostPlayerService() { + return sleepMostPlayerService; + } } From dccef10db45b5fa18cc2760337ca2120a130a4f4 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 14:39:34 +0200 Subject: [PATCH 07/25] added implementation of SleepMostPlayer & InsomniaService --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 16 ++++++-- .../sleepmost/commands/SleepmostCommand.java | 6 ++- .../subcommands/InsomniaSubCommand.java | 12 +++++- .../interfaces/IInsomniaService.java | 13 +++++++ .../sleepmost/models/SleepMostPlayer.java | 16 ++++++++ .../sleepmost/services/InsomniaService.java | 37 +++++++++++++++++++ 6 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index d306e40..80a78cf 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -9,6 +9,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; +import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -41,8 +42,10 @@ public void onEnable() { this.bootstrapper = Bootstrapper.getBootstrapper(); bootstrapper.initialize(this); + this.messageService = bootstrapper.getMessageService(); + //creating missing messages this.messageService.createMissingMessages(); @@ -51,19 +54,19 @@ public void onEnable() { this.registerBossBars(); //init commands - SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()); + SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService()); getCommand("sleepmost").setExecutor(sleepmostCommand); PluginManager pm = Bukkit.getPluginManager(); pm.registerEvents(new PlayerBedEnterEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()), this); - pm.registerEvents(new PlayerQuitEventListener(bootstrapper.getCooldownService(), bootstrapper.getSleepService(), bootstrapper.getBossBarService()), this); + pm.registerEvents(new PlayerQuitEventListener(bootstrapper.getCooldownService(), bootstrapper.getSleepService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); if(ServerVersion.CURRENT_VERSION.hasTimeSkipEvent()) pm.registerEvents(new TimeSkipEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new EntityTargetLivingEntityEventListener(bootstrapper.getFlagsRepository()), this); pm.registerEvents(new PlayerWorldChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getBossBarService()), this); - pm.registerEvents(new PlayerJoinEventListener(this, bootstrapper.getUpdateService(), bootstrapper.getMessageService(), bootstrapper.getBossBarService()), this); + pm.registerEvents(new PlayerJoinEventListener(this, bootstrapper.getUpdateService(), bootstrapper.getMessageService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); pm.registerEvents(new EntitySpawnEventListener(bootstrapper.getFlagsRepository()), this); if(ServerVersion.CURRENT_VERSION.hasTimeSkipEvent()){ @@ -83,6 +86,7 @@ public void onEnable() { runPreTimerTasks(); runTimers(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService()); + } public static Sleepmost getInstance() { @@ -94,6 +98,12 @@ private void runPreTimerTasks(){ this.bootstrapper.getWorldPropertyService().createNewWorldProperty(world); } + private void runPlayerTasks(){ + for(Player p: Bukkit.getOnlinePlayers()){ + this.bootstrapper.getSleepMostPlayerService().registerNewPlayer(p); + } + } + private void runTimers(ISleepService sleepService, IWorldPropertyService worldPropertyService){ new Heartbeat(sleepService, worldPropertyService).runTaskTimer(this, 20,20); diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java index fc73897..3bda064 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java @@ -26,8 +26,9 @@ public class SleepmostCommand implements CommandExecutor, TabCompleter { private final ICooldownService cooldownService; private final IBossBarService bossBarService; private final IWorldPropertyService worldPropertyService; + private final ISleepMostPlayerService sleepMostPlayerService; - public SleepmostCommand(ISleepService sleepService, IMessageService messageService, IUpdateService updateService, IFlagService flagService, IFlagsRepository flagsRepository, IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService){ + public SleepmostCommand(ISleepService sleepService, IMessageService messageService, IUpdateService updateService, IFlagService flagService, IFlagsRepository flagsRepository, IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostPlayerService sleepMostPlayerService){ this.sleepService = sleepService; this.messageService = messageService; this.updateService = updateService; @@ -37,6 +38,7 @@ public SleepmostCommand(ISleepService sleepService, IMessageService messageServi this.cooldownService = cooldownService; this.bossBarService = bossBarService; this.worldPropertyService = worldPropertyService; + this.sleepMostPlayerService = sleepMostPlayerService; this.registerSubCommands(); } @@ -52,7 +54,7 @@ private void registerSubCommands(){ subCommands.put("bed", new BedSubCommand(this.sleepService,this.messageService)); subCommands.put("sleep", new SleepSubCommand(this.sleepService,this.flagsRepository,this.messageService,this.cooldownService, this.bossBarService, this.worldPropertyService)); subCommands.put("kick", new KickSubCommand(this.sleepService,this.messageService, this.flagsRepository)); - subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService)); + subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService, this.sleepMostPlayerService)); subCommands.put("getflag", new GetFlagSubCommand(this.messageService, this.flagsRepository)); subCommands.put("resetflag", new ResetFlagSubCommand(this.messageService, this.flagsRepository, this.flagService)); diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java index c2bbf41..1233839 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java @@ -18,12 +18,19 @@ public class InsomniaSubCommand implements ISubCommand { private final IFlagsRepository flagsRepository; private final IMessageService messageService; private final IWorldPropertyService worldPropertyService; - - public InsomniaSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, IWorldPropertyService worldPropertyService) { + private final ISleepMostPlayerService sleepMostPlayerService; + + public InsomniaSubCommand(ISleepService sleepService, + IFlagsRepository flagsRepository, + IMessageService messageService, + IWorldPropertyService worldPropertyService, + ISleepMostPlayerService sleepMostPlayerService + ) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.messageService = messageService; this.worldPropertyService = worldPropertyService; + this.sleepMostPlayerService = sleepMostPlayerService; } @@ -48,6 +55,7 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL return true; } + if (this.worldPropertyService.getWorldProperties(world).isInsomniaEnabled()) { String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_ALREADY_ENABLED) .setWorld(world) diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java new file mode 100644 index 0000000..5b03257 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java @@ -0,0 +1,13 @@ +package me.mrgeneralq.sleepmost.interfaces; + +import org.bukkit.World; +import org.bukkit.entity.Player; + +public interface IInsomniaService { + + void enableInsomnia(Player player, World world); + void enableInsomnia(World world); + void disableInsomnia(Player player, World world); + void disableInsomnia(World world); + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java index 6274798..9bca6e0 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java @@ -1,10 +1,18 @@ package me.mrgeneralq.sleepmost.models; import org.bukkit.OfflinePlayer; +import org.bukkit.World; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; public class SleepMostPlayer { private final OfflinePlayer player; + + private final Map worldInsomniaStatus = new HashMap<>(); + private boolean hasInsomnia = false; public SleepMostPlayer(OfflinePlayer player) { @@ -22,4 +30,12 @@ public boolean isHasInsomnia() { public void setHasInsomnia(boolean hasInsomnia) { this.hasInsomnia = hasInsomnia; } + + public void setInsomniaStatus(World world, boolean hasInsomnia){ + this.worldInsomniaStatus.put(world.getUID(), hasInsomnia); + } + + public boolean getInsomniaStatus(World world){ + return this.worldInsomniaStatus.getOrDefault(world.getUID(), false); + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java b/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java new file mode 100644 index 0000000..2694b8a --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java @@ -0,0 +1,37 @@ +package me.mrgeneralq.sleepmost.services; + +import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; +import org.bukkit.World; +import org.bukkit.entity.Player; + +public class InsomniaService implements IInsomniaService { + + private final ISleepMostPlayerService sleepMostPlayerService; + + public InsomniaService(ISleepMostPlayerService sleepMostPlayerService) { + this.sleepMostPlayerService = sleepMostPlayerService; + } + + @Override + public void enableInsomnia(Player player, World world) { + this.sleepMostPlayerService.getPlayer(player).setInsomniaStatus(world, true); + } + + @Override + public void enableInsomnia(World world) { + for(Player p: world.getPlayers()) + this.enableInsomnia(p, world); + } + + @Override + public void disableInsomnia(Player player, World world) { + this.sleepMostPlayerService.getPlayer(player).setInsomniaStatus(world, false); + } + + @Override + public void disableInsomnia(World world) { + for(Player p: world.getPlayers()) + this.disableInsomnia(p, world); + } +} From 253c9ed48f2ea8de3799735b3f89a27d072b775b Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 16:47:58 +0200 Subject: [PATCH 08/25] insomnia framework refactored --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 13 +++++------ .../sleepmost/commands/SleepmostCommand.java | 8 ++++--- .../subcommands/InsomniaSubCommand.java | 12 ++++++---- .../commands/subcommands/SleepSubCommand.java | 6 +++-- .../PlayerBedEnterEventListener.java | 8 +++++-- .../PlayerJoinEventListener.java | 3 +++ .../TimeCycleChangeEventListener.java | 10 +++++--- .../interfaces/IInsomniaService.java | 1 + .../interfaces/ISleepMostPlayerService.java | 1 + .../sleepmost/models/SleepMostWorld.java | 23 +++++++++++++++++++ .../sleepmost/models/WorldProperty.java | 3 +++ .../sleepmost/runnables/Heartbeat.java | 11 +++++---- .../sleepmost/services/InsomniaService.java | 5 ++++ .../services/SleepMostPlayerService.java | 5 ++++ .../sleepmost/statics/Bootstrapper.java | 7 +++++- 15 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 80a78cf..467cbae 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -7,7 +7,6 @@ import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; @@ -54,11 +53,11 @@ public void onEnable() { this.registerBossBars(); //init commands - SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService()); + SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService(), bootstrapper.getInsomniaService()); getCommand("sleepmost").setExecutor(sleepmostCommand); PluginManager pm = Bukkit.getPluginManager(); - pm.registerEvents(new PlayerBedEnterEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()), this); + pm.registerEvents(new PlayerBedEnterEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()), this); pm.registerEvents(new PlayerQuitEventListener(bootstrapper.getCooldownService(), bootstrapper.getSleepService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); if(ServerVersion.CURRENT_VERSION.hasTimeSkipEvent()) @@ -79,12 +78,12 @@ public void onEnable() { pm.registerEvents(new PlayerBedLeaveEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()),this); pm.registerEvents(new PlayerSleepStateChangeEventListener(this, bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService()), this); - pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository()),this ); + pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); runPreTimerTasks(); - runTimers(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService()); + runTimers(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()); } @@ -104,9 +103,9 @@ private void runPlayerTasks(){ } } - private void runTimers(ISleepService sleepService, IWorldPropertyService worldPropertyService){ + private void runTimers(ISleepService sleepService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService){ - new Heartbeat(sleepService, worldPropertyService).runTaskTimer(this, 20,20); + new Heartbeat(sleepService, worldPropertyService, insomniaService).runTaskTimer(this, 20,20); } private void notifyIfNewUpdateExists(IUpdateService updateService) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java index 3bda064..de3a515 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java @@ -27,8 +27,9 @@ public class SleepmostCommand implements CommandExecutor, TabCompleter { private final IBossBarService bossBarService; private final IWorldPropertyService worldPropertyService; private final ISleepMostPlayerService sleepMostPlayerService; + private final IInsomniaService insomniaService; - public SleepmostCommand(ISleepService sleepService, IMessageService messageService, IUpdateService updateService, IFlagService flagService, IFlagsRepository flagsRepository, IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostPlayerService sleepMostPlayerService){ + public SleepmostCommand(ISleepService sleepService, IMessageService messageService, IUpdateService updateService, IFlagService flagService, IFlagsRepository flagsRepository, IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostPlayerService sleepMostPlayerService, IInsomniaService insomniaService){ this.sleepService = sleepService; this.messageService = messageService; this.updateService = updateService; @@ -39,6 +40,7 @@ public SleepmostCommand(ISleepService sleepService, IMessageService messageServi this.bossBarService = bossBarService; this.worldPropertyService = worldPropertyService; this.sleepMostPlayerService = sleepMostPlayerService; + this.insomniaService = insomniaService; this.registerSubCommands(); } @@ -52,9 +54,9 @@ private void registerSubCommands(){ subCommands.put("reset", new ResetSubCommand(this.messageService, this.flagService)); subCommands.put("setops", new SetOnePlayerSleepCommand(this.sleepService, this.messageService,this.flagService, this.flagsRepository)); subCommands.put("bed", new BedSubCommand(this.sleepService,this.messageService)); - subCommands.put("sleep", new SleepSubCommand(this.sleepService,this.flagsRepository,this.messageService,this.cooldownService, this.bossBarService, this.worldPropertyService)); + subCommands.put("sleep", new SleepSubCommand(this.sleepService,this.flagsRepository,this.messageService,this.cooldownService, this.bossBarService, this.worldPropertyService, this.insomniaService)); subCommands.put("kick", new KickSubCommand(this.sleepService,this.messageService, this.flagsRepository)); - subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService, this.sleepMostPlayerService)); + subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService, this.sleepMostPlayerService, this.insomniaService)); subCommands.put("getflag", new GetFlagSubCommand(this.messageService, this.flagsRepository)); subCommands.put("resetflag", new ResetFlagSubCommand(this.messageService, this.flagsRepository, this.flagService)); diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java index 1233839..4afa6f3 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java @@ -19,18 +19,21 @@ public class InsomniaSubCommand implements ISubCommand { private final IMessageService messageService; private final IWorldPropertyService worldPropertyService; private final ISleepMostPlayerService sleepMostPlayerService; + private final IInsomniaService insomniaService; public InsomniaSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, IWorldPropertyService worldPropertyService, - ISleepMostPlayerService sleepMostPlayerService + ISleepMostPlayerService sleepMostPlayerService, + IInsomniaService insomniaService ) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.messageService = messageService; this.worldPropertyService = worldPropertyService; this.sleepMostPlayerService = sleepMostPlayerService; + this.insomniaService = insomniaService; } @@ -56,6 +59,7 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL } + /* if (this.worldPropertyService.getWorldProperties(world).isInsomniaEnabled()) { String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_ALREADY_ENABLED) .setWorld(world) @@ -63,11 +67,9 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL this.messageService.sendMessage(player, insomniaMessage); return true; } + */ - WorldProperty property = this.worldPropertyService.getWorldProperties(world); - property.setInsomniaEnabled(true); - - this.worldPropertyService.setWorldProperty(world, property); + this.insomniaService.enableInsomnia(world); String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_ENABLED) .setWorld(world) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java index a75535e..e751463 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java @@ -14,12 +14,14 @@ public class SleepSubCommand implements ISubCommand { private final IFlagsRepository flagsRepository; private final IMessageService messageService; private final IWorldPropertyService worldPropertyService; + private final IInsomniaService insomniaService; - public SleepSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService) { + public SleepSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.messageService = messageService; this.worldPropertyService = worldPropertyService; + this.insomniaService = insomniaService; } @@ -58,7 +60,7 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL } - if(this.worldPropertyService.getWorldProperties(world).isInsomniaEnabled()){ + if(this.insomniaService.hasInsomniaEnabled(player)){ String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_NOT_SLEEPY) .setWorld(world) .build(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java index c089f76..bf19fc4 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.services.InsomniaService; import me.mrgeneralq.sleepmost.statics.DataContainer; import org.bukkit.World; import org.bukkit.entity.Player; @@ -19,13 +20,15 @@ public class PlayerBedEnterEventListener implements Listener { private final IFlagsRepository flagsRepository; private final IBossBarService bossBarService; private final IWorldPropertyService worldPropertyService; + private final IInsomniaService insomniaService; public PlayerBedEnterEventListener(ISleepService sleepService, IMessageService messageService, ICooldownService cooldownService, IFlagsRepository flagsRepository, IBossBarService bossBarService, - IWorldPropertyService worldPropertyService + IWorldPropertyService worldPropertyService, + IInsomniaService insomniaService ) { this.sleepService = sleepService; this.messageService = messageService; @@ -33,6 +36,7 @@ public PlayerBedEnterEventListener(ISleepService sleepService, this.flagsRepository = flagsRepository; this.bossBarService = bossBarService; this.worldPropertyService = worldPropertyService; + this.insomniaService = insomniaService; this.dataContainer = DataContainer.getContainer(); } @@ -74,7 +78,7 @@ public void onPlayerBedEnter(PlayerBedEnterEvent e) { } - if(this.worldPropertyService.getWorldProperties(world).isInsomniaEnabled()){ + if(this.insomniaService.hasInsomniaEnabled(player)){ String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_NOT_SLEEPY) .setWorld(world) .setPlayer(player) diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java index 48e0058..8fa9f8f 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java @@ -38,6 +38,9 @@ public PlayerJoinEventListener(Plugin plugin, IUpdateService updateService, IMes public void onPlayerJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); + + //if player does not exist yet, register. Avoid players disconnecting and reconnecting to reset their profile + if(this.sleepMostPlayerService.playerExists(player)) this.sleepMostPlayerService.registerNewPlayer(player); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java index d7d8a44..3f69fe9 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java @@ -3,6 +3,7 @@ import me.mrgeneralq.sleepmost.enums.TimeCycle; import me.mrgeneralq.sleepmost.events.TimeCycleChangeEvent; import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; +import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; import me.mrgeneralq.sleepmost.models.WorldProperty; @@ -20,12 +21,14 @@ public class TimeCycleChangeEventListener implements Listener { private final ISleepService sleepService; private final IWorldPropertyService worldPropertyService; private final IFlagsRepository flagsRepository; + private final IInsomniaService insomniaService; - public TimeCycleChangeEventListener(ISleepService sleepService, IWorldPropertyService worldPropertyService, IFlagsRepository flagsRepository) { + public TimeCycleChangeEventListener(ISleepService sleepService, IWorldPropertyService worldPropertyService, IFlagsRepository flagsRepository, IInsomniaService insomniaService) { this.sleepService = sleepService; this.worldPropertyService = worldPropertyService; this.flagsRepository = flagsRepository; + this.insomniaService = insomniaService; } @EventHandler @@ -65,8 +68,9 @@ private void checkInsomnia(World world){ if(!randomInsomnia) return; - properties.setInsomniaEnabled(true); - this.worldPropertyService.setWorldProperty(world, properties); + this.insomniaService.enableInsomnia(world); + //properties.setInsomniaEnabled(true); + //this.worldPropertyService.setWorldProperty(world, properties); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java index 5b03257..05c25c2 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IInsomniaService.java @@ -10,4 +10,5 @@ public interface IInsomniaService { void disableInsomnia(Player player, World world); void disableInsomnia(World world); + boolean hasInsomniaEnabled(Player player); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java index 231800f..edcf4b9 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java @@ -12,4 +12,5 @@ public interface ISleepMostPlayerService { void unregisterPlayer(OfflinePlayer playerId); void registerNewPlayer(OfflinePlayer offlinePlayer); + boolean playerExists(OfflinePlayer offlinePlayer); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java new file mode 100644 index 0000000..15c0ee2 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java @@ -0,0 +1,23 @@ +package me.mrgeneralq.sleepmost.models; + +import org.bukkit.Bukkit; +import org.bukkit.World; + +import java.util.UUID; + +public class SleepMostWorld { + + private final UUID worldUUID; + + + public SleepMostWorld(World world){ + this.worldUUID = world.getUID(); + } + + public World getWorld(){ + return Bukkit.getWorld(this.worldUUID); + } + + + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java b/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java index 49893a7..f11059a 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java @@ -9,6 +9,7 @@ public class WorldProperty { private TimeCycle timeCycle = TimeCycle.UNKNOWN; + /* public boolean isInsomniaEnabled() { return insomniaEnabled; } @@ -17,6 +18,8 @@ public void setInsomniaEnabled(boolean insomniaEnabled) { this.insomniaEnabled = insomniaEnabled; } + */ + public TimeCycle getTimeCycle() { return timeCycle; } diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java index 0250900..9773b22 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java @@ -3,6 +3,7 @@ import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.enums.TimeCycle; import me.mrgeneralq.sleepmost.events.TimeCycleChangeEvent; +import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; import me.mrgeneralq.sleepmost.models.WorldProperty; @@ -18,10 +19,12 @@ public class Heartbeat extends BukkitRunnable { private final ISleepService sleepService; private final IWorldPropertyService worldPropertyService; + private final IInsomniaService insomniaService; - public Heartbeat(ISleepService sleepService, IWorldPropertyService worldPropertyService) { + public Heartbeat(ISleepService sleepService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService) { this.sleepService = sleepService; this.worldPropertyService = worldPropertyService; + this.insomniaService = insomniaService; } @Override @@ -31,7 +34,6 @@ public void run() { { updateTimeCycle(world); - checkInsomniaResetRequired(world); SleepSkipCause cause = this.sleepService.getCurrentSkipCause(world); @@ -47,9 +49,8 @@ private void checkInsomniaResetRequired(World world){ WorldProperty properties = this.worldPropertyService.getWorldProperties(world); - if(!sleepService.isNight(world) && properties.isInsomniaEnabled()) { - properties.setInsomniaEnabled(false); - this.worldPropertyService.setWorldProperty(world, properties); + if(!sleepService.isNight(world)) { + this.insomniaService.disableInsomnia(world); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java b/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java index 2694b8a..8d55386 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/InsomniaService.java @@ -34,4 +34,9 @@ public void disableInsomnia(World world) { for(Player p: world.getPlayers()) this.disableInsomnia(p, world); } + + @Override + public boolean hasInsomniaEnabled(Player player){ + return this.sleepMostPlayerService.getPlayer(player).getInsomniaStatus(player.getWorld()); + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java index 038e41c..c9c69ae 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java @@ -33,4 +33,9 @@ public void registerNewPlayer(OfflinePlayer offlinePlayer) { SleepMostPlayer player = new SleepMostPlayer(offlinePlayer); this.repository.set(offlinePlayer.getUniqueId(), player); } + + @Override + public boolean playerExists(OfflinePlayer offlinePlayer){ + return this.repository.exists(offlinePlayer.getUniqueId()); + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index c16ed19..2c258f4 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -26,6 +26,7 @@ public class Bootstrapper { private IBossBarService bossBarService; private IPlayerService playerService; private ISleepMostPlayerService sleepMostPlayerService; + private IInsomniaService insomniaService; private WorldPropertyRepository worldPropertyRepository; private IWorldPropertyService worldPropertyService; @@ -41,7 +42,7 @@ public void initialize(Sleepmost main){ this.sleepMostPlayerService = new SleepMostPlayerService(new SleepMostPlayerRepository()); - + this.insomniaService = new InsomniaService(this.sleepMostPlayerService); this.configRepository = new ConfigRepository(main); this.configService = new ConfigService(main); this.flagsRepository = new FlagsRepository(configRepository); @@ -155,4 +156,8 @@ public IPlayerService getPlayerService() { public ISleepMostPlayerService getSleepMostPlayerService() { return sleepMostPlayerService; } + + public IInsomniaService getInsomniaService() { + return insomniaService; + } } From 4d148467c54ae97e4244efeda2871f5cc3bc6f99 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sat, 20 Aug 2022 17:10:03 +0200 Subject: [PATCH 09/25] fix --- .../sleepmost/eventlisteners/PlayerJoinEventListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java index 8fa9f8f..b7574cf 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerJoinEventListener.java @@ -40,7 +40,7 @@ public void onPlayerJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); //if player does not exist yet, register. Avoid players disconnecting and reconnecting to reset their profile - if(this.sleepMostPlayerService.playerExists(player)) + if(!this.sleepMostPlayerService.playerExists(player)) this.sleepMostPlayerService.registerNewPlayer(player); From a2b01e6eb87605714db383101c719d86c60fc4e5 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 13:23:11 +0200 Subject: [PATCH 10/25] pre-timer tasks --- src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 467cbae..cb29320 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -81,11 +81,10 @@ public void onEnable() { pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); - + runPlayerTasks(); runPreTimerTasks(); runTimers(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()); - } public static Sleepmost getInstance() { From 4ed73b0c282c58d04fe4d2d4ead225b3427cc485 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 14:30:06 +0200 Subject: [PATCH 11/25] added the milk consumption --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 2 + .../sleepmost/enums/MessageKey.java | 3 ++ .../PlayerConsumeEventListener.java | 50 +++++++++++++++++++ .../PlayerQuitEventListener.java | 1 - .../sleepmost/flags/InsomniaMilkFlag.java | 12 +++++ .../interfaces/IFlagsRepository.java | 2 + .../sleepmost/mappers/MessageMapper.java | 5 ++ .../repositories/FlagsRepository.java | 7 +++ 8 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerConsumeEventListener.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/flags/InsomniaMilkFlag.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index cb29320..11a8e5d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -79,6 +79,8 @@ public void onEnable() { pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()),this); pm.registerEvents(new PlayerSleepStateChangeEventListener(this, bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService()), this); pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); + pm.registerEvents(new PlayerConsumeEventListener(bootstrapper.getSleepService(), bootstrapper.getInsomniaService(), bootstrapper.getMessageService(), bootstrapper.getFlagsRepository()), this); + Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); runPlayerTasks(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java b/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java index d2c3aed..3d0507c 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java +++ b/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java @@ -31,9 +31,12 @@ public enum MessageKey { SPECIFY_PLAYER, TARGET_NOT_SLEEPING, TARGET_NOT_ONLINE, + INSOMNIA_NOT_SLEEPY, INSOMNIA_ALREADY_ENABLED, INSOMNIA_ENABLED, + INSOMNIA_FEELING_SLEEPY, + CMD_ONLY_DURING_NIGHT, KICK_OUT_BED, KICKED_PLAYER_FROM_BED, diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerConsumeEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerConsumeEventListener.java new file mode 100644 index 0000000..6808d16 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerConsumeEventListener.java @@ -0,0 +1,50 @@ +package me.mrgeneralq.sleepmost.eventlisteners; + +import me.mrgeneralq.sleepmost.enums.MessageKey; +import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; +import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; +import me.mrgeneralq.sleepmost.interfaces.IMessageService; +import me.mrgeneralq.sleepmost.interfaces.ISleepService; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; + +public class PlayerConsumeEventListener implements Listener { + + + private final ISleepService sleepService; + private final IInsomniaService insomniaService; + private final IMessageService messageService; + private final IFlagsRepository flagsRepository; + + public PlayerConsumeEventListener(ISleepService sleepService, IInsomniaService insomniaService, IMessageService messageService, IFlagsRepository flagsRepository) { + this.sleepService = sleepService; + this.insomniaService = insomniaService; + this.messageService = messageService; + this.flagsRepository = flagsRepository; + } + + @EventHandler + public void onPlayerConsume(PlayerItemConsumeEvent e){ + + Player player = e.getPlayer(); + World world = player.getWorld(); + + if(!this.sleepService.isEnabledAt(world)) + return; + + if(!this.flagsRepository.getInsomniaMilkFlag().getValueAt(world)) + return; + + if(e.getItem().getType() != Material.MILK_BUCKET) + return; + + this.insomniaService.disableInsomnia(player, world); + this.messageService.sendMessage(player, this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_FEELING_SLEEPY).build()); + + } + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java index caf773f..df17da0 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerQuitEventListener.java @@ -29,7 +29,6 @@ public PlayerQuitEventListener(ICooldownService cooldownService, ISleepService s public void onPlayerLeave(PlayerQuitEvent e){ Player player = e.getPlayer(); - this.sleepMostPlayerService.unregisterPlayer(player); if(ServerVersion.CURRENT_VERSION.supportsBossBars()) this.bossBarService.unregisterPlayer(player.getWorld(), player); diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/InsomniaMilkFlag.java b/src/main/java/me/mrgeneralq/sleepmost/flags/InsomniaMilkFlag.java new file mode 100644 index 0000000..ef74e33 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/InsomniaMilkFlag.java @@ -0,0 +1,12 @@ +package me.mrgeneralq.sleepmost.flags; + +import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; +import me.mrgeneralq.sleepmost.flags.types.BooleanFlag; + +public class InsomniaMilkFlag extends BooleanFlag +{ + public InsomniaMilkFlag(AbstractFlagController controller) + { + super("insomnia-milk", controller, false); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java index 9ee9619..dd7a7ea 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java @@ -56,4 +56,6 @@ public interface IFlagsRepository PhantomResetAudienceFlag getPhantomResetAudienceFlag(); AllowKickFlag getAllowKickFlag(); + + InsomniaMilkFlag getInsomniaMilkFlag(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java index 8245f7c..29c8be4 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java @@ -50,8 +50,12 @@ public void loadMessages(){ this.messages.put(MessageKey.TARGET_NOT_SLEEPING, new ConfigMessage("admin.target-not-sleeping", "&cThe player is not sleeping")); this.messages.put(MessageKey.TARGET_NOT_ONLINE, new ConfigMessage("admin.target-not-online", "&cThe player is not online")); this.messages.put(MessageKey.INSOMNIA_NOT_SLEEPY, new ConfigMessage("user.insomnia-not-sleepy", "&cYou don`t feel sleepy at the moment")); + this.messages.put(MessageKey.INSOMNIA_FEELING_SLEEPY, new ConfigMessage("user.insomnia-feeling-sleepy", "&bYou start feeling sleepy ...")); + this.messages.put(MessageKey.INSOMNIA_ALREADY_ENABLED, new ConfigMessage("admin.insomnia-already-enabled", "&cInsomnia is already enabled in this world")); this.messages.put(MessageKey.INSOMNIA_ENABLED, new ConfigMessage("admin.insomnia-enabled", "&bInsomnia is enabled")); + + this.messages.put(MessageKey.CMD_ONLY_DURING_NIGHT, new ConfigMessage("admin.only-during-night-command", "&cThis command can only be used during the night")); this.messages.put(MessageKey.KICK_OUT_BED, new ConfigMessage("admin.kick-out-bed", "&c&l[kick out]")); this.messages.put(MessageKey.KICKED_PLAYER_FROM_BED, new ConfigMessage("user.kicked-player-from-bed", "&bYou kicked &a%player% &bout of their bed")); @@ -67,6 +71,7 @@ public void loadMessages(){ this.messages.put(MessageKey.STORM_SKIPPED_SUBTITLE, new ConfigMessage("user.storm-skipped-subtitle", "&bWhat a weather...")); + } public ConfigMessage getMessage(MessageKey message){ diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java index 80813b9..5a77e66 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java @@ -46,6 +46,7 @@ public class FlagsRepository implements IFlagsRepository { private final InsomniaChanceFlag insomniaChanceFlag; private final PhantomResetAudienceFlag phantomResetAudienceFlag; private final AllowKickFlag allowKickFlag; + private final InsomniaMilkFlag insomniaMilkFlag; public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.nightcycleAnimationFlag = new NightcycleAnimationFlag(new ConfigFlagController<>(configRepository))); @@ -81,6 +82,7 @@ public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.insomniaChanceFlag = new InsomniaChanceFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.phantomResetAudienceFlag = new PhantomResetAudienceFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.allowKickFlag = new AllowKickFlag(new ConfigFlagController<>(configRepository))); + setupFlag(this.insomniaMilkFlag = new InsomniaMilkFlag(new ConfigFlagController<>(configRepository))); } @Override @@ -272,6 +274,11 @@ public AllowKickFlag getAllowKickFlag() { return allowKickFlag; } + @Override + public InsomniaMilkFlag getInsomniaMilkFlag() { + return insomniaMilkFlag; + } + private void setupFlag(ISleepFlag flag) { //register the flag this.flagByName.put(flag.getName(), flag); From a96a31825f335b65db450e16c30a32ddb1312269 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 15:31:46 +0200 Subject: [PATCH 12/25] added the milk consumption --- .../java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java | 6 +++--- .../me/mrgeneralq/sleepmost/services/MessageService.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java index 29c8be4..542ebf5 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java @@ -21,8 +21,9 @@ public static MessageMapper getMapper(){ public void loadMessages(){ this.messages.put(MessageKey.PREFIX, new ConfigMessage("prefix", "&7[&bSleep-Most&7]")); - this.messages.put(MessageKey.NIGHT_SKIPPED, new ConfigMessage("user.night-skipped-chat", "&aNight skipped")); - this.messages.put(MessageKey.STORM_SKIPPED, new ConfigMessage("user.storm-skipped-chat", "&eStorm skipped")); + this.messages.put(MessageKey.NIGHT_SKIPPED, new ConfigMessage("user.night-skipped-chat", "&aGood morning, %player%!")); + this.messages.put(MessageKey.STORM_SKIPPED, new ConfigMessage("user.storm-skipped-chat", "&aThe sky is clearing!")); + this.messages.put(MessageKey.PLAYERS_LEFT_TO_SKIP_NIGHT, new ConfigMessage("user.players-left-night", "&bSleeping to skip night &f[&c%sleeping%/%required%&f]&b!")); this.messages.put(MessageKey.PLAYERS_LEFT_TO_SKIP_STORM, new ConfigMessage("user.players-left-storm", "&bSleeping to skip the storm &f[&c%sleeping%/%required%&f]&b!")); this.messages.put(MessageKey.SLEEP_PREVENTED, new ConfigMessage("user.sleep-prevented", "&cYou cannot sleep in this world!")); @@ -71,7 +72,6 @@ public void loadMessages(){ this.messages.put(MessageKey.STORM_SKIPPED_SUBTITLE, new ConfigMessage("user.storm-skipped-subtitle", "&bWhat a weather...")); - } public ConfigMessage getMessage(MessageKey message){ diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/MessageService.java b/src/main/java/me/mrgeneralq/sleepmost/services/MessageService.java index a56d553..cae3d39 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/MessageService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/MessageService.java @@ -135,14 +135,15 @@ public void sendNightSkippedMessage(World world, String lastSleeperName, String for(Player p: world.getPlayers()){ String skipMessage = this.getMessage(message) - .setPlayer(lastSleeperName) + .setPlayer(p) + .setPlaceHolder("%last-sleeper%", lastSleeperName) + .setPlaceHolder("%dlast-sleeper%", lastSleeperDisplayName) .setWorld(world) .build(); this.sendMessage(p , skipMessage); } - } @Override From 7323ef778550c59faba41589416187396e27b24f Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 17:35:17 +0200 Subject: [PATCH 13/25] debug command, service, and logic implemented --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 2 +- .../sleepmost/builders/MessageBuilder.java | 8 ++ .../sleepmost/commands/SleepmostCommand.java | 23 +++++- .../commands/subcommands/DebugSubCommand.java | 47 ++++++++++++ .../sleepmost/interfaces/IDebugService.java | 14 ++++ .../interfaces/ISleepMostPlayerService.java | 5 +- .../sleepmost/models/SleepMostPlayer.java | 10 +++ .../SleepMostPlayerRepository.java | 7 ++ .../sleepmost/services/DebugService.java | 47 ++++++++++++ .../services/SleepMostPlayerService.java | 7 ++ .../sleepmost/services/SleepService.java | 74 +++++++++++++------ .../sleepmost/statics/Bootstrapper.java | 15 ++-- .../sleepmost/services/SleepServiceTest.java | 3 +- 13 files changed, 229 insertions(+), 33 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/DebugSubCommand.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/interfaces/IDebugService.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 11a8e5d..eb1cc55 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -53,7 +53,7 @@ public void onEnable() { this.registerBossBars(); //init commands - SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService(), bootstrapper.getInsomniaService()); + SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService(), bootstrapper.getInsomniaService(), bootstrapper.getDebugService()); getCommand("sleepmost").setExecutor(sleepmostCommand); PluginManager pm = Bukkit.getPluginManager(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/builders/MessageBuilder.java b/src/main/java/me/mrgeneralq/sleepmost/builders/MessageBuilder.java index 1fa4026..803da4a 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/builders/MessageBuilder.java +++ b/src/main/java/me/mrgeneralq/sleepmost/builders/MessageBuilder.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.statics.ChatColorUtils; +import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.Player; @@ -83,4 +84,11 @@ public MessageBuilder setPlayer(String playerName){ this.message = message.replaceAll("%player%", playerName); return this; } + + public MessageBuilder setEnabledStatus(boolean enabledStatus){ + + String status = (enabledStatus) ? ChatColor.GREEN + "enabled" : ChatColor.RED + "disabled"; + this.message = message.replaceAll("%status%", status); + return this; + } } \ No newline at end of file diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java index de3a515..761de3a 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java @@ -28,8 +28,22 @@ public class SleepmostCommand implements CommandExecutor, TabCompleter { private final IWorldPropertyService worldPropertyService; private final ISleepMostPlayerService sleepMostPlayerService; private final IInsomniaService insomniaService; - - public SleepmostCommand(ISleepService sleepService, IMessageService messageService, IUpdateService updateService, IFlagService flagService, IFlagsRepository flagsRepository, IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostPlayerService sleepMostPlayerService, IInsomniaService insomniaService){ + private final IDebugService debugService; + + public SleepmostCommand( + ISleepService sleepService, + IMessageService messageService, + IUpdateService updateService, + IFlagService flagService, + IFlagsRepository flagsRepository, + IConfigRepository configRepository, + ICooldownService cooldownService, + IBossBarService bossBarService, + IWorldPropertyService worldPropertyService, + ISleepMostPlayerService sleepMostPlayerService, + IInsomniaService insomniaService, + IDebugService debugService + ){ this.sleepService = sleepService; this.messageService = messageService; this.updateService = updateService; @@ -41,6 +55,7 @@ public SleepmostCommand(ISleepService sleepService, IMessageService messageServi this.worldPropertyService = worldPropertyService; this.sleepMostPlayerService = sleepMostPlayerService; this.insomniaService = insomniaService; + this.debugService = debugService; this.registerSubCommands(); } @@ -59,7 +74,8 @@ private void registerSubCommands(){ subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService, this.sleepMostPlayerService, this.insomniaService)); subCommands.put("getflag", new GetFlagSubCommand(this.messageService, this.flagsRepository)); subCommands.put("resetflag", new ResetFlagSubCommand(this.messageService, this.flagsRepository, this.flagService)); - + subCommands.put("debug", new DebugSubCommand(this.debugService, this.messageService)); + //enable when debugging //subCommands.put("test", new TestCommand(this.messageService, this.flagsRepository, this.configRepository)); } @@ -91,6 +107,7 @@ public boolean onCommand(CommandSender sender, Command command, String commandLa sender.sendMessage(colorize("&e/sm kick &fkick a player from the bed")); sender.sendMessage(colorize("&e/sm insomnia &fBlock sleeping for the current night")); sender.sendMessage(colorize("&e/sm getflag &fQuickly grab a flag's value in your world")); + sender.sendMessage(colorize("&e/sm debug &fToggle debugging mode for your player")); return true; } diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/DebugSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/DebugSubCommand.java new file mode 100644 index 0000000..3219aa9 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/DebugSubCommand.java @@ -0,0 +1,47 @@ +package me.mrgeneralq.sleepmost.commands.subcommands; + +import me.mrgeneralq.sleepmost.enums.MessageKey; +import me.mrgeneralq.sleepmost.interfaces.IDebugService; +import me.mrgeneralq.sleepmost.interfaces.IMessageService; +import me.mrgeneralq.sleepmost.interfaces.ISleepService; +import me.mrgeneralq.sleepmost.interfaces.ISubCommand; +import me.mrgeneralq.sleepmost.statics.CommandSenderUtils; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DebugSubCommand implements ISubCommand { + + private final IDebugService debugService; + private final IMessageService messageService; + + public DebugSubCommand(IDebugService debugService, IMessageService messageService) { + this.debugService = debugService; + this.messageService = messageService; + } + + @Override + public boolean executeCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + + if(!CommandSenderUtils.hasWorld(sender)){ + this.messageService.sendMessage(sender,messageService.getMessagePrefixed(MessageKey.NO_CONSOLE_COMMAND).build()); + return true; + } + + Player player = (Player) sender; + World world = CommandSenderUtils.getWorldOf(sender); + + boolean debuggingIsEnabled = this.debugService.isEnabledFor(player); + + if(debuggingIsEnabled) + this.debugService.disableFor(player); + else + this.debugService.enableFor(player); + + this.messageService.sendMessage(player, + this.messageService.getMessagePrefixed("&bDebug mode: %status%") + .setEnabledStatus(!debuggingIsEnabled).build()); + return true; + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IDebugService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IDebugService.java new file mode 100644 index 0000000..df37a42 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IDebugService.java @@ -0,0 +1,14 @@ +package me.mrgeneralq.sleepmost.interfaces; + +import org.bukkit.entity.Player; + +public interface IDebugService { + + void enableFor(Player player); + void disableFor(Player player); + + boolean isEnabledFor(Player player); + + void print(String logMsg); + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java index edcf4b9..5e09330 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostPlayerService.java @@ -3,7 +3,8 @@ import me.mrgeneralq.sleepmost.models.SleepMostPlayer; import org.bukkit.OfflinePlayer; -import java.util.UUID; +import java.util.List; + public interface ISleepMostPlayerService { @@ -13,4 +14,6 @@ public interface ISleepMostPlayerService { void registerNewPlayer(OfflinePlayer offlinePlayer); boolean playerExists(OfflinePlayer offlinePlayer); + + List getAllPlayers(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java index 9bca6e0..ded51f1 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java @@ -14,6 +14,8 @@ public class SleepMostPlayer { private final Map worldInsomniaStatus = new HashMap<>(); private boolean hasInsomnia = false; + private boolean debugMode = false; + public SleepMostPlayer(OfflinePlayer player) { this.player = player; @@ -38,4 +40,12 @@ public void setInsomniaStatus(World world, boolean hasInsomnia){ public boolean getInsomniaStatus(World world){ return this.worldInsomniaStatus.getOrDefault(world.getUID(), false); } + + public boolean hasDebugMode() { + return debugMode; + } + + public void setDebugMode(boolean debugMode) { + this.debugMode = debugMode; + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java index de24704..385e9ad 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java @@ -2,10 +2,13 @@ import me.mrgeneralq.sleepmost.interfaces.IRepository; import me.mrgeneralq.sleepmost.models.SleepMostPlayer; +import org.bukkit.OfflinePlayer; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; public class SleepMostPlayerRepository implements IRepository { @@ -26,6 +29,10 @@ public boolean exists(UUID playerId) { return this.playerMap.containsKey(playerId); } + public List getAll(){ + return this.playerMap.values().stream().collect(Collectors.toList()); + } + @Override public void remove(UUID playerId) { this.playerMap.remove(playerId); diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java new file mode 100644 index 0000000..befd975 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java @@ -0,0 +1,47 @@ +package me.mrgeneralq.sleepmost.services; + +import me.mrgeneralq.sleepmost.interfaces.IDebugService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; +import me.mrgeneralq.sleepmost.models.SleepMostPlayer; +import me.mrgeneralq.sleepmost.statics.ChatColorUtils; +import org.bukkit.entity.Player; + +import java.util.stream.Collectors; + +public class DebugService implements IDebugService { + + private final ISleepMostPlayerService sleepMostPlayerService; + + public DebugService(ISleepMostPlayerService sleepMostPlayerService) { + this.sleepMostPlayerService = sleepMostPlayerService; + } + + @Override + public void enableFor(Player player) { + this.sleepMostPlayerService.getPlayer(player).setDebugMode(true); + } + + @Override + public void disableFor(Player player) { + this.sleepMostPlayerService.getPlayer(player).setDebugMode(false); + } + + @Override + public boolean isEnabledFor(Player player){ + return this.sleepMostPlayerService.getPlayer(player).hasDebugMode(); + } + + @Override + public void print(String logMsg) { + + for(SleepMostPlayer p: this.sleepMostPlayerService.getAllPlayers() + .stream() + .filter(SleepMostPlayer::hasDebugMode) + .filter(p -> p.getPlayer().isOnline()) + .collect(Collectors.toList())){ + + p.getPlayer().getPlayer().sendMessage(ChatColorUtils.colorize(logMsg)); + + } + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java index c9c69ae..4e765db 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java @@ -5,6 +5,8 @@ import me.mrgeneralq.sleepmost.repositories.SleepMostPlayerRepository; import org.bukkit.OfflinePlayer; +import java.util.List; + public class SleepMostPlayerService implements ISleepMostPlayerService { SleepMostPlayerRepository repository; @@ -38,4 +40,9 @@ public void registerNewPlayer(OfflinePlayer offlinePlayer) { public boolean playerExists(OfflinePlayer offlinePlayer){ return this.repository.exists(offlinePlayer.getUniqueId()); } + + @Override + public List getAllPlayers(){ + return this.repository.getAll(); + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java index 8ae976b..a8aaeee 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java @@ -6,19 +6,18 @@ import me.mrgeneralq.sleepmost.events.PlayerSleepStateChangeEvent; import me.mrgeneralq.sleepmost.interfaces.*; import me.mrgeneralq.sleepmost.runnables.NightcycleAnimationTask; +import me.mrgeneralq.sleepmost.statics.ChatColorUtils; import me.mrgeneralq.sleepmost.statics.DataContainer; import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.events.SleepSkipEvent; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.entity.Player; import static me.mrgeneralq.sleepmost.enums.SleepSkipCause.*; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -30,6 +29,7 @@ public class SleepService implements ISleepService { private final IFlagsRepository flagsRepository; private final IFlagService flagService; private final IPlayerService playerService; + private final IDebugService debugService; private final DataContainer dataContainer = DataContainer.getContainer(); private static final int @@ -42,7 +42,8 @@ public SleepService( IConfigRepository configRepository, IFlagsRepository flagsRepository, IFlagService flagService, - IPlayerService playerService + IPlayerService playerService, + IDebugService debugService ) { this.main = main; @@ -51,6 +52,7 @@ public SleepService( this.flagsRepository = flagsRepository; this.flagService = flagService; this.playerService = playerService; + this.debugService = debugService; } @Override @@ -86,37 +88,61 @@ public List getSleepers(World world){ @Override public int getPlayerCountInWorld(World world) { - Stream playersStream = world.getPlayers().stream(); + + List playersList = world.getPlayers(); + + + this.debugService.print(String.format("&c[%s] &fTotal players[%s]: &e%s", world.getName(), playersList.size() , getJoinedStream(playersList))); //exclude fake players - playersStream = playersStream.filter(this.playerService::isRealPlayer); + playersList = playersList.stream().filter(this.playerService::isRealPlayer).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fReal players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + // If flag is active, ignore players in spectator mode from sleep count. - if (flagsRepository.getExemptSpectatorFlag().getValueAt(world)) - playersStream = playersStream.filter(p -> p.getGameMode() != GameMode.SPECTATOR); + if (flagsRepository.getExemptSpectatorFlag().getValueAt(world)){ + playersList = playersList.stream().filter(p -> p.getGameMode() != GameMode.SPECTATOR).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fNon-spectator players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + } + // If flag is active, ignore players in creative mode from sleep count. - if(flagsRepository.getExemptCreativeFlag().getValueAt(world)) - playersStream = playersStream.filter(p -> p.getGameMode() != GameMode.CREATIVE); + if(flagsRepository.getExemptCreativeFlag().getValueAt(world)){ + playersList = playersList.stream().filter(p -> p.getGameMode() != GameMode.CREATIVE).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fNon-creative players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + } - if(flagsRepository.getUseExemptFlag().getValueAt(world)) - playersStream = playersStream.filter(p -> !p.hasPermission("sleepmost.exempt")); - if(flagsRepository.getExemptFlyingFlag().getValueAt(world)) - playersStream = playersStream.filter(p -> !p.isFlying()); + if(flagsRepository.getUseExemptFlag().getValueAt(world)){ + playersList = playersList.stream().filter(p -> !p.hasPermission("sleepmost.exempt")).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fBypass permission (sleepmost.exempt) players [%s]: &e%s", world.getName() , Stream.of(playersList.size()) , getJoinedStream(playersList))); + } + + if(flagsRepository.getExemptFlyingFlag().getValueAt(world)){ + playersList = playersList.stream().filter(p -> !p.isFlying()).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fNon flying players [%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + } + + if (flagService.isAfkFlagUsable() && flagsRepository.getUseAfkFlag().getValueAt(world)){ + playersList = playersList.stream().filter(p -> PlaceholderAPI.setPlaceholders(p, "%essentials_afk%").equalsIgnoreCase("no")).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fNon AFK players [%s]: &e%s", world.getName(), playersList.size() , getJoinedStream(playersList))); + } - if (flagService.isAfkFlagUsable() && flagsRepository.getUseAfkFlag().getValueAt(world)) - playersStream = playersStream.filter(p -> PlaceholderAPI.setPlaceholders(p, "%essentials_afk%").equalsIgnoreCase("no")); + int belowYFlagValue = flagsRepository.getExemptBelowYFlag().getValueAt(world); + if(belowYFlagValue > -1){ + playersList = playersList.stream().filter(p -> p.getLocation().getY() > belowYFlagValue).collect(Collectors.toList()); + this.debugService.print(String.format("&c[%s] &fPlayers above %sY-coord [%s]: &e%s", world.getName() , belowYFlagValue, playersList.size() , getJoinedStream(playersList))); + } - int belowYFlagValue = flagsRepository.getExemptBelowYFlag().getValueAt(world); - if(belowYFlagValue > -1) - playersStream = playersStream.filter(p -> p.getLocation().getY() > belowYFlagValue); + int playerCount = (int) playersList.size(); + int endResult = playerCount == 0? 1: playerCount; - int playerCount = (int) playersStream.count(); + this.debugService.print(String.format("&c[%s] &fCalculated end TOTAL: [%s]: &e%s", world.getName() , endResult , getJoinedStream(playersList))); - return playerCount == 0? 1: playerCount; + return endResult; } + @Override public double getSleepersPercentage(World world) { return (double)getSleepersAmount(world) / (double)getRequiredSleepersCount(world); @@ -240,4 +266,8 @@ public void runSkipAnimation(Player player, SleepSkipCause sleepSkipCause) { private Stream getRealPlayers(World world){ return world.getPlayers().stream().filter(p -> Bukkit.getPlayer(p.getUniqueId()) != null); } + + private String getJoinedStream(List list){ + return list.stream().map(Player::getName).collect(Collectors.joining(",")); + } } \ No newline at end of file diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index 2c258f4..baea325 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -27,6 +27,7 @@ public class Bootstrapper { private IPlayerService playerService; private ISleepMostPlayerService sleepMostPlayerService; private IInsomniaService insomniaService; + private IDebugService debugService; private WorldPropertyRepository worldPropertyRepository; private IWorldPropertyService worldPropertyService; @@ -42,6 +43,10 @@ public void initialize(Sleepmost main){ this.sleepMostPlayerService = new SleepMostPlayerService(new SleepMostPlayerRepository()); + + //do not move lower. Debugging required in several spots + this.debugService = new DebugService(this.sleepMostPlayerService); + this.insomniaService = new InsomniaService(this.sleepMostPlayerService); this.configRepository = new ConfigRepository(main); this.configService = new ConfigService(main); @@ -56,12 +61,10 @@ public void initialize(Sleepmost main){ this.cooldownRepository = new CooldownRepository(); this.cooldownService = new CooldownService(cooldownRepository, configRepository); - this.flagService = new FlagService(flagsRepository, configRepository, configService, messageService); this.playerService = new PlayerService(); - - this.sleepService = new SleepService(main, configService, configRepository, flagsRepository, flagService, playerService); + this.sleepService = new SleepService(main, configService, configRepository, flagsRepository, flagService, playerService, debugService); this.worldPropertyRepository = new WorldPropertyRepository(); this.worldPropertyService = new WorldPropertyService(this.worldPropertyRepository); @@ -69,8 +72,6 @@ public void initialize(Sleepmost main){ this.configMessageMapper = ConfigMessageMapper.getMapper(); this.configMessageMapper.initialize(main); - - //check if boss bars are supported if(ServerVersion.CURRENT_VERSION.supportsBossBars()){ this.bossBarRepository = new BossBarRepository(); @@ -160,4 +161,8 @@ public ISleepMostPlayerService getSleepMostPlayerService() { public IInsomniaService getInsomniaService() { return insomniaService; } + + public IDebugService getDebugService() { + return debugService; + } } diff --git a/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java b/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java index 201b538..e5fb9a4 100644 --- a/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java +++ b/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java @@ -31,6 +31,7 @@ public class SleepServiceTest { private IFlagsRepository mockFlagRepository; private IFlagService mockFlagService; private IPlayerService playerService; + private IDebugService debugService; @BeforeEach public void setUp() { @@ -41,7 +42,7 @@ public void setUp() { this.mockFlagRepository = mock(IFlagsRepository.class); this.mockFlagService = mock(IFlagService.class); this.playerService = mock(IPlayerService.class); - this.sleepService = new SleepService(this.mockSleepmost, this.mockConfigService, this.mockConfigRepository,this.mockFlagRepository,this.mockFlagService, this.playerService); + this.sleepService = new SleepService(this.mockSleepmost, this.mockConfigService, this.mockConfigRepository,this.mockFlagRepository,this.mockFlagService, this.playerService, this.debugService); } @Test From b949633469e66b1c65bb2f0ac52e2c78e0f45d37 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 20:10:42 +0200 Subject: [PATCH 14/25] debug command, service, and logic implemented --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 2 - .../sleepmost/interfaces/IConfigService.java | 1 + .../sleepmost/services/ConfigService.java | 5 ++ .../sleepmost/services/DebugService.java | 9 ++- .../sleepmost/services/SleepService.java | 63 +++++++++++++------ .../sleepmost/statics/Bootstrapper.java | 7 ++- src/main/resources/config.yml | 5 +- 7 files changed, 65 insertions(+), 27 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index eb1cc55..6521052 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -72,7 +72,6 @@ public void onEnable() { pm.registerEvents(new TimeSkipEventListener(bootstrapper.getSleepService()), this); } - pm.registerEvents(new SleepSkipEventListener(bootstrapper.getMessageService(), bootstrapper.getConfigService(), bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService()), this); pm.registerEvents(new WorldChangeEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new PlayerBedLeaveEventListener(bootstrapper.getSleepService()), this); @@ -81,7 +80,6 @@ public void onEnable() { pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); pm.registerEvents(new PlayerConsumeEventListener(bootstrapper.getSleepService(), bootstrapper.getInsomniaService(), bootstrapper.getMessageService(), bootstrapper.getFlagsRepository()), this); - Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); runPlayerTasks(); runPreTimerTasks(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IConfigService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IConfigService.java index bb28119..70fcb73 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IConfigService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IConfigService.java @@ -9,5 +9,6 @@ public interface IConfigService { int getResetTime(); boolean updateCheckerEnabled(); Set getEnabledWorlds(); + boolean debugModeEnabled(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/ConfigService.java b/src/main/java/me/mrgeneralq/sleepmost/services/ConfigService.java index 4821870..99d601a 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/ConfigService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/ConfigService.java @@ -39,4 +39,9 @@ public Set getEnabledWorlds() .filter(Objects::nonNull) .collect(toSet()); } + + @Override + public boolean debugModeEnabled() { + return main.getConfig().getBoolean("debug-mode"); + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java index befd975..e404f83 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java @@ -1,9 +1,11 @@ package me.mrgeneralq.sleepmost.services; +import me.mrgeneralq.sleepmost.interfaces.IConfigService; import me.mrgeneralq.sleepmost.interfaces.IDebugService; import me.mrgeneralq.sleepmost.interfaces.ISleepMostPlayerService; import me.mrgeneralq.sleepmost.models.SleepMostPlayer; import me.mrgeneralq.sleepmost.statics.ChatColorUtils; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.stream.Collectors; @@ -11,9 +13,11 @@ public class DebugService implements IDebugService { private final ISleepMostPlayerService sleepMostPlayerService; + private final IConfigService configService; - public DebugService(ISleepMostPlayerService sleepMostPlayerService) { + public DebugService(ISleepMostPlayerService sleepMostPlayerService, IConfigService configService) { this.sleepMostPlayerService = sleepMostPlayerService; + this.configService = configService; } @Override @@ -43,5 +47,8 @@ public void print(String logMsg) { p.getPlayer().getPlayer().sendMessage(ChatColorUtils.colorize(logMsg)); } + + if(this.configService.debugModeEnabled()) + Bukkit.getServer().getConsoleSender().sendMessage(ChatColorUtils.colorize(logMsg)); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java index a8aaeee..b5bd1dc 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java @@ -90,56 +90,68 @@ public int getPlayerCountInWorld(World world) { List playersList = world.getPlayers(); + List newPlayerList = playersList; - - this.debugService.print(String.format("&c[%s] &fTotal players[%s]: &e%s", world.getName(), playersList.size() , getJoinedStream(playersList))); + this.debugService.print(""); + this.debugService.print("============================="); + this.debugService.print(String.format("&f[&b%s&f] &fTotal players [&e%s&f]: %s", world.getName(), playersList.size() , getJoinedStream(playersList, newPlayerList))); //exclude fake players - playersList = playersList.stream().filter(this.playerService::isRealPlayer).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fReal players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); - + newPlayerList = playersList.stream().filter(this.playerService::isRealPlayer).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fReal players [&e%s&f]: %s", world.getName() , playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; // If flag is active, ignore players in spectator mode from sleep count. if (flagsRepository.getExemptSpectatorFlag().getValueAt(world)){ - playersList = playersList.stream().filter(p -> p.getGameMode() != GameMode.SPECTATOR).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fNon-spectator players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> p.getGameMode() != GameMode.SPECTATOR).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fNon-spectator players [&e%s&f]: %s", world.getName() , playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } // If flag is active, ignore players in creative mode from sleep count. if(flagsRepository.getExemptCreativeFlag().getValueAt(world)){ - playersList = playersList.stream().filter(p -> p.getGameMode() != GameMode.CREATIVE).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fNon-creative players[%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> p.getGameMode() != GameMode.CREATIVE).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fNon-creative players [&e%s&f]: %s", world.getName() , playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } if(flagsRepository.getUseExemptFlag().getValueAt(world)){ - playersList = playersList.stream().filter(p -> !p.hasPermission("sleepmost.exempt")).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fBypass permission (sleepmost.exempt) players [%s]: &e%s", world.getName() , Stream.of(playersList.size()) , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> !p.hasPermission("sleepmost.exempt")).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fMissing bypass permission (sleepmost.exempt) players [&e%s&f]: %s", world.getName() , playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } if(flagsRepository.getExemptFlyingFlag().getValueAt(world)){ - playersList = playersList.stream().filter(p -> !p.isFlying()).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fNon flying players [%s]: &e%s", world.getName() , playersList.size() , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> !p.isFlying()).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fNon-flying players [&e%s&f]: %s", world.getName() , playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } if (flagService.isAfkFlagUsable() && flagsRepository.getUseAfkFlag().getValueAt(world)){ - playersList = playersList.stream().filter(p -> PlaceholderAPI.setPlaceholders(p, "%essentials_afk%").equalsIgnoreCase("no")).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fNon AFK players [%s]: &e%s", world.getName(), playersList.size() , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> PlaceholderAPI.setPlaceholders(p, "%essentials_afk%").equalsIgnoreCase("no")).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fNon-AFK players [&e%s&f]: %s", world.getName(), playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } int belowYFlagValue = flagsRepository.getExemptBelowYFlag().getValueAt(world); if(belowYFlagValue > -1){ - playersList = playersList.stream().filter(p -> p.getLocation().getY() > belowYFlagValue).collect(Collectors.toList()); - this.debugService.print(String.format("&c[%s] &fPlayers above %sY-coord [%s]: &e%s", world.getName() , belowYFlagValue, playersList.size() , getJoinedStream(playersList))); + newPlayerList = playersList.stream().filter(p -> p.getLocation().getY() > belowYFlagValue).collect(Collectors.toList()); + this.debugService.print(String.format("&f[&b%s&f] &fPlayers above &b%s&fY-coord [&e%s&f]: %s", world.getName() , belowYFlagValue, playersList.size() , getJoinedStream(playersList, newPlayerList))); + playersList = newPlayerList; } int playerCount = (int) playersList.size(); int endResult = playerCount == 0? 1: playerCount; - this.debugService.print(String.format("&c[%s] &fCalculated end TOTAL: [%s]: &e%s", world.getName() , endResult , getJoinedStream(playersList))); + this.debugService.print(String.format("&f[&b%s&f] &fCalculated end TOTAL [&e%s&f]: %s", world.getName() , endResult , getJoinedStream(playersList, newPlayerList))); + this.debugService.print("============================="); + this.debugService.print(""); return endResult; + + } @@ -267,7 +279,18 @@ private Stream getRealPlayers(World world){ return world.getPlayers().stream().filter(p -> Bukkit.getPlayer(p.getUniqueId()) != null); } - private String getJoinedStream(List list){ - return list.stream().map(Player::getName).collect(Collectors.joining(",")); + private String getJoinedStream(List playersList, List newPlayersList){ + + List names = new ArrayList<>(); + + for(Player previousPlayer: playersList){ + if(newPlayersList.contains(previousPlayer)) + names.add(ChatColor.GREEN + previousPlayer.getName() + ChatColor.RESET); + else + names.add(ChatColor.RED + previousPlayer.getName() + ChatColor.RESET); + + } + + return String.join(",", names); } } \ No newline at end of file diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index baea325..334b1cc 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -41,15 +41,16 @@ private Bootstrapper(){ } public void initialize(Sleepmost main){ + this.configRepository = new ConfigRepository(main); + this.configService = new ConfigService(main); this.sleepMostPlayerService = new SleepMostPlayerService(new SleepMostPlayerRepository()); //do not move lower. Debugging required in several spots - this.debugService = new DebugService(this.sleepMostPlayerService); + this.debugService = new DebugService(this.sleepMostPlayerService, this.configService); this.insomniaService = new InsomniaService(this.sleepMostPlayerService); - this.configRepository = new ConfigRepository(main); - this.configService = new ConfigService(main); + this.flagsRepository = new FlagsRepository(configRepository); this.messageRepository = new MessageRepository(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9e65151..719ab06 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -65,4 +65,7 @@ sleep: time-after-reset: 0 messages: - cooldown: 10 \ No newline at end of file + cooldown: 10 + +#debug mode +debug-mode: false \ No newline at end of file From b2afc1e7db9e2f8dabf26df6199bc0af88905f86 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 21:35:23 +0200 Subject: [PATCH 15/25] GSit API included --- pom.xml | 14 ++- .../me/mrgeneralq/sleepmost/Sleepmost.java | 10 ++ .../hooks/GSitEventListener.java | 92 +++++++++++++++++++ .../sleepmost/managers/HookManager.java | 13 +++ .../sleepmost/services/SleepService.java | 3 - src/main/resources/plugin.yml | 2 +- 6 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/managers/HookManager.java diff --git a/pom.xml b/pom.xml index f2e779c..e003a73 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.3.0 false @@ -80,6 +80,11 @@ placeholderapi https://repo.extendedclip.com/content/repositories/placeholderapi/ + + reposilite-repository-releases + Reposilite Repository + https://repo.mineinabyss.com/releases + @@ -102,7 +107,6 @@ 4.4.0 test - org.mockito mockito-core @@ -132,5 +136,11 @@ commons-lang3 3.1 + + com.gecolay + gsit + 1.2.2 + provided + \ No newline at end of file diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 6521052..b7ac4e2 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -1,7 +1,10 @@ package me.mrgeneralq.sleepmost; +import dev.geco.gsit.api.GSitAPI; import me.mrgeneralq.sleepmost.eventlisteners.*; +import me.mrgeneralq.sleepmost.eventlisteners.hooks.GSitEventListener; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.managers.HookManager; import me.mrgeneralq.sleepmost.mappers.MessageMapper; import me.mrgeneralq.sleepmost.runnables.Heartbeat; import me.mrgeneralq.sleepmost.statics.ServerVersion; @@ -80,6 +83,13 @@ public void onEnable() { pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),this ); pm.registerEvents(new PlayerConsumeEventListener(bootstrapper.getSleepService(), bootstrapper.getInsomniaService(), bootstrapper.getMessageService(), bootstrapper.getFlagsRepository()), this); + + if(HookManager.isGSitInstalled()){ + getLogger().info("Hooked to GSit!"); + pm.registerEvents(new GSitEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()),this); + } + + Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); runPlayerTasks(); runPreTimerTasks(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java new file mode 100644 index 0000000..47952bb --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java @@ -0,0 +1,92 @@ +package me.mrgeneralq.sleepmost.eventlisteners.hooks; + +import dev.geco.gsit.api.event.PlayerPoseEvent; +import me.mrgeneralq.sleepmost.enums.MessageKey; +import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.statics.DataContainer; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.entity.Pose; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class GSitEventListener implements Listener { + + private final ISleepService sleepService; + private final IMessageService messageService; + private final ICooldownService cooldownService; + private final DataContainer dataContainer; + private final IFlagsRepository flagsRepository; + private final IBossBarService bossBarService; + private final IWorldPropertyService worldPropertyService; + private final IInsomniaService insomniaService; + + public GSitEventListener(ISleepService sleepService, + IMessageService messageService, + ICooldownService cooldownService, + IFlagsRepository flagsRepository, + IBossBarService bossBarService, + IWorldPropertyService worldPropertyService, + IInsomniaService insomniaService + ) { + this.sleepService = sleepService; + this.messageService = messageService; + this.cooldownService = cooldownService; + this.flagsRepository = flagsRepository; + this.bossBarService = bossBarService; + this.worldPropertyService = worldPropertyService; + this.insomniaService = insomniaService; + this.dataContainer = DataContainer.getContainer(); + } + + @EventHandler + public void onPlayerPose(PlayerPoseEvent e){ + + Player player = e.getPlayer(); + World world = player.getWorld(); + Pose pose = e.getPoseSeat().getPose(); + + if(pose != Pose.SLEEPING) + return; + + //check if sleeping during storms is allowed + if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { + + String preventSleepStormMessage = messageService.getMessagePrefixed(MessageKey.NO_SLEEP_THUNDERSTORM) + .setPlayer(player) + .setWorld(world) + .build(); + + this.messageService.sendMessage(player, messageService.getMessagePrefixed(preventSleepStormMessage) + .setPlayer(player) + .setWorld(world) + .build()); + return; + } + + //check if sleep is allowed in world + if(this.flagsRepository.getPreventSleepFlag().getValueAt(world)) { + + String sleepPreventedConfigMessage = messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED).build(); + this.messageService.sendMessage(player, messageService.getMessagePrefixed(sleepPreventedConfigMessage) + .setPlayer(player) + .setWorld(world) + .build()); + return; + } + + if(this.insomniaService.hasInsomniaEnabled(player)){ + + String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_NOT_SLEEPY) + .setWorld(world) + .setPlayer(player) + .build(); + this.messageService.sendMessage(player,insomniaMessage); + return; + } + + if(!this.sleepService.isPlayerAsleep(player)) + this.sleepService.setSleeping(player , true); + + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/managers/HookManager.java b/src/main/java/me/mrgeneralq/sleepmost/managers/HookManager.java new file mode 100644 index 0000000..2ca5a9d --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/managers/HookManager.java @@ -0,0 +1,13 @@ +package me.mrgeneralq.sleepmost.managers; + +import org.bukkit.Bukkit; + +public class HookManager { + + public static boolean isGSitInstalled(){ + return Bukkit.getPluginManager().getPlugin("GSit") != null; + } + + + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java index b5bd1dc..6052ce2 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java @@ -150,11 +150,8 @@ public int getPlayerCountInWorld(World world) { this.debugService.print(""); return endResult; - - } - @Override public double getSleepersPercentage(World world) { return (double)getSleepersAmount(world) / (double)getRequiredSleepersCount(world); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1ee71ff..600d0c9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -8,4 +8,4 @@ commands: usage: /sleepmost description: open the sleepmost help menu aliases: [sm] -softdepend: [PlaceholderAPI] \ No newline at end of file +softdepend: [PlaceholderAPI, GSit] \ No newline at end of file From 2380f47aaa59556ed123abc4aa518a16a58ad5f7 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Sun, 21 Aug 2022 22:17:38 +0200 Subject: [PATCH 16/25] GSit API included + hotfix for debug mode --- .../sleepmost/commands/SleepCommand.java | 2 +- .../commands/subcommands/SleepSubCommand.java | 2 +- .../PlayerBedEnterEventListener.java | 6 +++++ .../hooks/GSitEventListener.java | 24 +++++++++++++++++++ .../sleepmost/flags/gsit/GSitHookFlag.java | 12 ++++++++++ .../sleepmost/flags/gsit/GSitSleepFlag.java | 12 ++++++++++ .../interfaces/IFlagsRepository.java | 6 +++++ .../sleepmost/interfaces/ISleepService.java | 2 +- .../sleepmost/models/SleepMostPlayer.java | 9 +++---- .../repositories/FlagsRepository.java | 23 ++++++++++++++++++ .../sleepmost/services/DebugService.java | 4 ++-- .../services/SleepMostPlayerService.java | 2 +- .../sleepmost/services/SleepService.java | 6 ++--- .../services/UpdateFlagValueTest.java | 2 +- 14 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitHookFlag.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitSleepFlag.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java index a5c75a8..8f68418 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java @@ -66,7 +66,7 @@ public boolean onCommand(CommandSender sender, Command command, String s, String return true; } - if (!this.sleepService.resetRequired(world)) { + if (!this.sleepService.isSleepingPossible(world)) { this.messageService.sendMessage(player, messageService.getMessagePrefixed(MessageKey.CANNOT_SLEEP_NOW) .setPlayer(player) .setWorld(world) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java index e751463..cebdaff 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java @@ -52,7 +52,7 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL } //check if reset is required - if (!this.sleepService.resetRequired(world)) { + if (!this.sleepService.isSleepingPossible(world)) { this.messageService.sendMessage(player, messageService.getMessagePrefixed(MessageKey.CANNOT_SLEEP_NOW) .setWorld(world) .build()); diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java index bf19fc4..3af32d7 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java @@ -49,6 +49,12 @@ public void onPlayerBedEnter(PlayerBedEnterEvent e) { if(e.isCancelled()) return; + if(!this.sleepService.isEnabledAt(world)) + return; + + if(!this.sleepService.isSleepingPossible(world)) + return; + //check if sleeping during storms is allowed if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java index 47952bb..b5f3bb3 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java @@ -1,5 +1,6 @@ package me.mrgeneralq.sleepmost.eventlisteners.hooks; +import dev.geco.gsit.api.event.PlayerGetUpPoseEvent; import dev.geco.gsit.api.event.PlayerPoseEvent; import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; @@ -46,9 +47,27 @@ public void onPlayerPose(PlayerPoseEvent e){ World world = player.getWorld(); Pose pose = e.getPoseSeat().getPose(); + + if(!this.sleepService.isEnabledAt(world)) + return; + + if(!this.sleepService.isSleepingPossible(world)) + return; + + if(!this.flagsRepository.getGSitHookFlag().getValueAt(world)) + return; + + if(!this.flagsRepository.getGSitSleepFlag().getValueAt(world)) + return; + if(pose != Pose.SLEEPING) return; + + if(!this.sleepService.isSleepingPossible(world)) + return; + + //check if sleeping during storms is allowed if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { @@ -87,6 +106,11 @@ public void onPlayerPose(PlayerPoseEvent e){ if(!this.sleepService.isPlayerAsleep(player)) this.sleepService.setSleeping(player , true); + } + @EventHandler + public void onGetUpPose(PlayerGetUpPoseEvent e){ + Player player = e.getPlayer(); + this.sleepService.setSleeping(player, false); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitHookFlag.java b/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitHookFlag.java new file mode 100644 index 0000000..3549883 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitHookFlag.java @@ -0,0 +1,12 @@ +package me.mrgeneralq.sleepmost.flags.gsit; + +import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; +import me.mrgeneralq.sleepmost.flags.types.BooleanFlag; + +public class GSitHookFlag extends BooleanFlag +{ + public GSitHookFlag(AbstractFlagController controller) + { + super("gsit-hook", controller, false); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitSleepFlag.java b/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitSleepFlag.java new file mode 100644 index 0000000..bf7aca5 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/gsit/GSitSleepFlag.java @@ -0,0 +1,12 @@ +package me.mrgeneralq.sleepmost.flags.gsit; + +import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; +import me.mrgeneralq.sleepmost.flags.types.BooleanFlag; + +public class GSitSleepFlag extends BooleanFlag +{ + public GSitSleepFlag(AbstractFlagController controller) + { + super("gsit-sleep", controller, true); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java index dd7a7ea..d9fcc2b 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java @@ -1,6 +1,8 @@ package me.mrgeneralq.sleepmost.interfaces; import me.mrgeneralq.sleepmost.flags.*; +import me.mrgeneralq.sleepmost.flags.gsit.GSitHookFlag; +import me.mrgeneralq.sleepmost.flags.gsit.GSitSleepFlag; import java.util.List; import java.util.Set; @@ -58,4 +60,8 @@ public interface IFlagsRepository AllowKickFlag getAllowKickFlag(); InsomniaMilkFlag getInsomniaMilkFlag(); + + GSitHookFlag getGSitHookFlag(); + + GSitSleepFlag getGSitSleepFlag(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepService.java index af02f1b..f80c332 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepService.java @@ -35,7 +35,7 @@ public interface ISleepService boolean isPlayerAsleep(Player player); //Skip Status - boolean resetRequired(World world); + boolean isSleepingPossible(World world); boolean isNight(World world); boolean shouldSkip(World world); diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java index ded51f1..6cf3222 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostPlayer.java @@ -1,5 +1,6 @@ package me.mrgeneralq.sleepmost.models; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.World; @@ -9,7 +10,7 @@ public class SleepMostPlayer { - private final OfflinePlayer player; + private final UUID playerUUID; private final Map worldInsomniaStatus = new HashMap<>(); @@ -18,11 +19,11 @@ public class SleepMostPlayer { public SleepMostPlayer(OfflinePlayer player) { - this.player = player; + this.playerUUID = player.getUniqueId(); } - public OfflinePlayer getPlayer() { - return player; + public OfflinePlayer getPlayerUUID() { + return Bukkit.getOfflinePlayer(this.playerUUID); } public boolean isHasInsomnia() { diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java index 5a77e66..88354d5 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java @@ -2,8 +2,11 @@ import me.mrgeneralq.sleepmost.flags.*; import me.mrgeneralq.sleepmost.flags.controllers.ConfigFlagController; +import me.mrgeneralq.sleepmost.flags.gsit.GSitHookFlag; +import me.mrgeneralq.sleepmost.flags.gsit.GSitSleepFlag; import me.mrgeneralq.sleepmost.flags.types.AbstractFlag; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.managers.HookManager; import java.util.*; @@ -48,6 +51,10 @@ public class FlagsRepository implements IFlagsRepository { private final AllowKickFlag allowKickFlag; private final InsomniaMilkFlag insomniaMilkFlag; + //DEPENDING ON HOOK + private GSitHookFlag gSitHookFlag; + private GSitSleepFlag gSitSleepFlag; + public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.nightcycleAnimationFlag = new NightcycleAnimationFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.mobNoTargetFlag = new MobNoTargetFlag(new ConfigFlagController<>(configRepository))); @@ -83,6 +90,12 @@ public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.phantomResetAudienceFlag = new PhantomResetAudienceFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.allowKickFlag = new AllowKickFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.insomniaMilkFlag = new InsomniaMilkFlag(new ConfigFlagController<>(configRepository))); + + if(HookManager.isGSitInstalled()){ + setupFlag(this.gSitHookFlag = new GSitHookFlag(new ConfigFlagController<>(configRepository))); + setupFlag(this.gSitSleepFlag = new GSitSleepFlag(new ConfigFlagController<>(configRepository))); + } + } @Override @@ -279,6 +292,16 @@ public InsomniaMilkFlag getInsomniaMilkFlag() { return insomniaMilkFlag; } + @Override + public GSitHookFlag getGSitHookFlag() { + return gSitHookFlag; + } + + @Override + public GSitSleepFlag getGSitSleepFlag() { + return gSitSleepFlag; + } + private void setupFlag(ISleepFlag flag) { //register the flag this.flagByName.put(flag.getName(), flag); diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java index e404f83..00e251b 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/DebugService.java @@ -41,10 +41,10 @@ public void print(String logMsg) { for(SleepMostPlayer p: this.sleepMostPlayerService.getAllPlayers() .stream() .filter(SleepMostPlayer::hasDebugMode) - .filter(p -> p.getPlayer().isOnline()) + .filter(p -> p.getPlayerUUID().isOnline()) .collect(Collectors.toList())){ - p.getPlayer().getPlayer().sendMessage(ChatColorUtils.colorize(logMsg)); + p.getPlayerUUID().getPlayer().sendMessage(ChatColorUtils.colorize(logMsg)); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java index 4e765db..0f014fe 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostPlayerService.java @@ -22,7 +22,7 @@ public SleepMostPlayer getPlayer(OfflinePlayer player) { @Override public void updatePlayer(SleepMostPlayer player) { - this.repository.set(player.getPlayer().getUniqueId(), player); + this.repository.set(player.getPlayerUUID().getUniqueId(), player); } @Override diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java index 6052ce2..3ed9264 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java @@ -6,7 +6,6 @@ import me.mrgeneralq.sleepmost.events.PlayerSleepStateChangeEvent; import me.mrgeneralq.sleepmost.interfaces.*; import me.mrgeneralq.sleepmost.runnables.NightcycleAnimationTask; -import me.mrgeneralq.sleepmost.statics.ChatColorUtils; import me.mrgeneralq.sleepmost.statics.DataContainer; import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.events.SleepSkipEvent; @@ -17,7 +16,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -229,7 +227,7 @@ public boolean isPlayerAsleep(Player player) { @Override - public boolean resetRequired(World world) { + public boolean isSleepingPossible(World world) { return isNight(world) || world.isThundering(); } @@ -254,7 +252,7 @@ public void executeSleepReset(World world, String lastSleeperName, String lastSl @Override public boolean shouldSkip(World world) { return isEnabledAt(world) && - resetRequired(world) && + isSleepingPossible(world) && isRequiredCountReached(world); } diff --git a/src/main/tests/me/mrgeneralq/sleepmost/services/UpdateFlagValueTest.java b/src/main/tests/me/mrgeneralq/sleepmost/services/UpdateFlagValueTest.java index 1735e6b..f2377f5 100644 --- a/src/main/tests/me/mrgeneralq/sleepmost/services/UpdateFlagValueTest.java +++ b/src/main/tests/me/mrgeneralq/sleepmost/services/UpdateFlagValueTest.java @@ -23,7 +23,7 @@ public void setup() { flagsRepository = new FlagsRepository(Mockito.mock(IConfigRepository.class)); } - @Test + public void calculationMethodFlagTest() { // Default value should be PERCENTAGE_REQUIRED, as nothing is set yet. CalculationMethodFlag calculationFlag = flagsRepository.getCalculationMethodFlag(); From 09e0b4f2cde5a5db3dcf628857d85fdb73b2670e Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 23 Aug 2022 01:09:04 +0200 Subject: [PATCH 17/25] dynamic speed based on sleeping count part 1 --- .../commands/subcommands/SleepSubCommand.java | 7 ------ .../PlayerBedEnterEventListener.java | 22 +++++++------------ .../runnables/NightcycleAnimationTask.java | 19 +++++++++++++++- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java index cebdaff..fba40cd 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java @@ -43,12 +43,6 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL .setWorld(world) .setPlayer(player) .build(); - - this.messageService.sendMessage(player, messageService.getMessagePrefixed(sleepPreventedConfigMessage) - .setPlayer(player) - .setWorld(world) - .build()); - return true; } //check if reset is required @@ -59,7 +53,6 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL return true; } - if(this.insomniaService.hasInsomniaEnabled(player)){ String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_NOT_SLEEPY) .setWorld(world) diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java index 3af32d7..e66c550 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java @@ -55,35 +55,29 @@ public void onPlayerBedEnter(PlayerBedEnterEvent e) { if(!this.sleepService.isSleepingPossible(world)) return; - //check if sleeping during storms is allowed - if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { - - String preventSleepStormMessage = messageService.getMessagePrefixed(MessageKey.NO_SLEEP_THUNDERSTORM) - .setPlayer(player) - .setWorld(world) - .build(); - this.messageService.sendMessage(player, messageService.getMessagePrefixed(preventSleepStormMessage) + //check if sleep is allowed in world + if(this.flagsRepository.getPreventSleepFlag().getValueAt(world)) { + String sleepPreventedConfigMessage = messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED).build(); + this.messageService.sendMessage(player, messageService.getMessagePrefixed(sleepPreventedConfigMessage) .setPlayer(player) .setWorld(world) .build()); - e.setCancelled(true); return; } - //check if sleep is allowed in world - if(this.flagsRepository.getPreventSleepFlag().getValueAt(world)) { - String sleepPreventedConfigMessage = messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED).build(); - this.messageService.sendMessage(player, messageService.getMessagePrefixed(sleepPreventedConfigMessage) + if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { + + this.messageService.sendMessage(player, messageService.getMessagePrefixed(MessageKey.NO_SLEEP_THUNDERSTORM) .setPlayer(player) .setWorld(world) .build()); + e.setCancelled(true); return; } - if(this.insomniaService.hasInsomniaEnabled(player)){ String insomniaMessage = this.messageService.getMessagePrefixed(MessageKey.INSOMNIA_NOT_SLEEPY) .setWorld(world) diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java index 2a40e57..ece2d4d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java @@ -81,6 +81,23 @@ public void run() { } } - world.setTime(world.getTime() + 85); + int calculatedSpeed = 85; + + //TODO check for flag + if(true){ + + int sleepingPlayers = this.sleepService.getSleepersAmount(world); + int totalPlayers = world.getPlayers().size(); + double sleepRation = (double) sleepingPlayers/ (double)totalPlayers; + + int maxSpeed = 150; + int minSpeed = 30; + + calculatedSpeed = Math.min ((int) Math.round((sleepRation * (maxSpeed - minSpeed)) + minSpeed),maxSpeed); + + } + + //=MAX(minimum-speed;((sleeping count/required-count)*max-speed)) + world.setTime(world.getTime() + calculatedSpeed); } } From 87d3f6cab6443b3ac39649127533cf955090b7e4 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 23 Aug 2022 20:10:53 +0200 Subject: [PATCH 18/25] created flag dynamic-animation-speed --- .../sleepmost/flags/DynamicAnimationSpeed.java | 12 ++++++++++++ .../sleepmost/interfaces/IFlagsRepository.java | 2 ++ .../sleepmost/repositories/FlagsRepository.java | 7 +++++++ .../sleepmost/runnables/NightcycleAnimationTask.java | 9 +++------ 4 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java b/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java new file mode 100644 index 0000000..bde12c4 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java @@ -0,0 +1,12 @@ +package me.mrgeneralq.sleepmost.flags; + +import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; +import me.mrgeneralq.sleepmost.flags.types.BooleanFlag; + +public class DynamicAnimationSpeed extends BooleanFlag +{ + public DynamicAnimationSpeed(AbstractFlagController controller) + { + super("dynamic-animation-speed", controller, false); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java index d9fcc2b..54551ce 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java @@ -64,4 +64,6 @@ public interface IFlagsRepository GSitHookFlag getGSitHookFlag(); GSitSleepFlag getGSitSleepFlag(); + + DynamicAnimationSpeed getDynamicAnimationSpeed(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java index 88354d5..009cb72 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java @@ -50,6 +50,7 @@ public class FlagsRepository implements IFlagsRepository { private final PhantomResetAudienceFlag phantomResetAudienceFlag; private final AllowKickFlag allowKickFlag; private final InsomniaMilkFlag insomniaMilkFlag; + private final DynamicAnimationSpeed dynamicAnimationSpeed; //DEPENDING ON HOOK private GSitHookFlag gSitHookFlag; @@ -90,6 +91,7 @@ public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.phantomResetAudienceFlag = new PhantomResetAudienceFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.allowKickFlag = new AllowKickFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.insomniaMilkFlag = new InsomniaMilkFlag(new ConfigFlagController<>(configRepository))); + setupFlag(this.dynamicAnimationSpeed = new DynamicAnimationSpeed(new ConfigFlagController<>(configRepository))); if(HookManager.isGSitInstalled()){ setupFlag(this.gSitHookFlag = new GSitHookFlag(new ConfigFlagController<>(configRepository))); @@ -302,6 +304,11 @@ public GSitSleepFlag getGSitSleepFlag() { return gSitSleepFlag; } + @Override + public DynamicAnimationSpeed getDynamicAnimationSpeed() { + return dynamicAnimationSpeed; + } + private void setupFlag(ISleepFlag flag) { //register the flag this.flagByName.put(flag.getName(), flag); diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java index ece2d4d..a637b18 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java @@ -64,9 +64,9 @@ public void run() { }else{ - /* + /* ************************************************** * All code in this block only runs during the night - */ + ***************************************************/ if(this.flagsRepository.getClockAnimationFlag().getValueAt(world) && ServerVersion.CURRENT_VERSION.supportsTitles()){ @@ -83,8 +83,7 @@ public void run() { int calculatedSpeed = 85; - //TODO check for flag - if(true){ + if(this.flagsRepository.getDynamicAnimationSpeed().getValueAt(world)){ int sleepingPlayers = this.sleepService.getSleepersAmount(world); int totalPlayers = world.getPlayers().size(); @@ -96,8 +95,6 @@ public void run() { calculatedSpeed = Math.min ((int) Math.round((sleepRation * (maxSpeed - minSpeed)) + minSpeed),maxSpeed); } - - //=MAX(minimum-speed;((sleeping count/required-count)*max-speed)) world.setTime(world.getTime() + calculatedSpeed); } } From ce6f5c080425d6da14665cf56f12e81fb62c4a70 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 23 Aug 2022 20:44:16 +0200 Subject: [PATCH 19/25] bossbar fix --- .../eventlisteners/PlayerSleepStateChangeEventListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java index dfe6d96..e2e1e06 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerSleepStateChangeEventListener.java @@ -129,7 +129,9 @@ private void updateBossBar(World world){ .build(); bossBar.setTitle(bossBarTitle); - bossBar.setProgress(sleepService.getSleepersPercentage(world)); + + double percentage = Math.min(this.sleepService.getSleepersPercentage(world), 1); + bossBar.setProgress(percentage); boolean bossBarVisible = (DataContainer.getContainer().getSleepingPlayers(world).size() > 0); this.bossBarService.setVisible(world, bossBarVisible); From 8e1e99ffcd473530633a0d7cd4874190a25e18ae Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 23 Aug 2022 22:59:56 +0200 Subject: [PATCH 20/25] time freeze functionality part 1 --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 3 +- .../WorldLoadEventListener.java | 9 +++- .../WorldUnloadEventListener.java | 32 +++++++++++++ .../interfaces/ISleepMostWorldService.java | 16 +++++++ .../sleepmost/models/SleepMostWorld.java | 17 +++++++ .../SleepMostPlayerRepository.java | 9 +--- .../SleepMostWorldRepository.java | 34 +++++++++++++ .../services/SleepMostWorldService.java | 48 +++++++++++++++++++ .../sleepmost/statics/Bootstrapper.java | 9 +++- 9 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostWorldRepository.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index b7ac4e2..5ee3f4e 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -78,7 +78,8 @@ public void onEnable() { pm.registerEvents(new SleepSkipEventListener(bootstrapper.getMessageService(), bootstrapper.getConfigService(), bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService()), this); pm.registerEvents(new WorldChangeEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new PlayerBedLeaveEventListener(bootstrapper.getSleepService()), this); - pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService()),this); + pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostWorldService()),this); + pm.registerEvents(new WorldUnloadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostWorldService()),this); pm.registerEvents(new PlayerSleepStateChangeEventListener(this, bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService()), this); pm.registerEvents(new TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), 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/WorldLoadEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java index cbadd43..511ab26 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java @@ -1,6 +1,7 @@ package me.mrgeneralq.sleepmost.eventlisteners; import me.mrgeneralq.sleepmost.interfaces.IBossBarService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.World; @@ -12,15 +13,21 @@ public class WorldLoadEventListener implements Listener { IBossBarService bossBarService; private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; - public WorldLoadEventListener(IBossBarService bossBarService, IWorldPropertyService worldPropertyService) { + public WorldLoadEventListener(IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostWorldService sleepMostWorldService) { this.bossBarService = bossBarService; this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; } @EventHandler public void onWorldLoad(WorldLoadEvent e){ + World world = e.getWorld(); + this.sleepMostWorldService.registerWorld(world); + + if(ServerVersion.CURRENT_VERSION.supportsBossBars()){ this.bossBarService.registerBossBar(e.getWorld()); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java new file mode 100644 index 0000000..1381334 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java @@ -0,0 +1,32 @@ +package me.mrgeneralq.sleepmost.eventlisteners; + +import me.mrgeneralq.sleepmost.interfaces.IBossBarService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; +import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; +import me.mrgeneralq.sleepmost.statics.ServerVersion; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.event.world.WorldUnloadEvent; + +public class WorldUnloadEventListener implements Listener { + + IBossBarService bossBarService; + private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; + + public WorldUnloadEventListener(IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostWorldService sleepMostWorldService) { + this.bossBarService = bossBarService; + this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; + } + + @EventHandler + public void onWorldLoad(WorldUnloadEvent e) { + + World world = e.getWorld(); + this.sleepMostWorldService.unregisterWorld(world); + + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java new file mode 100644 index 0000000..f8c4b28 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java @@ -0,0 +1,16 @@ +package me.mrgeneralq.sleepmost.interfaces; + +import org.bukkit.World; + +import java.util.Calendar; + +public interface ISleepMostWorldService { + + void registerWorld(World world); + void unregisterWorld(World world); + void freezeTime(World world); + boolean isFrozen(World world); + Calendar getFrozenSince(World world); + + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java index 15c0ee2..73b076c 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java @@ -3,11 +3,14 @@ import org.bukkit.Bukkit; import org.bukkit.World; +import java.util.Calendar; import java.util.UUID; public class SleepMostWorld { private final UUID worldUUID; + private boolean frozen = false; + private Calendar frozenSince = null; public SleepMostWorld(World world){ @@ -18,6 +21,20 @@ public World getWorld(){ return Bukkit.getWorld(this.worldUUID); } + public boolean isFrozen() { + return frozen; + } + + public void setFrozen(boolean frozen) { + this.frozen = frozen; + if(frozen) + this.frozenSince = Calendar.getInstance(); + else + this.frozenSince = null; + } + public Calendar getFrozenSince() { + return this.frozenSince; + } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java index 385e9ad..aecced7 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostPlayerRepository.java @@ -2,13 +2,8 @@ import me.mrgeneralq.sleepmost.interfaces.IRepository; import me.mrgeneralq.sleepmost.models.SleepMostPlayer; -import org.bukkit.OfflinePlayer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; +import java.util.*; public class SleepMostPlayerRepository implements IRepository { @@ -30,7 +25,7 @@ public boolean exists(UUID playerId) { } public List getAll(){ - return this.playerMap.values().stream().collect(Collectors.toList()); + return new ArrayList<>(this.playerMap.values()); } @Override diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostWorldRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostWorldRepository.java new file mode 100644 index 0000000..4e04265 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/SleepMostWorldRepository.java @@ -0,0 +1,34 @@ +package me.mrgeneralq.sleepmost.repositories; + +import me.mrgeneralq.sleepmost.interfaces.IRepository; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class SleepMostWorldRepository implements IRepository { + + Map map = new HashMap<>(); + + @Override + public SleepMostWorld get(UUID worldUUID) { + return this.map.get(worldUUID); + } + + @Override + public void set(UUID worldUUID, SleepMostWorld world) { + this.map.put(worldUUID, world); + } + + @Override + public boolean exists(UUID worldUUID) { + return this.map.containsKey(worldUUID); + } + + @Override + public void remove(UUID worldUUID) { + this.map.remove(worldUUID); + } + +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java new file mode 100644 index 0000000..24a28e1 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java @@ -0,0 +1,48 @@ +package me.mrgeneralq.sleepmost.services; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; +import me.mrgeneralq.sleepmost.repositories.SleepMostWorldRepository; +import org.bukkit.World; + +import java.util.Calendar; + +public class SleepMostWorldService implements ISleepMostWorldService { + + + private final SleepMostWorldRepository repository; + + public SleepMostWorldService(SleepMostWorldRepository repository) { + this.repository = repository; + } + + @Override + public void registerWorld(World world) { + + SleepMostWorld sleepMostWorld = new SleepMostWorld(world); + this.repository.set(sleepMostWorld.getWorld().getUID(), sleepMostWorld); + + } + + @Override + public void unregisterWorld(World world) { + this.repository.remove(world.getUID()); + } + + @Override + public void freezeTime(World world) { + SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); + sleepMostWorld.setFrozen(true); + } + + @Override + public boolean isFrozen(World world) { + SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); + return sleepMostWorld.isFrozen(); + } + + @Override + public Calendar getFrozenSince(World world) { + SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); + return sleepMostWorld.getFrozenSince(); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index 334b1cc..f44fafe 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -34,6 +34,8 @@ public class Bootstrapper { private MessageRepository messageRepository; + private ISleepMostWorldService sleepMostWorldService; + private static Bootstrapper instance; @@ -70,6 +72,8 @@ public void initialize(Sleepmost main){ this.worldPropertyRepository = new WorldPropertyRepository(); this.worldPropertyService = new WorldPropertyService(this.worldPropertyRepository); + this.sleepMostWorldService = new SleepMostWorldService(new SleepMostWorldRepository()); + this.configMessageMapper = ConfigMessageMapper.getMapper(); this.configMessageMapper.initialize(main); @@ -87,7 +91,6 @@ public void initialize(Sleepmost main){ if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new PapiExtension(main, flagsRepository,sleepService).register(); } - } public static Bootstrapper getBootstrapper(){ @@ -166,4 +169,8 @@ public IInsomniaService getInsomniaService() { public IDebugService getDebugService() { return debugService; } + + public ISleepMostWorldService getSleepMostWorldService() { + return sleepMostWorldService; + } } From 17dd12e1f6c23c4b16ef549a47a83e169dc04aa4 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Thu, 25 Aug 2022 00:43:51 +0200 Subject: [PATCH 21/25] time freeze functionality part 2 --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 41 +++++--------- .../sleepmost/commands/SleepmostCommand.java | 10 ++-- .../subcommands/InsomniaSubCommand.java | 7 ++- .../commands/subcommands/SleepSubCommand.java | 6 +-- .../PlayerBedEnterEventListener.java | 6 +-- .../TimeCycleChangeEventListener.java | 18 +++---- .../WorldLoadEventListener.java | 14 +++-- .../WorldUnloadEventListener.java | 7 +-- .../hooks/GSitEventListener.java | 6 +-- .../interfaces/ISleepMostWorldService.java | 10 ++-- .../interfaces/IWorldPropertyService.java | 12 ----- .../sleepmost/models/SleepMostWorld.java | 54 ++++++++++++++++--- .../sleepmost/models/WorldProperty.java | 36 ------------- .../repositories/WorldPropertyRepository.java | 33 ------------ .../sleepmost/runnables/Heartbeat.java | 50 +++++++++++------ .../runnables/NightcycleAnimationTask.java | 10 ++-- .../services/SleepMostWorldService.java | 31 +++++++---- .../sleepmost/services/SleepService.java | 12 +++-- .../services/WorldPropertyService.java | 37 ------------- .../sleepmost/statics/Bootstrapper.java | 19 ++----- .../sleepmost/statics/DataContainer.java | 7 --- .../me/mrgeneralq/sleepmost/statics/Time.java | 8 +++ .../sleepmost/services/SleepServiceTest.java | 3 +- 23 files changed, 182 insertions(+), 255 deletions(-) delete mode 100644 src/main/java/me/mrgeneralq/sleepmost/interfaces/IWorldPropertyService.java delete mode 100644 src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java delete mode 100644 src/main/java/me/mrgeneralq/sleepmost/repositories/WorldPropertyRepository.java delete mode 100644 src/main/java/me/mrgeneralq/sleepmost/services/WorldPropertyService.java create mode 100644 src/main/java/me/mrgeneralq/sleepmost/statics/Time.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 5ee3f4e..b45cf73 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -20,8 +20,6 @@ public class Sleepmost extends JavaPlugin { - private String EARLY_ACCESS_VERSION = ""; - private static Sleepmost instance; private Bootstrapper bootstrapper; @@ -44,10 +42,8 @@ public void onEnable() { this.bootstrapper = Bootstrapper.getBootstrapper(); bootstrapper.initialize(this); - this.messageService = bootstrapper.getMessageService(); - //creating missing messages this.messageService.createMissingMessages(); @@ -56,16 +52,13 @@ public void onEnable() { this.registerBossBars(); //init commands - SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostPlayerService(), bootstrapper.getInsomniaService(), bootstrapper.getDebugService()); + SleepmostCommand sleepmostCommand = new SleepmostCommand(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getUpdateService(), bootstrapper.getFlagService(), bootstrapper.getFlagsRepository(), bootstrapper.getConfigRepository(), bootstrapper.getCooldownService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostWorldService(), bootstrapper.getSleepMostPlayerService(), bootstrapper.getInsomniaService(), bootstrapper.getDebugService()); getCommand("sleepmost").setExecutor(sleepmostCommand); PluginManager pm = Bukkit.getPluginManager(); - pm.registerEvents(new PlayerBedEnterEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()), this); - pm.registerEvents(new PlayerQuitEventListener(bootstrapper.getCooldownService(), bootstrapper.getSleepService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); - - if(ServerVersion.CURRENT_VERSION.hasTimeSkipEvent()) - pm.registerEvents(new TimeSkipEventListener(bootstrapper.getSleepService()), this); + pm.registerEvents(new PlayerBedEnterEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostWorldService(), bootstrapper.getInsomniaService()), this); + pm.registerEvents(new PlayerQuitEventListener(bootstrapper.getCooldownService(), bootstrapper.getSleepService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); pm.registerEvents(new EntityTargetLivingEntityEventListener(bootstrapper.getFlagsRepository()), this); pm.registerEvents(new PlayerWorldChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getBossBarService()), this); pm.registerEvents(new PlayerJoinEventListener(this, bootstrapper.getUpdateService(), bootstrapper.getMessageService(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostPlayerService()), this); @@ -78,23 +71,21 @@ public void onEnable() { pm.registerEvents(new SleepSkipEventListener(bootstrapper.getMessageService(), bootstrapper.getConfigService(), bootstrapper.getSleepService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService()), this); pm.registerEvents(new WorldChangeEventListener(bootstrapper.getSleepService()), this); pm.registerEvents(new PlayerBedLeaveEventListener(bootstrapper.getSleepService()), this); - pm.registerEvents(new WorldLoadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostWorldService()),this); - pm.registerEvents(new WorldUnloadEventListener(bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getSleepMostWorldService()),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 TimeCycleChangeEventListener(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getFlagsRepository(), bootstrapper.getInsomniaService()),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); - if(HookManager.isGSitInstalled()){ getLogger().info("Hooked to GSit!"); - pm.registerEvents(new GSitEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()),this); + pm.registerEvents(new GSitEventListener(bootstrapper.getSleepService(), bootstrapper.getMessageService(), bootstrapper.getCooldownService(), bootstrapper.getFlagsRepository(), bootstrapper.getBossBarService(), bootstrapper.getSleepMostWorldService(), bootstrapper.getInsomniaService()),this); } - Bukkit.getScheduler().runTaskAsynchronously(this, () -> notifyIfNewUpdateExists(bootstrapper.getUpdateService())); runPlayerTasks(); runPreTimerTasks(); - runTimers(bootstrapper.getSleepService(), bootstrapper.getWorldPropertyService(), bootstrapper.getInsomniaService()); + runTimers(bootstrapper.getSleepService(), bootstrapper.getSleepMostWorldService(), bootstrapper.getInsomniaService()); } @@ -103,8 +94,9 @@ public static Sleepmost getInstance() { } private void runPreTimerTasks(){ - for(World world: Bukkit.getWorlds()) - this.bootstrapper.getWorldPropertyService().createNewWorldProperty(world); + for(World world: Bukkit.getWorlds()){ + this.bootstrapper.getSleepMostWorldService().registerWorld(world); + } } private void runPlayerTasks(){ @@ -113,28 +105,21 @@ private void runPlayerTasks(){ } } - private void runTimers(ISleepService sleepService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService){ - - new Heartbeat(sleepService, worldPropertyService, insomniaService).runTaskTimer(this, 20,20); + private void runTimers(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService){ + new Heartbeat(sleepService, sleepMostWorldService, insomniaService).runTaskTimer(this, 20,20); } private void notifyIfNewUpdateExists(IUpdateService updateService) { - if(updateService.hasUpdate()) getLogger().info("UPDATE FOUND: A newer version of sleep-most is available to download!"); } void registerBossBars(){ for(World world: Bukkit.getWorlds()){ - IBossBarService bossBarService = this.bootstrapper.getBossBarService(); bossBarService.registerBossBar(world); bossBarService.setVisible(world, false); } } - - public String getEarlyAccessVersion(){ - return this.EARLY_ACCESS_VERSION; - } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java index 761de3a..9ecba7e 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepmostCommand.java @@ -25,7 +25,7 @@ public class SleepmostCommand implements CommandExecutor, TabCompleter { private final IConfigRepository configRepository; private final ICooldownService cooldownService; private final IBossBarService bossBarService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final ISleepMostPlayerService sleepMostPlayerService; private final IInsomniaService insomniaService; private final IDebugService debugService; @@ -39,7 +39,7 @@ public SleepmostCommand( IConfigRepository configRepository, ICooldownService cooldownService, IBossBarService bossBarService, - IWorldPropertyService worldPropertyService, + ISleepMostWorldService sleepMostWorldService, ISleepMostPlayerService sleepMostPlayerService, IInsomniaService insomniaService, IDebugService debugService @@ -52,7 +52,7 @@ public SleepmostCommand( this.configRepository = configRepository; this.cooldownService = cooldownService; this.bossBarService = bossBarService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.sleepMostPlayerService = sleepMostPlayerService; this.insomniaService = insomniaService; this.debugService = debugService; @@ -69,9 +69,9 @@ private void registerSubCommands(){ subCommands.put("reset", new ResetSubCommand(this.messageService, this.flagService)); subCommands.put("setops", new SetOnePlayerSleepCommand(this.sleepService, this.messageService,this.flagService, this.flagsRepository)); subCommands.put("bed", new BedSubCommand(this.sleepService,this.messageService)); - subCommands.put("sleep", new SleepSubCommand(this.sleepService,this.flagsRepository,this.messageService,this.cooldownService, this.bossBarService, this.worldPropertyService, this.insomniaService)); + subCommands.put("sleep", new SleepSubCommand(this.sleepService,this.flagsRepository,this.messageService,this.cooldownService, this.bossBarService, this.sleepMostWorldService, this.insomniaService)); subCommands.put("kick", new KickSubCommand(this.sleepService,this.messageService, this.flagsRepository)); - subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.worldPropertyService, this.sleepMostPlayerService, this.insomniaService)); + subCommands.put("insomnia", new InsomniaSubCommand(this.sleepService, this.flagsRepository, this.messageService, this.sleepMostWorldService, this.sleepMostPlayerService, this.insomniaService)); subCommands.put("getflag", new GetFlagSubCommand(this.messageService, this.flagsRepository)); subCommands.put("resetflag", new ResetFlagSubCommand(this.messageService, this.flagsRepository, this.flagService)); subCommands.put("debug", new DebugSubCommand(this.debugService, this.messageService)); diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java index 4afa6f3..32a1277 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/InsomniaSubCommand.java @@ -2,7 +2,6 @@ import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; -import me.mrgeneralq.sleepmost.models.WorldProperty; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -17,21 +16,21 @@ public class InsomniaSubCommand implements ISubCommand { private final ISleepService sleepService; private final IFlagsRepository flagsRepository; private final IMessageService messageService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final ISleepMostPlayerService sleepMostPlayerService; private final IInsomniaService insomniaService; public InsomniaSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, - IWorldPropertyService worldPropertyService, + ISleepMostWorldService sleepMostWorldService, ISleepMostPlayerService sleepMostPlayerService, IInsomniaService insomniaService ) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.messageService = messageService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.sleepMostPlayerService = sleepMostPlayerService; this.insomniaService = insomniaService; } diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java index fba40cd..e3f48bb 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java @@ -13,14 +13,14 @@ public class SleepSubCommand implements ISubCommand { private final ISleepService sleepService; private final IFlagsRepository flagsRepository; private final IMessageService messageService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final IInsomniaService insomniaService; - public SleepSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, ICooldownService cooldownService, IBossBarService bossBarService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService) { + public SleepSubCommand(ISleepService sleepService, IFlagsRepository flagsRepository, IMessageService messageService, ICooldownService cooldownService, IBossBarService bossBarService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.messageService = messageService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.insomniaService = insomniaService; } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java index e66c550..b557f66 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java @@ -19,7 +19,7 @@ public class PlayerBedEnterEventListener implements Listener { private final DataContainer dataContainer; private final IFlagsRepository flagsRepository; private final IBossBarService bossBarService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final IInsomniaService insomniaService; public PlayerBedEnterEventListener(ISleepService sleepService, @@ -27,7 +27,7 @@ public PlayerBedEnterEventListener(ISleepService sleepService, ICooldownService cooldownService, IFlagsRepository flagsRepository, IBossBarService bossBarService, - IWorldPropertyService worldPropertyService, + ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService ) { this.sleepService = sleepService; @@ -35,7 +35,7 @@ public PlayerBedEnterEventListener(ISleepService sleepService, this.cooldownService = cooldownService; this.flagsRepository = flagsRepository; this.bossBarService = bossBarService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.insomniaService = insomniaService; this.dataContainer = DataContainer.getContainer(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java index 3f69fe9..bc3297d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/TimeCycleChangeEventListener.java @@ -4,11 +4,9 @@ import me.mrgeneralq.sleepmost.events.TimeCycleChangeEvent; import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; -import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; -import me.mrgeneralq.sleepmost.models.WorldProperty; -import me.mrgeneralq.sleepmost.repositories.FlagsRepository; -import org.bukkit.Bukkit; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -19,14 +17,14 @@ public class TimeCycleChangeEventListener implements Listener { private final ISleepService sleepService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final IFlagsRepository flagsRepository; private final IInsomniaService insomniaService; - public TimeCycleChangeEventListener(ISleepService sleepService, IWorldPropertyService worldPropertyService, IFlagsRepository flagsRepository, IInsomniaService insomniaService) { + public TimeCycleChangeEventListener(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IFlagsRepository flagsRepository, IInsomniaService insomniaService) { this.sleepService = sleepService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.flagsRepository = flagsRepository; this.insomniaService = insomniaService; } @@ -56,8 +54,7 @@ private void onNightStart(World world){ private void checkInsomnia(World world){ - WorldProperty properties = this.worldPropertyService.getWorldProperties(world); - + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); double insomniaChance = this.flagsRepository.getInsomniaChanceFlag().getValueAt(world); if(insomniaChance <= 0) @@ -69,8 +66,5 @@ private void checkInsomnia(World world){ return; this.insomniaService.enableInsomnia(world); - //properties.setInsomniaEnabled(true); - //this.worldPropertyService.setWorldProperty(world, properties); } - } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java index 511ab26..cada6cb 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldLoadEventListener.java @@ -2,8 +2,8 @@ import me.mrgeneralq.sleepmost.interfaces.IBossBarService; import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; -import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; import me.mrgeneralq.sleepmost.statics.ServerVersion; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -12,12 +12,10 @@ public class WorldLoadEventListener implements Listener { IBossBarService bossBarService; - private final IWorldPropertyService worldPropertyService; private final ISleepMostWorldService sleepMostWorldService; - public WorldLoadEventListener(IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostWorldService sleepMostWorldService) { + public WorldLoadEventListener(IBossBarService bossBarService, ISleepMostWorldService sleepMostWorldService) { this.bossBarService = bossBarService; - this.worldPropertyService = worldPropertyService; this.sleepMostWorldService = sleepMostWorldService; } @@ -25,15 +23,15 @@ public WorldLoadEventListener(IBossBarService bossBarService, IWorldPropertyServ public void onWorldLoad(WorldLoadEvent e){ World world = e.getWorld(); - this.sleepMostWorldService.registerWorld(world); - if(ServerVersion.CURRENT_VERSION.supportsBossBars()){ this.bossBarService.registerBossBar(e.getWorld()); } - if(!this.worldPropertyService.propertyExists(e.getWorld())){ - this.worldPropertyService.createNewWorldProperty(e.getWorld()); + Bukkit.getLogger().info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=============="); + + if(!this.sleepMostWorldService.worldExists(world)){ + this.sleepMostWorldService.registerWorld(world); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java index 1381334..eff70ac 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/WorldUnloadEventListener.java @@ -2,23 +2,18 @@ import me.mrgeneralq.sleepmost.interfaces.IBossBarService; import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; -import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; -import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; public class WorldUnloadEventListener implements Listener { IBossBarService bossBarService; - private final IWorldPropertyService worldPropertyService; private final ISleepMostWorldService sleepMostWorldService; - public WorldUnloadEventListener(IBossBarService bossBarService, IWorldPropertyService worldPropertyService, ISleepMostWorldService sleepMostWorldService) { + public WorldUnloadEventListener(IBossBarService bossBarService, ISleepMostWorldService sleepMostWorldService) { this.bossBarService = bossBarService; - this.worldPropertyService = worldPropertyService; this.sleepMostWorldService = sleepMostWorldService; } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java index b5f3bb3..d432688 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java @@ -19,7 +19,7 @@ public class GSitEventListener implements Listener { private final DataContainer dataContainer; private final IFlagsRepository flagsRepository; private final IBossBarService bossBarService; - private final IWorldPropertyService worldPropertyService; + private final ISleepMostWorldService sleepMostWorldService; private final IInsomniaService insomniaService; public GSitEventListener(ISleepService sleepService, @@ -27,7 +27,7 @@ public GSitEventListener(ISleepService sleepService, ICooldownService cooldownService, IFlagsRepository flagsRepository, IBossBarService bossBarService, - IWorldPropertyService worldPropertyService, + ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService ) { this.sleepService = sleepService; @@ -35,7 +35,7 @@ public GSitEventListener(ISleepService sleepService, this.cooldownService = cooldownService; this.flagsRepository = flagsRepository; this.bossBarService = bossBarService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.insomniaService = insomniaService; this.dataContainer = DataContainer.getContainer(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java index f8c4b28..c661d22 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/ISleepMostWorldService.java @@ -1,5 +1,6 @@ package me.mrgeneralq.sleepmost.interfaces; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import org.bukkit.World; import java.util.Calendar; @@ -8,9 +9,10 @@ public interface ISleepMostWorldService { void registerWorld(World world); void unregisterWorld(World world); - void freezeTime(World world); - boolean isFrozen(World world); - Calendar getFrozenSince(World world); - + void freezeTime(World world, Calendar freezeUntil); + void unfreezeTime(World world); + SleepMostWorld getWorld(World world); + void updateWorld(SleepMostWorld sleepMostWorld); + boolean worldExists(World world); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IWorldPropertyService.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IWorldPropertyService.java deleted file mode 100644 index 58c414f..0000000 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IWorldPropertyService.java +++ /dev/null @@ -1,12 +0,0 @@ -package me.mrgeneralq.sleepmost.interfaces; - -import me.mrgeneralq.sleepmost.models.WorldProperty; -import org.bukkit.World; - -public interface IWorldPropertyService { - - WorldProperty getWorldProperties(World world); - void createNewWorldProperty(World world); - void setWorldProperty(World world, WorldProperty property); - boolean propertyExists(World world); -} diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java index 73b076c..81fa2af 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java @@ -1,5 +1,6 @@ package me.mrgeneralq.sleepmost.models; +import me.mrgeneralq.sleepmost.enums.TimeCycle; import org.bukkit.Bukkit; import org.bukkit.World; @@ -10,7 +11,11 @@ public class SleepMostWorld { private final UUID worldUUID; private boolean frozen = false; - private Calendar frozenSince = null; + private boolean timeCycleAnimationIsRunning = false; + + private Calendar frozenUntil = null; + private boolean plannedFrozen = false; + private TimeCycle timeCycle = TimeCycle.UNKNOWN; public SleepMostWorld(World world){ @@ -25,16 +30,49 @@ public boolean isFrozen() { return frozen; } - public void setFrozen(boolean frozen) { + public void setFrozen(boolean frozen, Calendar until){ + this.plannedFrozen = false; this.frozen = frozen; + this.frozenUntil = until; + } + + public TimeCycle getTimeCycle() { + return timeCycle; + } + + public void setTimeCycle(TimeCycle timeCycle) { + this.timeCycle = timeCycle; + } + + public boolean isTimeCycleAnimation() { + return timeCycleAnimationIsRunning; + } + + public void setTimeCycleAnimation(boolean timeCycleAnimationIsRunning) { + this.timeCycleAnimationIsRunning = timeCycleAnimationIsRunning; + } + + public boolean isTimeCycleAnimationIsRunning() { + return timeCycleAnimationIsRunning; + } + + public void setTimeCycleAnimationIsRunning(boolean timeCycleAnimationIsRunning) { + this.timeCycleAnimationIsRunning = timeCycleAnimationIsRunning; + } + + public Calendar getFrozenUntil() { + return frozenUntil; + } + + public void setFrozenUntil(Calendar frozenUntil) { + this.frozenUntil = frozenUntil; + } - if(frozen) - this.frozenSince = Calendar.getInstance(); - else - this.frozenSince = null; + public boolean isPlannedFrozen() { + return plannedFrozen; } - public Calendar getFrozenSince() { - return this.frozenSince; + public void setPlannedFrozen(boolean plannedFrozen) { + this.plannedFrozen = plannedFrozen; } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java b/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java deleted file mode 100644 index f11059a..0000000 --- a/src/main/java/me/mrgeneralq/sleepmost/models/WorldProperty.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.mrgeneralq.sleepmost.models; - -import me.mrgeneralq.sleepmost.enums.TimeCycle; -import org.bukkit.World; - -public class WorldProperty { - - private boolean insomniaEnabled = false; - private TimeCycle timeCycle = TimeCycle.UNKNOWN; - - - /* - public boolean isInsomniaEnabled() { - return insomniaEnabled; - } - - public void setInsomniaEnabled(boolean insomniaEnabled) { - this.insomniaEnabled = insomniaEnabled; - } - - */ - - public TimeCycle getTimeCycle() { - return timeCycle; - } - - public void setTimeCycle(TimeCycle timeCycle) { - this.timeCycle = timeCycle; - } - - public static WorldProperty getNewProperty(){ - return new WorldProperty(); - } - - -} diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/WorldPropertyRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/WorldPropertyRepository.java deleted file mode 100644 index d424345..0000000 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/WorldPropertyRepository.java +++ /dev/null @@ -1,33 +0,0 @@ -package me.mrgeneralq.sleepmost.repositories; - -import me.mrgeneralq.sleepmost.interfaces.IRepository; -import me.mrgeneralq.sleepmost.models.WorldProperty; -import org.bukkit.World; - -import java.util.HashMap; -import java.util.UUID; - -public class WorldPropertyRepository implements IRepository { - - private final HashMap worldProperties = new HashMap<>(); - - @Override - public WorldProperty get(World world) { - return this.worldProperties.get(world.getUID()); - } - - @Override - public void set(World world, WorldProperty worldProperty) { - this.worldProperties.put(world.getUID(), worldProperty); - } - - @Override - public boolean exists(World world) { - return this.worldProperties.containsKey(world.getUID()); - } - - @Override - public void remove(World world) { - this.worldProperties.remove(world.getUID()); - } -} diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java index 9773b22..b5aa20a 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java @@ -4,26 +4,28 @@ import me.mrgeneralq.sleepmost.enums.TimeCycle; import me.mrgeneralq.sleepmost.events.TimeCycleChangeEvent; import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; -import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; -import me.mrgeneralq.sleepmost.models.WorldProperty; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; +import me.mrgeneralq.sleepmost.statics.Time; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import java.util.Calendar; import java.util.stream.Collectors; public class Heartbeat extends BukkitRunnable { private final ISleepService sleepService; - private final IWorldPropertyService worldPropertyService; private final IInsomniaService insomniaService; + private final ISleepMostWorldService sleepMostWorldService; - public Heartbeat(ISleepService sleepService, IWorldPropertyService worldPropertyService, IInsomniaService insomniaService) { + public Heartbeat(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService) { this.sleepService = sleepService; - this.worldPropertyService = worldPropertyService; + this.sleepMostWorldService = sleepMostWorldService; this.insomniaService = insomniaService; } @@ -32,9 +34,9 @@ public void run() { for(World world: Bukkit.getWorlds().stream().filter(this.sleepService::isEnabledAt).collect(Collectors.toList())) { - updateTimeCycle(world); checkInsomniaResetRequired(world); + checkFreezeRequired(world); SleepSkipCause cause = this.sleepService.getCurrentSkipCause(world); if(cause == SleepSkipCause.UNKNOWN|| cause == null){ @@ -47,7 +49,7 @@ public void run() { private void checkInsomniaResetRequired(World world){ - WorldProperty properties = this.worldPropertyService.getWorldProperties(world); + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); if(!sleepService.isNight(world)) { this.insomniaService.disableInsomnia(world); @@ -57,21 +59,39 @@ private void checkInsomniaResetRequired(World world){ private void updateTimeCycle(World world){ TimeCycle newTimeCycle = this.sleepService.isNight(world) ? TimeCycle.NIGHT : TimeCycle.DAY; - WorldProperty properties = this.worldPropertyService.getWorldProperties(world); + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); //prevent event from being fired unless TimeCycle is not unknown - if(properties.getTimeCycle() == TimeCycle.UNKNOWN){ - properties.setTimeCycle(newTimeCycle); - this.worldPropertyService.setWorldProperty(world, properties); + if(sleepMostWorld.getTimeCycle() == TimeCycle.UNKNOWN){ + sleepMostWorld.setTimeCycle(newTimeCycle); + this.sleepMostWorldService.updateWorld(sleepMostWorld); return; } //only run if time cycle changes - if(properties.getTimeCycle() == newTimeCycle) + if(sleepMostWorld.getTimeCycle() == newTimeCycle) return; - properties.setTimeCycle(newTimeCycle); - this.worldPropertyService.setWorldProperty(world, properties); + sleepMostWorld.setTimeCycle(newTimeCycle); + this.sleepMostWorldService.updateWorld(sleepMostWorld); Bukkit.getPluginManager().callEvent(new TimeCycleChangeEvent(world, newTimeCycle)); } -} + + private void checkFreezeRequired(World world){ + + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + double time = sleepMostWorld.getWorld().getTime(); + + if(!sleepMostWorld.isPlannedFrozen()) + return; + + if(time != Time.MID_NIGHT && time != Time.NOON) + return; + + int secondsToAdd = 20; + + Calendar timeToResume = Calendar.getInstance(); + timeToResume.add(Calendar.SECOND, secondsToAdd); + this.sleepMostWorldService.freezeTime(world, timeToResume); + } + } diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java index a637b18..757a6b4 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java @@ -1,6 +1,8 @@ package me.mrgeneralq.sleepmost.runnables; import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; +import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.statics.DataContainer; import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.interfaces.ISleepService; @@ -20,6 +22,7 @@ public class NightcycleAnimationTask extends BukkitRunnable { private final ISleepService sleepService; private final DataContainer dataContainer = DataContainer.getContainer(); + private final ISleepMostWorldService sleepMostWorldService; private final IFlagsRepository flagsRepository; private final World world; private final String lastSleeperName; @@ -28,7 +31,7 @@ public class NightcycleAnimationTask extends BukkitRunnable { private final List peopleWhoSlept; private int iterationCount = 1; - public NightcycleAnimationTask(ISleepService sleepService, IFlagsRepository flagsRepository, World world, Player lastSleeper, List peopleWhoSlept, SleepSkipCause sleepSkipCause) { + public NightcycleAnimationTask(ISleepService sleepService, IFlagsRepository flagsRepository, World world, Player lastSleeper, List peopleWhoSlept, SleepSkipCause sleepSkipCause, ISleepMostWorldService sleepMostWorldService) { this.sleepService = sleepService; this.flagsRepository = flagsRepository; this.world = world; @@ -37,6 +40,7 @@ public NightcycleAnimationTask(ISleepService sleepService, IFlagsRepository flag this.skipCause = sleepSkipCause; this.peopleWhoSlept = peopleWhoSlept; + this.sleepMostWorldService = sleepMostWorldService; } @Override @@ -44,8 +48,8 @@ public void run() { if(!sleepService.isNight(world)){ - //remove animation checker - this.dataContainer.setAnimationRunning(world, false); + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + sleepMostWorld.setTimeCycleAnimationIsRunning(false); this.sleepService.executeSleepReset(world, this.lastSleeperName, this.lastSLeeperDisplayName , this.peopleWhoSlept , this.skipCause); this.cancel(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java index 24a28e1..a148aec 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java @@ -2,13 +2,13 @@ import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.repositories.SleepMostWorldRepository; +import org.bukkit.GameRule; import org.bukkit.World; import java.util.Calendar; public class SleepMostWorldService implements ISleepMostWorldService { - private final SleepMostWorldRepository repository; public SleepMostWorldService(SleepMostWorldRepository repository) { @@ -17,10 +17,8 @@ public SleepMostWorldService(SleepMostWorldRepository repository) { @Override public void registerWorld(World world) { - SleepMostWorld sleepMostWorld = new SleepMostWorld(world); this.repository.set(sleepMostWorld.getWorld().getUID(), sleepMostWorld); - } @Override @@ -29,20 +27,33 @@ public void unregisterWorld(World world) { } @Override - public void freezeTime(World world) { + public void freezeTime(World world, Calendar calendar) { + world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); - sleepMostWorld.setFrozen(true); + sleepMostWorld.setFrozen(true, calendar); + this.repository.set(world.getUID(), sleepMostWorld); } @Override - public boolean isFrozen(World world) { + public void unfreezeTime(World world) { + world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); - return sleepMostWorld.isFrozen(); + sleepMostWorld.setFrozen(false, null); } @Override - public Calendar getFrozenSince(World world) { - SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); - return sleepMostWorld.getFrozenSince(); + public SleepMostWorld getWorld(World world) { + return this.repository.get(world.getUID()); + } + + @Override + public void updateWorld(SleepMostWorld sleepMostWorld) { + this.repository.set(sleepMostWorld.getWorld().getUID(), sleepMostWorld); + } + + @Override + public boolean worldExists(World world) { + return this.repository.exists(world.getUID()); } + } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java index 3ed9264..5443ead 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepService.java @@ -5,6 +5,7 @@ import me.mrgeneralq.sleepmost.enums.SleepState; import me.mrgeneralq.sleepmost.events.PlayerSleepStateChangeEvent; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.runnables.NightcycleAnimationTask; import me.mrgeneralq.sleepmost.statics.DataContainer; import me.mrgeneralq.sleepmost.enums.SleepSkipCause; @@ -29,6 +30,7 @@ public class SleepService implements ISleepService { private final IPlayerService playerService; private final IDebugService debugService; private final DataContainer dataContainer = DataContainer.getContainer(); + private final ISleepMostWorldService sleepMostWorldService; private static final int NIGHT_START_TIME = 12541, @@ -41,7 +43,8 @@ public SleepService( IFlagsRepository flagsRepository, IFlagService flagService, IPlayerService playerService, - IDebugService debugService + IDebugService debugService, + ISleepMostWorldService sleepMostWorldService ) { this.main = main; @@ -51,6 +54,7 @@ public SleepService( this.flagService = flagService; this.playerService = playerService; this.debugService = debugService; + this.sleepMostWorldService = sleepMostWorldService; } @Override @@ -265,8 +269,10 @@ public void runSkipAnimation(Player player, SleepSkipCause sleepSkipCause) { List sleepingPlayers = this.getSleepers(world).stream().map(p -> Bukkit.getOfflinePlayer(p.getUniqueId())).collect(Collectors.toList()); - dataContainer.setAnimationRunning(world, true); - new NightcycleAnimationTask(this, this.flagsRepository , world, player, sleepingPlayers , sleepSkipCause).runTaskTimer(this.main, 0, 1); + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + sleepMostWorld.setTimeCycleAnimationIsRunning(true); + + new NightcycleAnimationTask(this, this.flagsRepository , world, player, sleepingPlayers , sleepSkipCause, sleepMostWorldService).runTaskTimer(this.main, 0, 1); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/WorldPropertyService.java b/src/main/java/me/mrgeneralq/sleepmost/services/WorldPropertyService.java deleted file mode 100644 index 3d6e8c1..0000000 --- a/src/main/java/me/mrgeneralq/sleepmost/services/WorldPropertyService.java +++ /dev/null @@ -1,37 +0,0 @@ -package me.mrgeneralq.sleepmost.services; - -import me.mrgeneralq.sleepmost.interfaces.IWorldPropertyService; -import me.mrgeneralq.sleepmost.models.WorldProperty; -import me.mrgeneralq.sleepmost.repositories.WorldPropertyRepository; -import org.bukkit.World; - -public class WorldPropertyService implements IWorldPropertyService{ - - private final WorldPropertyRepository worldPropertyRepository; - - public WorldPropertyService(WorldPropertyRepository worldPropertyRepository) { - this.worldPropertyRepository = worldPropertyRepository; - } - - @Override - public WorldProperty getWorldProperties(World world) { - return this.worldPropertyRepository.get(world); - } - - @Override - public void createNewWorldProperty(World world) { - WorldProperty property = WorldProperty.getNewProperty(); - this.worldPropertyRepository.set(world, property); - } - - @Override - public void setWorldProperty(World world, WorldProperty property) { - this.worldPropertyRepository.set(world, property); - } - - - @Override - public boolean propertyExists(World world){ - return this.worldPropertyRepository.exists(world); - } -} diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java index f44fafe..d8d4663 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Bootstrapper.java @@ -29,14 +29,10 @@ public class Bootstrapper { private IInsomniaService insomniaService; private IDebugService debugService; - private WorldPropertyRepository worldPropertyRepository; - private IWorldPropertyService worldPropertyService; private MessageRepository messageRepository; - private ISleepMostWorldService sleepMostWorldService; - private static Bootstrapper instance; private Bootstrapper(){ } @@ -45,6 +41,8 @@ public void initialize(Sleepmost main){ this.configRepository = new ConfigRepository(main); this.configService = new ConfigService(main); + this.sleepMostWorldService = new SleepMostWorldService(new SleepMostWorldRepository()); + this.sleepMostPlayerService = new SleepMostPlayerService(new SleepMostPlayerRepository()); @@ -67,12 +65,7 @@ public void initialize(Sleepmost main){ this.flagService = new FlagService(flagsRepository, configRepository, configService, messageService); this.playerService = new PlayerService(); - this.sleepService = new SleepService(main, configService, configRepository, flagsRepository, flagService, playerService, debugService); - - this.worldPropertyRepository = new WorldPropertyRepository(); - this.worldPropertyService = new WorldPropertyService(this.worldPropertyRepository); - - this.sleepMostWorldService = new SleepMostWorldService(new SleepMostWorldRepository()); + this.sleepService = new SleepService(main, configService, configRepository, flagsRepository, flagService, playerService, debugService, sleepMostWorldService); this.configMessageMapper = ConfigMessageMapper.getMapper(); this.configMessageMapper.initialize(main); @@ -150,10 +143,6 @@ public IBossBarService getBossBarService() { return bossBarService; } - public IWorldPropertyService getWorldPropertyService() { - return worldPropertyService; - } - public IPlayerService getPlayerService() { return playerService; } @@ -173,4 +162,6 @@ public IDebugService getDebugService() { public ISleepMostWorldService getSleepMostWorldService() { return sleepMostWorldService; } + + } diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/DataContainer.java b/src/main/java/me/mrgeneralq/sleepmost/statics/DataContainer.java index 63b59bc..7f45a1b 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/DataContainer.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/DataContainer.java @@ -27,13 +27,6 @@ public boolean isAnimationRunningAt(World world) { return this.runningWorldsAnimation.contains(world.getUID()); } - public void setAnimationRunning(World world, boolean running) { - - if (running) - this.runningWorldsAnimation.add(world.getUID()); - else - this.runningWorldsAnimation.remove(world.getUID()); - } public void setPlayerSleeping(Player player, boolean sleeping) { diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java new file mode 100644 index 0000000..f5fc707 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java @@ -0,0 +1,8 @@ +package me.mrgeneralq.sleepmost.statics; + +public class Time { + + public static int MID_NIGHT = 18000; + public static int NOON = 6000; + +} diff --git a/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java b/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java index e5fb9a4..32537aa 100644 --- a/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java +++ b/src/main/tests/me/mrgeneralq/sleepmost/services/SleepServiceTest.java @@ -32,6 +32,7 @@ public class SleepServiceTest { private IFlagService mockFlagService; private IPlayerService playerService; private IDebugService debugService; + private ISleepMostWorldService sleepMostWorldService; @BeforeEach public void setUp() { @@ -42,7 +43,7 @@ public void setUp() { this.mockFlagRepository = mock(IFlagsRepository.class); this.mockFlagService = mock(IFlagService.class); this.playerService = mock(IPlayerService.class); - this.sleepService = new SleepService(this.mockSleepmost, this.mockConfigService, this.mockConfigRepository,this.mockFlagRepository,this.mockFlagService, this.playerService, this.debugService); + this.sleepService = new SleepService(this.mockSleepmost, this.mockConfigService, this.mockConfigRepository,this.mockFlagRepository,this.mockFlagService, this.playerService, this.debugService, this.sleepMostWorldService); } @Test From 92d3db25a8f60d722e3b80c829d1208090c1f6ad Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Mon, 29 Aug 2022 22:19:31 +0200 Subject: [PATCH 22/25] added freeze options for time --- .../me/mrgeneralq/sleepmost/Sleepmost.java | 4 +- ...ed.java => DynamicAnimationSpeedFlag.java} | 4 +- .../flags/LongerNightDurationFlag.java | 12 ++++ .../interfaces/IFlagsRepository.java | 4 +- .../sleepmost/models/SleepMostWorld.java | 7 --- .../repositories/FlagsRepository.java | 16 ++++-- .../sleepmost/runnables/Heartbeat.java | 55 +++++++++++++++++-- .../runnables/NightcycleAnimationTask.java | 3 +- .../services/SleepMostWorldService.java | 2 + .../me/mrgeneralq/sleepmost/statics/Time.java | 13 +++++ 10 files changed, 98 insertions(+), 22 deletions(-) rename src/main/java/me/mrgeneralq/sleepmost/flags/{DynamicAnimationSpeed.java => DynamicAnimationSpeedFlag.java} (63%) create mode 100644 src/main/java/me/mrgeneralq/sleepmost/flags/LongerNightDurationFlag.java diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index b45cf73..4d59444 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -10,6 +10,7 @@ import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; +import org.bukkit.GameRule; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; @@ -96,6 +97,7 @@ public static Sleepmost getInstance() { private void runPreTimerTasks(){ for(World world: Bukkit.getWorlds()){ this.bootstrapper.getSleepMostWorldService().registerWorld(world); + world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); } } @@ -106,7 +108,7 @@ private void runPlayerTasks(){ } private void runTimers(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService){ - new Heartbeat(sleepService, sleepMostWorldService, insomniaService).runTaskTimer(this, 20,20); + new Heartbeat(sleepService, sleepMostWorldService, insomniaService, bootstrapper.getFlagsRepository()).runTaskTimer(this, 20,20); } private void notifyIfNewUpdateExists(IUpdateService updateService) diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java b/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeedFlag.java similarity index 63% rename from src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java rename to src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeedFlag.java index bde12c4..b363f8d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeed.java +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/DynamicAnimationSpeedFlag.java @@ -3,9 +3,9 @@ import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; import me.mrgeneralq.sleepmost.flags.types.BooleanFlag; -public class DynamicAnimationSpeed extends BooleanFlag +public class DynamicAnimationSpeedFlag extends BooleanFlag { - public DynamicAnimationSpeed(AbstractFlagController controller) + public DynamicAnimationSpeedFlag(AbstractFlagController controller) { super("dynamic-animation-speed", controller, false); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/flags/LongerNightDurationFlag.java b/src/main/java/me/mrgeneralq/sleepmost/flags/LongerNightDurationFlag.java new file mode 100644 index 0000000..d9a5fb4 --- /dev/null +++ b/src/main/java/me/mrgeneralq/sleepmost/flags/LongerNightDurationFlag.java @@ -0,0 +1,12 @@ +package me.mrgeneralq.sleepmost.flags; + +import me.mrgeneralq.sleepmost.flags.controllers.AbstractFlagController; +import me.mrgeneralq.sleepmost.flags.types.IntegerFlag; + +public class LongerNightDurationFlag extends IntegerFlag +{ + public LongerNightDurationFlag(AbstractFlagController controller) + { + super("longer-night-duration", "", controller, 0); + } +} diff --git a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java index 54551ce..a3b421d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/interfaces/IFlagsRepository.java @@ -65,5 +65,7 @@ public interface IFlagsRepository GSitSleepFlag getGSitSleepFlag(); - DynamicAnimationSpeed getDynamicAnimationSpeed(); + DynamicAnimationSpeedFlag getDynamicAnimationSpeedFlag(); + + LongerNightDurationFlag getLongerNightDurationFlag(); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java index 81fa2af..f761d8d 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java +++ b/src/main/java/me/mrgeneralq/sleepmost/models/SleepMostWorld.java @@ -44,13 +44,6 @@ public void setTimeCycle(TimeCycle timeCycle) { this.timeCycle = timeCycle; } - public boolean isTimeCycleAnimation() { - return timeCycleAnimationIsRunning; - } - - public void setTimeCycleAnimation(boolean timeCycleAnimationIsRunning) { - this.timeCycleAnimationIsRunning = timeCycleAnimationIsRunning; - } public boolean isTimeCycleAnimationIsRunning() { return timeCycleAnimationIsRunning; diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java index 009cb72..4b9e6f4 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java @@ -50,7 +50,8 @@ public class FlagsRepository implements IFlagsRepository { private final PhantomResetAudienceFlag phantomResetAudienceFlag; private final AllowKickFlag allowKickFlag; private final InsomniaMilkFlag insomniaMilkFlag; - private final DynamicAnimationSpeed dynamicAnimationSpeed; + private final DynamicAnimationSpeedFlag dynamicAnimationSpeedFlag; + private final LongerNightDurationFlag longerNightDurationFlag; //DEPENDING ON HOOK private GSitHookFlag gSitHookFlag; @@ -91,7 +92,9 @@ public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.phantomResetAudienceFlag = new PhantomResetAudienceFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.allowKickFlag = new AllowKickFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.insomniaMilkFlag = new InsomniaMilkFlag(new ConfigFlagController<>(configRepository))); - setupFlag(this.dynamicAnimationSpeed = new DynamicAnimationSpeed(new ConfigFlagController<>(configRepository))); + setupFlag(this.dynamicAnimationSpeedFlag = new DynamicAnimationSpeedFlag(new ConfigFlagController<>(configRepository))); + setupFlag(this.longerNightDurationFlag = new LongerNightDurationFlag(new ConfigFlagController<>(configRepository))); + if(HookManager.isGSitInstalled()){ setupFlag(this.gSitHookFlag = new GSitHookFlag(new ConfigFlagController<>(configRepository))); @@ -305,8 +308,13 @@ public GSitSleepFlag getGSitSleepFlag() { } @Override - public DynamicAnimationSpeed getDynamicAnimationSpeed() { - return dynamicAnimationSpeed; + public DynamicAnimationSpeedFlag getDynamicAnimationSpeedFlag() { + return dynamicAnimationSpeedFlag; + } + + @Override + public LongerNightDurationFlag getLongerNightDurationFlag() { + return longerNightDurationFlag; } private void setupFlag(ISleepFlag flag) { diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java index b5aa20a..bb9cc41 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java @@ -3,6 +3,8 @@ import me.mrgeneralq.sleepmost.enums.SleepSkipCause; import me.mrgeneralq.sleepmost.enums.TimeCycle; import me.mrgeneralq.sleepmost.events.TimeCycleChangeEvent; +import me.mrgeneralq.sleepmost.flags.LongerNightDurationFlag; +import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; import me.mrgeneralq.sleepmost.interfaces.IInsomniaService; import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; @@ -22,11 +24,13 @@ public class Heartbeat extends BukkitRunnable { private final ISleepService sleepService; private final IInsomniaService insomniaService; private final ISleepMostWorldService sleepMostWorldService; + private final IFlagsRepository flagsRepository; - public Heartbeat(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService) { + public Heartbeat(ISleepService sleepService, ISleepMostWorldService sleepMostWorldService, IInsomniaService insomniaService, IFlagsRepository flagsRepository) { this.sleepService = sleepService; this.sleepMostWorldService = sleepMostWorldService; this.insomniaService = insomniaService; + this.flagsRepository = flagsRepository; } @Override @@ -35,8 +39,10 @@ public void run() { for(World world: Bukkit.getWorlds().stream().filter(this.sleepService::isEnabledAt).collect(Collectors.toList())) { updateTimeCycle(world); + checkPlannedFreezeRequired(world); checkInsomniaResetRequired(world); checkFreezeRequired(world); + checkUnfreezeRequired(world); SleepSkipCause cause = this.sleepService.getCurrentSkipCause(world); if(cause == SleepSkipCause.UNKNOWN|| cause == null){ @@ -82,16 +88,55 @@ private void checkFreezeRequired(World world){ SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); double time = sleepMostWorld.getWorld().getTime(); - if(!sleepMostWorld.isPlannedFrozen()) + if(sleepMostWorld.isFrozen()) return; - if(time != Time.MID_NIGHT && time != Time.NOON) + if(!sleepMostWorld.isPlannedFrozen()) + return; + + if(!Time.aroundMidNight(time)) return; - int secondsToAdd = 20; + int longerNightsDuration = this.flagsRepository.getLongerNightDurationFlag().getValueAt(world); + + if(longerNightsDuration <= 0) + return; Calendar timeToResume = Calendar.getInstance(); - timeToResume.add(Calendar.SECOND, secondsToAdd); + timeToResume.add(Calendar.SECOND, longerNightsDuration); this.sleepMostWorldService.freezeTime(world, timeToResume); } + + private void checkUnfreezeRequired(World world){ + + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + if(!sleepMostWorld.isFrozen()) + return; + + if(sleepMostWorld.getFrozenUntil().getTimeInMillis() > Calendar.getInstance().getTimeInMillis() && !sleepMostWorld.isTimeCycleAnimationIsRunning()) + return; + + this.sleepMostWorldService.unfreezeTime(world); + } + + + /* + * Check if the freeze needs to be scheduled + */ + private void checkPlannedFreezeRequired(World world){ + + double time = world.getTime(); + if(!Time.aroundTime(Time.MID_NIGHT - 500, time)) + return; + + double duration = this.flagsRepository.getLongerNightDurationFlag().getValueAt(world); + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + if(duration <= 0) + return; + + sleepMostWorld.setPlannedFrozen(true); + } + } diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java index 757a6b4..255811c 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/NightcycleAnimationTask.java @@ -8,7 +8,6 @@ import me.mrgeneralq.sleepmost.interfaces.ISleepService; import me.mrgeneralq.sleepmost.statics.ServerVersion; import me.mrgeneralq.sleepmost.utils.TimeUtils; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.World; @@ -87,7 +86,7 @@ public void run() { int calculatedSpeed = 85; - if(this.flagsRepository.getDynamicAnimationSpeed().getValueAt(world)){ + if(this.flagsRepository.getDynamicAnimationSpeedFlag().getValueAt(world)){ int sleepingPlayers = this.sleepService.getSleepersAmount(world); int totalPlayers = world.getPlayers().size(); diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java index a148aec..bf2911f 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java @@ -39,6 +39,8 @@ public void unfreezeTime(World world) { world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); sleepMostWorld.setFrozen(false, null); + sleepMostWorld.setPlannedFrozen(false); + this.repository.set(world.getUID(), sleepMostWorld); } @Override diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java b/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java index f5fc707..928f3d1 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/Time.java @@ -5,4 +5,17 @@ public class Time { public static int MID_NIGHT = 18000; public static int NOON = 6000; + + public static boolean aroundMidNight(double time){ + return time > MID_NIGHT && time < MID_NIGHT + 25; + } + + public static boolean aroundNoon(double time){ + return time > NOON && time < NOON + 25; + } + + public static boolean aroundTime(double originTime, double currentTime){ + return currentTime > originTime && currentTime < originTime + 25; + } + } From b8efae3d7fcb710522c3d2030215244127f0442e Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 30 Aug 2022 19:46:54 +0200 Subject: [PATCH 23/25] added message when sleeping during freeze --- .../sleepmost/commands/SleepCommand.java | 22 ++++++++++++++----- .../commands/subcommands/SleepSubCommand.java | 13 +++++++++++ .../sleepmost/enums/MessageKey.java | 4 +++- .../PlayerBedEnterEventListener.java | 15 ++++++++++++- .../hooks/GSitEventListener.java | 18 ++++++++++++--- .../sleepmost/mappers/MessageMapper.java | 2 +- 6 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java index 8f68418..bccca93 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/SleepCommand.java @@ -1,10 +1,8 @@ package me.mrgeneralq.sleepmost.commands; import me.mrgeneralq.sleepmost.enums.MessageKey; -import me.mrgeneralq.sleepmost.interfaces.ICooldownService; -import me.mrgeneralq.sleepmost.interfaces.IFlagsRepository; -import me.mrgeneralq.sleepmost.interfaces.IMessageService; -import me.mrgeneralq.sleepmost.interfaces.ISleepService; +import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -16,12 +14,14 @@ public class SleepCommand implements CommandExecutor { private final IMessageService messageService; private final ICooldownService cooldownService; private final IFlagsRepository flagsRepository; + private final ISleepMostWorldService sleepMostWorldService; - public SleepCommand(ISleepService sleepService, IMessageService messageService, ICooldownService cooldownService, IFlagsRepository flagsRepository) { + public SleepCommand(ISleepService sleepService, IMessageService messageService, ICooldownService cooldownService, IFlagsRepository flagsRepository, ISleepMostWorldService sleepMostWorldService) { this.sleepService = sleepService; this.messageService = messageService; this.cooldownService = cooldownService; this.flagsRepository = flagsRepository; + this.sleepMostWorldService = sleepMostWorldService; } @Override @@ -73,6 +73,18 @@ public boolean onCommand(CommandSender sender, Command command, String s, String .build()); return true; } + + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + if(sleepMostWorld.isFrozen()){ + this.messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED_LONGER_NIGHT) + .setWorld(world) + .setPlayer(player) + .build(); + return true; + } + + boolean updatedSleepStatus = !this.sleepService.isPlayerAsleep(player); //update the sleeping status diff --git a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java index e3f48bb..24027b7 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java +++ b/src/main/java/me/mrgeneralq/sleepmost/commands/subcommands/SleepSubCommand.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.templates.MessageTemplate; import org.bukkit.World; import org.bukkit.command.Command; @@ -62,6 +63,18 @@ public boolean executeCommand(CommandSender sender, Command cmd, String commandL } + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + if(sleepMostWorld.isFrozen()){ + + String longerNightsSleepPreventedMsg = this.messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED_LONGER_NIGHT) + .setWorld(world) + .setPlayer(player) + .build(); + this.messageService.sendMessage(player, longerNightsSleepPreventedMsg); + return true; + } + boolean updatedSleepStatus = !this.sleepService.isPlayerAsleep(player); //TODO check this what the original getStatusTemplate is diff --git a/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java b/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java index 3d0507c..bbca005 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java +++ b/src/main/java/me/mrgeneralq/sleepmost/enums/MessageKey.java @@ -48,5 +48,7 @@ public enum MessageKey { NIGHT_SKIPPED_TITLE, STORM_SKIPPED_TITLE, NIGHT_SKIPPED_SUBTITLE, - STORM_SKIPPED_SUBTITLE + STORM_SKIPPED_SUBTITLE, + + SLEEP_PREVENTED_LONGER_NIGHT } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java index b557f66..f8f1b4b 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/PlayerBedEnterEventListener.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.services.InsomniaService; import me.mrgeneralq.sleepmost.statics.DataContainer; import org.bukkit.World; @@ -88,8 +89,20 @@ public void onPlayerBedEnter(PlayerBedEnterEvent e) { return; } + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + + if(sleepMostWorld.isFrozen()){ + + String longerNightsSleepPreventedMsg = this.messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED_LONGER_NIGHT) + .setWorld(world) + .setPlayer(player) + .build(); + this.messageService.sendMessage(player, longerNightsSleepPreventedMsg); + e.setCancelled(true); + return; + } + if(!this.sleepService.isPlayerAsleep(player)) this.sleepService.setSleeping(player , true); - } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java index d432688..d5c0506 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java +++ b/src/main/java/me/mrgeneralq/sleepmost/eventlisteners/hooks/GSitEventListener.java @@ -4,6 +4,7 @@ import dev.geco.gsit.api.event.PlayerPoseEvent; import me.mrgeneralq.sleepmost.enums.MessageKey; import me.mrgeneralq.sleepmost.interfaces.*; +import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.statics.DataContainer; import org.bukkit.World; import org.bukkit.entity.Player; @@ -47,6 +48,8 @@ public void onPlayerPose(PlayerPoseEvent e){ World world = player.getWorld(); Pose pose = e.getPoseSeat().getPose(); + if(!this.flagsRepository.getGSitHookFlag().getValueAt(world)) + return; if(!this.sleepService.isEnabledAt(world)) return; @@ -54,9 +57,6 @@ public void onPlayerPose(PlayerPoseEvent e){ if(!this.sleepService.isSleepingPossible(world)) return; - if(!this.flagsRepository.getGSitHookFlag().getValueAt(world)) - return; - if(!this.flagsRepository.getGSitSleepFlag().getValueAt(world)) return; @@ -68,6 +68,7 @@ public void onPlayerPose(PlayerPoseEvent e){ return; + //check if sleeping during storms is allowed if (world.isThundering() && !this.flagsRepository.getStormSleepFlag().getValueAt(world)) { @@ -104,6 +105,17 @@ public void onPlayerPose(PlayerPoseEvent e){ return; } + SleepMostWorld sleepMostWorld = this.sleepMostWorldService.getWorld(world); + if(sleepMostWorld.isFrozen()){ + + String longerNightsSleepPreventedMsg = this.messageService.getMessagePrefixed(MessageKey.SLEEP_PREVENTED_LONGER_NIGHT) + .setWorld(world) + .setPlayer(player) + .build(); + this.messageService.sendMessage(player, longerNightsSleepPreventedMsg); + return; + } + if(!this.sleepService.isPlayerAsleep(player)) this.sleepService.setSleeping(player , true); } diff --git a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java index 542ebf5..5c027aa 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java +++ b/src/main/java/me/mrgeneralq/sleepmost/mappers/MessageMapper.java @@ -71,7 +71,7 @@ public void loadMessages(){ this.messages.put(MessageKey.STORM_SKIPPED_TITLE, new ConfigMessage("user.storm-skipped-title", "&eStorm skipped")); this.messages.put(MessageKey.STORM_SKIPPED_SUBTITLE, new ConfigMessage("user.storm-skipped-subtitle", "&bWhat a weather...")); - + this.messages.put(MessageKey.SLEEP_PREVENTED_LONGER_NIGHT, new ConfigMessage("user.longer-night.sleep-prevented", "&cThe night is longer than usual, you don't feel sleepy yet")); } public ConfigMessage getMessage(MessageKey message){ From 7ac64c65309622fc80f5c803fc20c1211274bf9e Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 30 Aug 2022 20:18:08 +0200 Subject: [PATCH 24/25] added version check for < 1.13 --- src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java | 2 ++ .../sleepmost/repositories/FlagsRepository.java | 6 ++++-- .../me/mrgeneralq/sleepmost/runnables/Heartbeat.java | 4 ++++ .../sleepmost/services/SleepMostWorldService.java | 9 ++++++++- .../me/mrgeneralq/sleepmost/statics/ServerVersion.java | 7 +++++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java index 4d59444..2044e23 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java +++ b/src/main/java/me/mrgeneralq/sleepmost/Sleepmost.java @@ -97,6 +97,8 @@ public static Sleepmost getInstance() { private void runPreTimerTasks(){ for(World world: Bukkit.getWorlds()){ this.bootstrapper.getSleepMostWorldService().registerWorld(world); + + if(ServerVersion.CURRENT_VERSION.supportsGameRules()) world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); } } diff --git a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java index 4b9e6f4..52508b8 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java +++ b/src/main/java/me/mrgeneralq/sleepmost/repositories/FlagsRepository.java @@ -7,6 +7,7 @@ import me.mrgeneralq.sleepmost.flags.types.AbstractFlag; import me.mrgeneralq.sleepmost.interfaces.*; import me.mrgeneralq.sleepmost.managers.HookManager; +import me.mrgeneralq.sleepmost.statics.ServerVersion; import java.util.*; @@ -51,7 +52,7 @@ public class FlagsRepository implements IFlagsRepository { private final AllowKickFlag allowKickFlag; private final InsomniaMilkFlag insomniaMilkFlag; private final DynamicAnimationSpeedFlag dynamicAnimationSpeedFlag; - private final LongerNightDurationFlag longerNightDurationFlag; + private LongerNightDurationFlag longerNightDurationFlag; //DEPENDING ON HOOK private GSitHookFlag gSitHookFlag; @@ -93,8 +94,9 @@ public FlagsRepository(IConfigRepository configRepository) { setupFlag(this.allowKickFlag = new AllowKickFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.insomniaMilkFlag = new InsomniaMilkFlag(new ConfigFlagController<>(configRepository))); setupFlag(this.dynamicAnimationSpeedFlag = new DynamicAnimationSpeedFlag(new ConfigFlagController<>(configRepository))); - setupFlag(this.longerNightDurationFlag = new LongerNightDurationFlag(new ConfigFlagController<>(configRepository))); + if(ServerVersion.CURRENT_VERSION.supportsGameRules()) + setupFlag(this.longerNightDurationFlag = new LongerNightDurationFlag(new ConfigFlagController<>(configRepository))); if(HookManager.isGSitInstalled()){ setupFlag(this.gSitHookFlag = new GSitHookFlag(new ConfigFlagController<>(configRepository))); diff --git a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java index bb9cc41..1880078 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java +++ b/src/main/java/me/mrgeneralq/sleepmost/runnables/Heartbeat.java @@ -9,6 +9,7 @@ import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.interfaces.ISleepService; import me.mrgeneralq.sleepmost.models.SleepMostWorld; +import me.mrgeneralq.sleepmost.statics.ServerVersion; import me.mrgeneralq.sleepmost.statics.Time; import org.bukkit.Bukkit; import org.bukkit.World; @@ -39,10 +40,13 @@ public void run() { for(World world: Bukkit.getWorlds().stream().filter(this.sleepService::isEnabledAt).collect(Collectors.toList())) { updateTimeCycle(world); + + if(ServerVersion.CURRENT_VERSION.supportsGameRules()){ checkPlannedFreezeRequired(world); checkInsomniaResetRequired(world); checkFreezeRequired(world); checkUnfreezeRequired(world); + } SleepSkipCause cause = this.sleepService.getCurrentSkipCause(world); if(cause == SleepSkipCause.UNKNOWN|| cause == null){ diff --git a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java index bf2911f..57573dd 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java +++ b/src/main/java/me/mrgeneralq/sleepmost/services/SleepMostWorldService.java @@ -2,6 +2,7 @@ import me.mrgeneralq.sleepmost.interfaces.ISleepMostWorldService; import me.mrgeneralq.sleepmost.models.SleepMostWorld; import me.mrgeneralq.sleepmost.repositories.SleepMostWorldRepository; +import me.mrgeneralq.sleepmost.statics.ServerVersion; import org.bukkit.GameRule; import org.bukkit.World; @@ -28,7 +29,10 @@ public void unregisterWorld(World world) { @Override public void freezeTime(World world, Calendar calendar) { + + if(ServerVersion.CURRENT_VERSION.supportsGameRules()) world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); + SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); sleepMostWorld.setFrozen(true, calendar); this.repository.set(world.getUID(), sleepMostWorld); @@ -36,7 +40,10 @@ public void freezeTime(World world, Calendar calendar) { @Override public void unfreezeTime(World world) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); + + if(ServerVersion.CURRENT_VERSION.supportsGameRules()) + world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); + SleepMostWorld sleepMostWorld = this.repository.get(world.getUID()); sleepMostWorld.setFrozen(false, null); sleepMostWorld.setPlannedFrozen(false); diff --git a/src/main/java/me/mrgeneralq/sleepmost/statics/ServerVersion.java b/src/main/java/me/mrgeneralq/sleepmost/statics/ServerVersion.java index 6eb594a..01b7eb6 100644 --- a/src/main/java/me/mrgeneralq/sleepmost/statics/ServerVersion.java +++ b/src/main/java/me/mrgeneralq/sleepmost/statics/ServerVersion.java @@ -19,6 +19,7 @@ public enum ServerVersion private boolean supportsBossBars; private boolean hasTimeSkipEvent; private boolean supportsClickableText; + private boolean supportsGameRules; public static final ServerVersion CURRENT_VERSION; @@ -36,6 +37,8 @@ public enum ServerVersion forVersionsFrom(V1_9, version -> version.maxHPHealer = MaxHPHealer.UPDATED_HEALER); forVersionsFrom(V1_15, version -> version.hasTimeSkipEvent = true); forVersionsFrom(V1_12, version -> version.supportsBossBars = true); + forVersionsFrom(V1_13, version -> version.supportsGameRules = true); + } ServerVersion() { this.name = WordUtils.capitalizeFully(name().substring(1).toLowerCase().replace('_', '.')); @@ -69,6 +72,10 @@ public boolean supportsClickableText() { return supportsClickableText; } + public boolean supportsGameRules() { + return supportsGameRules; + } + //Setup methods private static ServerVersion computeServerVersion() { return Arrays.stream(VALUES) From 4aac4ad76724d440256d5ba9c5b7940335e21c64 Mon Sep 17 00:00:00 2001 From: MrGeneralQ Date: Tue, 30 Aug 2022 22:26:39 +0200 Subject: [PATCH 25/25] bstats update --- pom.xml | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e003a73..b9a78f5 100644 --- a/pom.xml +++ b/pom.xml @@ -35,11 +35,12 @@ ${java.version} + + Do not include the ... part if you are using Sponge! false @@ -57,6 +58,28 @@ + --> + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + + org.bstats + + ${shade.base}.bstats + + + + + + package + + shade + + + @@ -122,7 +145,7 @@ org.bstats bstats-bukkit - 1.8 + 3.0.0 compile