From 1c69b1cc554a397b1924ed6d1888fe5dac93dd05 Mon Sep 17 00:00:00 2001 From: Michael Ziluck Date: Wed, 5 Jun 2019 20:09:07 -0500 Subject: [PATCH] Resolves #6 --- pom.xml | 2 +- .../com/alttd/altitudetag/AltitudeTag.java | 27 +++++++++++++++++-- .../altitudetag/configuration/Config.java | 9 +++++++ .../listeners/ConnectionListener.java | 11 ++------ src/main/resources/config.yml | 6 ++++- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 21c920f..280b96d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.alttd AltitudeTag - 1.0.3 + 1.0.5 UTF-8 diff --git a/src/main/java/com/alttd/altitudetag/AltitudeTag.java b/src/main/java/com/alttd/altitudetag/AltitudeTag.java index d18a1e7..840b8a7 100644 --- a/src/main/java/com/alttd/altitudetag/AltitudeTag.java +++ b/src/main/java/com/alttd/altitudetag/AltitudeTag.java @@ -1,6 +1,7 @@ package com.alttd.altitudetag; import java.io.File; +import java.util.Optional; import java.util.UUID; import java.util.function.Consumer; @@ -15,6 +16,7 @@ import org.bukkit.Bukkit; import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; public class AltitudeTag extends JavaPlugin { @@ -25,6 +27,8 @@ public class AltitudeTag extends JavaPlugin private BossBar bossBar; + private BukkitTask tagTimeLimitTask; + /** * Enable the plugin */ @@ -122,8 +126,15 @@ public class AltitudeTag extends JavaPlugin if (tagger != null) { NotificationHandler.sendGlobalNotifications(previousPlayer != null ? previousPlayer.getName() : null, - Bukkit.getPlayer(tagger).getName(), - cause); + Bukkit.getPlayer(tagger).getName(), cause); + + if (Config.TIME_LIMIT_ENABLED.getValue()) + { + if (instance.tagTimeLimitTask != null && !instance.tagTimeLimitTask.isCancelled()) { + instance.tagTimeLimitTask.cancel(); + } + instance.tagTimeLimitTask = Bukkit.getScheduler().runTaskLater(instance, () -> randomTagger(TagCause.TIMEOUT, Bukkit.getPlayer(tagger)), Config.TIME_LIMIT_DURATION.getValue()); + } } instance.prevTagger = instance.tagger; @@ -155,6 +166,18 @@ public class AltitudeTag extends JavaPlugin Leaderboard.getTags(uuid, consumer); } + public static Player randomTagger(TagCause cause, Player filtered) + { + Optional optional = Bukkit.getOnlinePlayers().stream().filter(p -> p != filtered).findAny(); + if (!optional.isPresent()) + { + throw new IllegalStateException("Filtering failed. All players: " + filtered.getUniqueId()); + } + Player player = optional.get(); + AltitudeTag.setTagger(player.getUniqueId(), cause); + return player; + } + /** * Returns the singleton instance of this plugin. * diff --git a/src/main/java/com/alttd/altitudetag/configuration/Config.java b/src/main/java/com/alttd/altitudetag/configuration/Config.java index d45e0af..7e68e42 100644 --- a/src/main/java/com/alttd/altitudetag/configuration/Config.java +++ b/src/main/java/com/alttd/altitudetag/configuration/Config.java @@ -93,6 +93,11 @@ public final class Config public static final MutableValue TAG_DELAY_DURATION = new MutableValue<>(60); public static final MutableValue TAG_DELAY_MESSAGE = new MutableValue<>("&e* Can't tag anyone within 5 seconds of becoming 'it'!"); + public static final MutableValue TIME_LIMIT_ENABLED = new MutableValue<>(true); + public static final MutableValue TIME_LIMIT_DURATION = new MutableValue<>(1200); + public static final MutableValue TIME_LIMIT_MESSAGE = new MutableValue<>( + "&e* Transferring 'it' since you've had it for awhile."); + /** * Update the values from the config file. */ @@ -153,6 +158,10 @@ public final class Config updateValue(config, save, "tag-delay.duration", TAG_DELAY_DURATION); updateValue(config, save, "tag-delay.message", TAG_DELAY_MESSAGE); + updateValue(config, save, "time-limit.enabled", TIME_LIMIT_ENABLED); + updateValue(config, save, "time-limit.duration", TIME_LIMIT_DURATION); + updateValue(config, save, "time-limit.message", TIME_LIMIT_MESSAGE); + if (save.getValue()) { AltitudeTag.getInstance().saveConfig(); diff --git a/src/main/java/com/alttd/altitudetag/listeners/ConnectionListener.java b/src/main/java/com/alttd/altitudetag/listeners/ConnectionListener.java index 42f6b77..7b76bdd 100644 --- a/src/main/java/com/alttd/altitudetag/listeners/ConnectionListener.java +++ b/src/main/java/com/alttd/altitudetag/listeners/ConnectionListener.java @@ -1,7 +1,5 @@ package com.alttd.altitudetag.listeners; -import java.util.Optional; - import com.alttd.altitudetag.AltitudeTag; import com.alttd.altitudetag.NotificationHandler; import com.alttd.altitudetag.TagCause; @@ -41,13 +39,8 @@ public class ConnectionListener implements Listener return; } - Optional optional = Bukkit.getOnlinePlayers().stream().filter(p -> p != event.getPlayer()).findAny(); - if (!optional.isPresent()) - { - throw new IllegalStateException("There is more than one player on but for some reason they are all: " + event.getPlayer().getUniqueId()); - } - Player player = optional.get(); - AltitudeTag.setTagger(player.getUniqueId(), TagCause.DISCONNECT_TRANSFER); + Player player = AltitudeTag.randomTagger(TagCause.DISCONNECT_TRANSFER, event.getPlayer()); + NotificationHandler.sendVictimTitle(player, false); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index cb4ca0a..1549b65 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -57,4 +57,8 @@ tag-backs: tag-delay: enabled: true duration: 60 - message: "&e* Can't tag anyone within 5 seconds of becoming 'it'!" \ No newline at end of file + message: "&e* Can't tag anyone within 5 seconds of becoming 'it'!" +time-limit: + enabled: true + duration: 1200 + message: "&e* Transferring 'it' since you've had it for awhile." \ No newline at end of file