From 7bc3ba3783b8f82e066d12a627e644fd9caa78c4 Mon Sep 17 00:00:00 2001 From: ZeroHD Date: Wed, 27 Feb 2019 18:00:56 +0100 Subject: [PATCH] Added World View Distance Override (#26) --- docs/source/changelog/index.rst | 3 +- docs/source/changelog/v1.7.rst | 15 +++++++++ docs/source/misc.rst | 7 +++- pom.xml | 12 +++---- src/main/java/xyz/etztech/qol/QoL.java | 33 ++++++++++++++----- .../etztech/qol/listeners/JoinListener.java | 22 ++++++++----- .../listeners/PlayerChangedWorldListener.java | 24 ++++++++++++++ src/main/resources/config.yml | 6 +++- 8 files changed, 96 insertions(+), 26 deletions(-) create mode 100644 docs/source/changelog/v1.7.rst create mode 100644 src/main/java/xyz/etztech/qol/listeners/PlayerChangedWorldListener.java diff --git a/docs/source/changelog/index.rst b/docs/source/changelog/index.rst index 3ad6100..7dcbf07 100644 --- a/docs/source/changelog/index.rst +++ b/docs/source/changelog/index.rst @@ -11,4 +11,5 @@ Changelogs v1.3 v1.4 v1.5 - v1.6 \ No newline at end of file + v1.6 + v1.7 \ No newline at end of file diff --git a/docs/source/changelog/v1.7.rst b/docs/source/changelog/v1.7.rst new file mode 100644 index 0000000..c489d14 --- /dev/null +++ b/docs/source/changelog/v1.7.rst @@ -0,0 +1,15 @@ +.. include:: ../common.rst + +.. _qol_v1.7: + +QoL v1.7 +======== + +Additions +--------- +* `World View Distance Overrides`_ - Allows each world to have its own view distance, set in the config + +.. _World View Distance Overrides: https://git.etztech.xyz/Etzelia/Etzelia/QoL/commit/81a2fb3fa0e16ebbd4363074b17447be1d5b950e + +Bug Fixes +--------- \ No newline at end of file diff --git a/docs/source/misc.rst b/docs/source/misc.rst index d340076..fe82b73 100644 --- a/docs/source/misc.rst +++ b/docs/source/misc.rst @@ -52,4 +52,9 @@ If Dynmap is detected on the server, QoL will hide a user on the dynmap when the Grief Alert ----------- -If a player places TnT, starts a fire, or dumps lava, everyone with the ``qol.griefalert`` permission is notified as well as an optional Discord ping. \ No newline at end of file +If a player places TnT, starts a fire, or dumps lava, everyone with the ``qol.griefalert`` permission is notified as well as an optional Discord ping. + +World View Distance Override +---------------------------- + +Each world can have its own view distance. View distances of each world can be set in the config file. If no view distance is set, the view distance defaults to the one in server.properties. \ No newline at end of file diff --git a/pom.xml b/pom.xml index bb29ef3..224bff4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xyz.etztech QoL - 1.6 + 1.7 jar @@ -29,9 +29,9 @@ - org.spigotmc - spigot-api - 1.13.1-R0.1-SNAPSHOT + com.destroystokyo.paper + paper-api + 1.13.2-R0.1-SNAPSHOT provided @@ -59,8 +59,8 @@ - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ + papermc + https://papermc.io/repo/repository/maven-public/ etztech-repo diff --git a/src/main/java/xyz/etztech/qol/QoL.java b/src/main/java/xyz/etztech/qol/QoL.java index 0782f35..e187d94 100644 --- a/src/main/java/xyz/etztech/qol/QoL.java +++ b/src/main/java/xyz/etztech/qol/QoL.java @@ -1,8 +1,10 @@ package xyz.etztech.qol; +import net.ess3.api.Economy; import net.ess3.api.IEssentials; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -13,9 +15,7 @@ import xyz.etztech.qol.other.GriefAlert; import xyz.etztech.qol.other.LinkCommand; import xyz.etztech.qol.other.TPSRunnable; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.logging.Logger; public class QoL extends JavaPlugin { @@ -33,6 +33,8 @@ public class QoL extends JavaPlugin { private static boolean timeout = false; private static List audits = new ArrayList<>(); private static List links = new ArrayList<>(); + + private static Map viewDistances = new HashMap<>(); private GriefAlert griefAlert; public void onEnable() { @@ -74,6 +76,8 @@ public class QoL extends JavaPlugin { getServer().getPluginManager().registerEvents(playerBucketEmptyListener, this); BlockPlaceListener blockPlaceListener = new BlockPlaceListener(this); getServer().getPluginManager().registerEvents(blockPlaceListener, this); + PlayerChangedWorldListener playerChangedWorldListener = new PlayerChangedWorldListener(this); + getServer().getPluginManager().registerEvents(playerChangedWorldListener, this); // Add commands MainCommand mainCommand = new MainCommand(this); @@ -175,6 +179,17 @@ public class QoL extends JavaPlugin { for (String raw : config.getStringList("links")) { links.add(LinkCommand.fromString(raw)); } + + viewDistances = new HashMap<>(); + + ConfigurationSection view_distances = config.getConfigurationSection("view-distances"); + + for (String worldName : view_distances.getKeys(false)) { + + int viewDistance = view_distances.getInt(worldName); + + viewDistances.put(worldName, viewDistance); + } } @@ -279,16 +294,16 @@ public class QoL extends JavaPlugin { return griefAlert; } + public static Map getViewDistances() { + return viewDistances; + } public void runTask(final String command) { Bukkit.getScheduler().runTask(QoL.instance, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); } - - - - - - + public void updatePlayerViewDistance(Player player) { + player.setViewDistance(viewDistances.getOrDefault(player.getWorld().getName().toLowerCase(), getServer().getViewDistance())); + } } diff --git a/src/main/java/xyz/etztech/qol/listeners/JoinListener.java b/src/main/java/xyz/etztech/qol/listeners/JoinListener.java index 5ce5e4c..2caa482 100644 --- a/src/main/java/xyz/etztech/qol/listeners/JoinListener.java +++ b/src/main/java/xyz/etztech/qol/listeners/JoinListener.java @@ -42,18 +42,24 @@ public class JoinListener implements Listener { // Queue commands List queues = plugin.getConfig().getList("queue"); - for (int i = 0; i < queues.size(); i++) { - try { - LinkedHashMap queue = (LinkedHashMap) queues.get(i); - String permission = (String) queue.get("permission"); - if (player.hasPermission(permission)) { - for (String command : (List) queue.get("commands")) { - plugin.runTask(command.replace("", player.getName())); + + if (queues != null) { + for (int i = 0; i < queues.size(); i++) { + try { + LinkedHashMap queue = (LinkedHashMap) queues.get(i); + String permission = (String) queue.get("permission"); + if (player.hasPermission(permission)) { + for (String command : (List) queue.get("commands")) { + plugin.runTask(command.replace("", player.getName())); + } } + } catch (Exception ignored) { } - } catch (Exception ignored) {} + } } + plugin.updatePlayerViewDistance(player); + } } diff --git a/src/main/java/xyz/etztech/qol/listeners/PlayerChangedWorldListener.java b/src/main/java/xyz/etztech/qol/listeners/PlayerChangedWorldListener.java new file mode 100644 index 0000000..4c41a93 --- /dev/null +++ b/src/main/java/xyz/etztech/qol/listeners/PlayerChangedWorldListener.java @@ -0,0 +1,24 @@ +package xyz.etztech.qol.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import xyz.etztech.qol.QoL; + +import java.util.Map; + +public class PlayerChangedWorldListener implements Listener { + QoL plugin; + + public PlayerChangedWorldListener(QoL plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerChangedWorld(PlayerChangedWorldEvent event) { + Player player = event.getPlayer(); + + plugin.updatePlayerViewDistance(player); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d60c700..9fa67eb 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -88,4 +88,8 @@ disable-fire: lightning: false fireball: false ender_crystal: false - explosion: false \ No newline at end of file + explosion: false + +# Overrides view distance per world, format is [World Name]: [View Distance] +view-distances: + # world: 2