Add untested update system, add delay config option for tablist
This commit is contained in:
		| @@ -228,6 +228,9 @@ public class DisguiseConfig { | |||||||
|     @Getter |     @Getter | ||||||
|     @Setter |     @Setter | ||||||
|     private static boolean scoreboardDisguiseNames; |     private static boolean scoreboardDisguiseNames; | ||||||
|  |     @Getter | ||||||
|  |     @Setter | ||||||
|  |     private static int tablistRemoveDelay; | ||||||
|  |  | ||||||
|     public static PermissionDefault getCommandVisibility() { |     public static PermissionDefault getCommandVisibility() { | ||||||
|         return commandVisibility; |         return commandVisibility; | ||||||
| @@ -443,6 +446,7 @@ public class DisguiseConfig { | |||||||
|         setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull")); |         setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull")); | ||||||
|         setWolfDyeable(config.getBoolean("DyeableWolf")); |         setWolfDyeable(config.getBoolean("DyeableWolf")); | ||||||
|         setScoreboardDisguiseNames(config.getBoolean("ScoreboardNames")); |         setScoreboardDisguiseNames(config.getBoolean("ScoreboardNames")); | ||||||
|  |         setTablistRemoveDelay(config.getInt("TablistRemoveDelay")); | ||||||
|  |  | ||||||
|         if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) { |         if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) { | ||||||
|             DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!"); |             DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!"); | ||||||
|   | |||||||
| @@ -103,15 +103,22 @@ public class DisguiseListener implements Listener { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void runUpdateScheduler() { |     private void runUpdateScheduler() { | ||||||
|  |         boolean autoUpdate = plugin.getConfig().getBoolean("AutoUpdateDev"); | ||||||
|  |  | ||||||
|         if (!plugin.getConfig().getBoolean("NotifyUpdate")) { |         if (!plugin.getConfig().getBoolean("NotifyUpdate")) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (autoUpdate && !isCheckReleases()) { | ||||||
|  |             DisguiseUtilities.getLogger() | ||||||
|  |                     .info("Plugin will attempt to auto update when new builds are ready! Check config to disable."); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         updaterTask = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { |         updaterTask = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { | ||||||
|             @Override |             @Override | ||||||
|             public void run() { |             public void run() { | ||||||
|                 try { |                 try { | ||||||
|                     UpdateChecker updateChecker = new UpdateChecker("32453"); |                     UpdateChecker updateChecker = LibsDisguises.getInstance().getUpdateChecker(); | ||||||
|                     boolean checkReleases = isCheckReleases(); |                     boolean checkReleases = isCheckReleases(); | ||||||
|  |  | ||||||
|                     if (checkReleases) { |                     if (checkReleases) { | ||||||
| @@ -126,15 +133,21 @@ public class DisguiseListener implements Listener { | |||||||
|                         latestVersion = version; |                         latestVersion = version; | ||||||
|                         updateMessage = LibsMsg.UPDATE_READY; |                         updateMessage = LibsMsg.UPDATE_READY; | ||||||
|                     } else { |                     } else { | ||||||
|                         updateChecker.checkSnapshotUpdate(Integer.parseInt(plugin.getBuildNo())); |                         updateChecker.checkSnapshotUpdate(plugin.getBuildNumber()); | ||||||
|  |  | ||||||
|                         if (updateChecker.getLatestSnapshot() <= 0) { |                         if (updateChecker.getLatestSnapshot() <= 0) { | ||||||
|                             return; |                             return; | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
|                         currentVersion = plugin.getBuildNo(); |  | ||||||
|                         latestVersion = "" + updateChecker.getLatestSnapshot(); |                         latestVersion = "" + updateChecker.getLatestSnapshot(); | ||||||
|                         updateMessage = LibsMsg.UPDATE_READY_SNAPSHOT; |  | ||||||
|  |                         if (autoUpdate && plugin.isNumberedBuild()) { | ||||||
|  |                             boolean result = updateChecker.grabSnapshotBuild(); | ||||||
|  |                             updateMessage = result ? LibsMsg.UPDATE_SUCCESS : LibsMsg.UPDATE_FAILED; | ||||||
|  |                         } else { | ||||||
|  |                             currentVersion = plugin.getBuildNo(); | ||||||
|  |                             updateMessage = LibsMsg.UPDATE_READY_SNAPSHOT; | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     Bukkit.getScheduler().runTask(plugin, new Runnable() { |                     Bukkit.getScheduler().runTask(plugin, new Runnable() { | ||||||
| @@ -165,7 +178,11 @@ public class DisguiseListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         player.sendMessage(updateMessage.get(currentVersion, latestVersion)); |         if (updateMessage == LibsMsg.UPDATE_SUCCESS || updateMessage == LibsMsg.UPDATE_FAILED) { | ||||||
|  |             player.sendMessage(updateMessage.get()); | ||||||
|  |         } else { | ||||||
|  |             player.sendMessage(updateMessage.get(currentVersion, latestVersion)); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void cleanup() { |     public void cleanup() { | ||||||
| @@ -477,7 +494,6 @@ public class DisguiseListener implements Listener { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }.runTaskLater(LibsDisguises.getInstance(), 60); |         }.runTaskLater(LibsDisguises.getInstance(), 60); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ import me.libraryaddict.disguise.commands.undisguise.UndisguiseRadiusCommand; | |||||||
| import me.libraryaddict.disguise.commands.utils.*; | import me.libraryaddict.disguise.commands.utils.*; | ||||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | import me.libraryaddict.disguise.utilities.LibsPremium; | ||||||
|  | import me.libraryaddict.disguise.utilities.UpdateChecker; | ||||||
| import me.libraryaddict.disguise.utilities.metrics.MetricsInitalizer; | import me.libraryaddict.disguise.utilities.metrics.MetricsInitalizer; | ||||||
| import me.libraryaddict.disguise.utilities.packets.PacketsManager; | import me.libraryaddict.disguise.utilities.packets.PacketsManager; | ||||||
| import me.libraryaddict.disguise.utilities.parser.DisguiseParser; | import me.libraryaddict.disguise.utilities.parser.DisguiseParser; | ||||||
| @@ -42,6 +43,8 @@ public class LibsDisguises extends JavaPlugin { | |||||||
|     private String buildNumber; |     private String buildNumber; | ||||||
|     @Getter |     @Getter | ||||||
|     private boolean reloaded; |     private boolean reloaded; | ||||||
|  |     @Getter | ||||||
|  |     private final UpdateChecker updateChecker = new UpdateChecker("32453"); | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onLoad() { |     public void onLoad() { | ||||||
| @@ -168,6 +171,10 @@ public class LibsDisguises extends JavaPlugin { | |||||||
|         return buildNumber; |         return buildNumber; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public int getBuildNumber() { | ||||||
|  |         return isNumberedBuild() ? Integer.parseInt(getBuildNo()) : 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public boolean isNumberedBuild() { |     public boolean isNumberedBuild() { | ||||||
|         return getBuildNo() != null && getBuildNo().matches("[0-9]+"); |         return getBuildNo() != null && getBuildNo().matches("[0-9]+"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ import me.libraryaddict.disguise.disguisetypes.DisguiseType; | |||||||
| import me.libraryaddict.disguise.disguisetypes.MetaIndex; | import me.libraryaddict.disguise.disguisetypes.MetaIndex; | ||||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | import me.libraryaddict.disguise.utilities.LibsPremium; | ||||||
|  | import me.libraryaddict.disguise.utilities.UpdateChecker; | ||||||
| import me.libraryaddict.disguise.utilities.params.ParamInfoManager; | import me.libraryaddict.disguise.utilities.params.ParamInfoManager; | ||||||
| import me.libraryaddict.disguise.utilities.parser.DisguisePerm; | import me.libraryaddict.disguise.utilities.parser.DisguisePerm; | ||||||
| import me.libraryaddict.disguise.utilities.parser.DisguisePermissions; | import me.libraryaddict.disguise.utilities.parser.DisguisePermissions; | ||||||
| @@ -27,6 +28,7 @@ import org.bukkit.command.TabCompleter; | |||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
| import org.bukkit.inventory.ItemStack; | import org.bukkit.inventory.ItemStack; | ||||||
| import org.bukkit.permissions.Permissible; | import org.bukkit.permissions.Permissible; | ||||||
|  | import org.bukkit.scheduler.BukkitRunnable; | ||||||
| import org.bukkit.scoreboard.Scoreboard; | import org.bukkit.scoreboard.Scoreboard; | ||||||
| import org.bukkit.scoreboard.Team; | import org.bukkit.scoreboard.Team; | ||||||
|  |  | ||||||
| @@ -88,10 +90,22 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             sender.sendMessage(ChatColor.DARK_GREEN + "This server is running " + "Lib's Disguises v" + version + |             sender.sendMessage(ChatColor.DARK_GREEN + "This server is running " + "Lib's Disguises v" + version + | ||||||
|                     " by libraryaddict, formerly maintained by Byteflux and NavidK0." + |                     " by libraryaddict, formerly maintained by Byteflux and NavidK0."); | ||||||
|                     (sender.hasPermission("libsdisguises.reload") ? |  | ||||||
|                             "\nUse " + ChatColor.GREEN + "/libsdisguises " + "reload" + ChatColor.DARK_GREEN + |             if (sender.hasPermission("libsdisguises.reload")) { | ||||||
|                                     " to reload the config. All disguises will be blown by doing this" + "." : "")); |                 sender.sendMessage(ChatColor.DARK_GREEN + "Use " + ChatColor.GREEN + "/libsdisguises " + "reload" + | ||||||
|  |                         ChatColor.DARK_GREEN + " to reload the config. All disguises will be blown by doing this" + | ||||||
|  |                         "."); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (sender.hasPermission("libsdisguises.update")) { | ||||||
|  |                 sender.sendMessage(ChatColor.DARK_GREEN + "Use " + ChatColor.GREEN + "/libsdisguises update" + | ||||||
|  |                         ChatColor.DARK_GREEN + | ||||||
|  |                         " to update Lib's Disguises to latest jenkins build. This will be updated on server restart. " + | ||||||
|  |                         "To force an update, use /libsdisguises update! with an ! on the end"); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // TODO Other options | ||||||
|  |  | ||||||
|             if (LibsPremium.isPremium()) { |             if (LibsPremium.isPremium()) { | ||||||
|                 sender.sendMessage(ChatColor.DARK_GREEN + "This server supports the plugin developer!"); |                 sender.sendMessage(ChatColor.DARK_GREEN + "This server supports the plugin developer!"); | ||||||
| @@ -352,6 +366,56 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|                                 .get(StringUtils.join(names, LibsMsg.META_VALUE_SEPERATOR.get()))); |                                 .get(StringUtils.join(names, LibsMsg.META_VALUE_SEPERATOR.get()))); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |             } else if (args[0].equalsIgnoreCase("update") || args[0].equalsIgnoreCase("update!")) { | ||||||
|  |                 if (!sender.hasPermission("libsdisguises.update")) { | ||||||
|  |                     sender.sendMessage(LibsMsg.NO_PERM.get()); | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 UpdateChecker checker = LibsDisguises.getInstance().getUpdateChecker(); | ||||||
|  |  | ||||||
|  |                 if (checker.isDownloading()) { | ||||||
|  |                     sender.sendMessage(LibsMsg.UPDATE_IN_PROGRESS.get()); | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 boolean force = args[0].endsWith("!"); | ||||||
|  |  | ||||||
|  |                 if (!force) { | ||||||
|  |                     if (checker.getLatestSnapshot() <= 0) { | ||||||
|  |                         sender.sendMessage(LibsMsg.UPDATE_NOT_READY.get()); | ||||||
|  |                         return true; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     if (checker.getLatestSnapshot() == LibsDisguises.getInstance().getBuildNumber()) { | ||||||
|  |                         sender.sendMessage(LibsMsg.UPDATE_ON_LATEST.get()); | ||||||
|  |                         return true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 new BukkitRunnable() { | ||||||
|  |                     @Override | ||||||
|  |                     public void run() { | ||||||
|  |                         boolean result; | ||||||
|  |  | ||||||
|  |                         if (force) { | ||||||
|  |                             result = checker.grabLatestSnapshot(); | ||||||
|  |                         } else { | ||||||
|  |                             result = checker.grabSnapshotBuild(); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         if (!result) { | ||||||
|  |                             sender.sendMessage(LibsMsg.UPDATE_FAILED.get()); | ||||||
|  |                             return; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         sender.sendMessage(LibsMsg.UPDATE_SUCCESS.get()); // Update success, please restart to update | ||||||
|  |  | ||||||
|  |                         if (sender instanceof Player) { | ||||||
|  |                             Bukkit.getConsoleSender().sendMessage(LibsMsg.UPDATE_SUCCESS.get()); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }.runTaskAsynchronously(LibsDisguises.getInstance()); | ||||||
|             } else { |             } else { | ||||||
|                 sender.sendMessage(LibsMsg.LIBS_COMMAND_WRONG_ARG.get()); |                 sender.sendMessage(LibsMsg.LIBS_COMMAND_WRONG_ARG.get()); | ||||||
|             } |             } | ||||||
| @@ -402,7 +466,8 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter { | |||||||
|         String[] args = getArgs(origArgs); |         String[] args = getArgs(origArgs); | ||||||
|  |  | ||||||
|         if (args.length == 0) |         if (args.length == 0) | ||||||
|             tabs.addAll(Arrays.asList("reload", "scoreboard", "permtest", "json", "metainfo", "config", "mods")); |             tabs.addAll( | ||||||
|  |                     Arrays.asList("reload", "scoreboard", "permtest", "json", "metainfo", "config", "mods", "update")); | ||||||
|  |  | ||||||
|         return filterTabs(tabs, origArgs); |         return filterTabs(tabs, origArgs); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,8 +2,12 @@ package me.libraryaddict.disguise.utilities; | |||||||
|  |  | ||||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||||
| import lombok.Getter; | import lombok.Getter; | ||||||
|  | import me.libraryaddict.disguise.LibsDisguises; | ||||||
|  | import org.bukkit.Bukkit; | ||||||
|  | import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils; | ||||||
|  |  | ||||||
| import java.io.BufferedReader; | import java.io.BufferedReader; | ||||||
|  | import java.io.File; | ||||||
| import java.io.InputStream; | import java.io.InputStream; | ||||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||||
| @@ -21,11 +25,92 @@ public class UpdateChecker { | |||||||
|     @Getter |     @Getter | ||||||
|     private int latestSnapshot; |     private int latestSnapshot; | ||||||
|     private final long started = System.currentTimeMillis(); |     private final long started = System.currentTimeMillis(); | ||||||
|  |     private int lastDownload; | ||||||
|  |  | ||||||
|     public UpdateChecker(String resourceID) { |     public UpdateChecker(String resourceID) { | ||||||
|         this.resourceID = resourceID; |         this.resourceID = resourceID; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public boolean grabSnapshotBuild() { | ||||||
|  |         if (getLatestSnapshot() == 0) { | ||||||
|  |             throw new IllegalArgumentException(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (lastDownload == -1) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (getLatestSnapshot() == lastDownload) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return grabSnapshotBuild(getLatestSnapshot()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean grabSnapshotBuild(int buildNo) { | ||||||
|  |         boolean result = grabSnapshotBuild( | ||||||
|  |                 "https://ci.md-5.net/job/LibsDisguises/" + buildNo + "/artifact/target/LibsDisguises.jar"); | ||||||
|  |  | ||||||
|  |         if (result) { | ||||||
|  |             lastDownload = buildNo; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean grabLatestSnapshot() { | ||||||
|  |         boolean result = grabSnapshotBuild( | ||||||
|  |                 "https://ci.md-5.net/job/LibsDisguises/lastSuccessfulBuild/artifact/target/LibsDisguises.jar"); | ||||||
|  |  | ||||||
|  |         if (result) { | ||||||
|  |             lastDownload = LibsDisguises.getInstance().getBuildNumber(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean isDownloading() { | ||||||
|  |         return lastDownload == -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getLastDownload() { | ||||||
|  |         return lastDownload; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean grabSnapshotBuild(String urlString) { | ||||||
|  |         DisguiseUtilities.getLogger().info("Now downloading latest build of Lib's Disguises from " + urlString); | ||||||
|  |         lastDownload = -1; | ||||||
|  |  | ||||||
|  |         File dest = new File(Bukkit.getUpdateFolderFile(), "LibsDisguises.jar"); | ||||||
|  |  | ||||||
|  |         if (!dest.exists()) { | ||||||
|  |             dest.mkdirs(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             // We're connecting to spigot's API | ||||||
|  |             URL url = new URL(urlString); | ||||||
|  |             // Creating a connection | ||||||
|  |             HttpURLConnection con = (HttpURLConnection) url.openConnection(); | ||||||
|  |  | ||||||
|  |             // Get the input stream, what we receive | ||||||
|  |             try (InputStream input = con.getInputStream()) { | ||||||
|  |                 FileUtils.copyInputStreamToFile(input, dest); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             DisguiseUtilities.getLogger().info("Download success!"); | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         catch (Exception ex) { | ||||||
|  |             // Failed, set the last download back to previous build | ||||||
|  |             dest.delete(); | ||||||
|  |             DisguiseUtilities.getLogger().warning("Failed to download snapshot build."); | ||||||
|  |             lastDownload = 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void checkSnapshotUpdate(int buildNumber) { |     public void checkSnapshotUpdate(int buildNumber) { | ||||||
|         Map<String, Object> lastBuild = fetchLastSnapshotBuild(); |         Map<String, Object> lastBuild = fetchLastSnapshotBuild(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -181,7 +181,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | |||||||
|  |  | ||||||
|                 if (LibsPremium.getPaidInformation() == null || |                 if (LibsPremium.getPaidInformation() == null || | ||||||
|                         LibsPremium.getPaidInformation().getBuildNumber().matches("#[0-9]+")) { |                         LibsPremium.getPaidInformation().getBuildNumber().matches("#[0-9]+")) { | ||||||
|                     packets.addDelayedPacket(deleteTab, 2); |                     packets.addDelayedPacket(deleteTab, DisguiseConfig.getTablistRemoveDelay()); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -137,6 +137,11 @@ public enum LibsMsg { | |||||||
|     NO_MODS(ChatColor.RED + "%s is not using any mods!"), |     NO_MODS(ChatColor.RED + "%s is not using any mods!"), | ||||||
|     MODS_LIST(ChatColor.DARK_GREEN + "%s has the mods:" + ChatColor.AQUA + " %s"), |     MODS_LIST(ChatColor.DARK_GREEN + "%s has the mods:" + ChatColor.AQUA + " %s"), | ||||||
|     NO_PERM(ChatColor.RED + "You are forbidden to use this command."), |     NO_PERM(ChatColor.RED + "You are forbidden to use this command."), | ||||||
|  |     UPDATE_NOT_READY(ChatColor.RED + "Lib's Disguises doesn't know what's the latest update!"), | ||||||
|  |     UPDATE_ON_LATEST(ChatColor.RED + "You are already on the latest version of LibsDisguises!"), | ||||||
|  |     UPDATE_FAILED(ChatColor.RED + "LibsDisguises update failed! Check console for errors."), | ||||||
|  |     UPDATE_SUCCESS(ChatColor.DARK_GREEN + "LibsDisguises update success! Restart server to update!"), | ||||||
|  |     UPDATE_IN_PROGRESS(ChatColor.DARK_GREEN + "LibsDisguises is now downloading an update..."), | ||||||
|     NO_PERM_DISGUISE(ChatColor.RED + "You do not have permission for that disguise!"), |     NO_PERM_DISGUISE(ChatColor.RED + "You do not have permission for that disguise!"), | ||||||
|     NO_MODS_LISTENING(ChatColor.RED + "This server is not listening for mods!"), |     NO_MODS_LISTENING(ChatColor.RED + "This server is not listening for mods!"), | ||||||
|     NO_PERMS_USE_OPTIONS(ChatColor.RED + |     NO_PERMS_USE_OPTIONS(ChatColor.RED + | ||||||
|   | |||||||
| @@ -70,6 +70,8 @@ ExtendedNames: false | |||||||
| # Notch [DragonSlayer lvl: 28] | # Notch [DragonSlayer lvl: 28] | ||||||
| # It's recommended to leave this on unless you need it off | # It's recommended to leave this on unless you need it off | ||||||
| ScoreboardNames: true | ScoreboardNames: true | ||||||
|  | # How many ticks before tab packet is sent to remove from tablist. This shouldn't need to be touched | ||||||
|  | TablistRemoveDelay: 2 | ||||||
|  |  | ||||||
| # Does the player keep their disguise after they die? | # Does the player keep their disguise after they die? | ||||||
| KeepDisguises: | KeepDisguises: | ||||||
| @@ -97,6 +99,7 @@ Scoreboard: | |||||||
|   WarnConflict: true |   WarnConflict: true | ||||||
|  |  | ||||||
| # Shall I notify those with the correct permission when there's a LibsDisguises update? | # Shall I notify those with the correct permission when there's a LibsDisguises update? | ||||||
|  | # Disabling this will also disable auto updating | ||||||
| NotifyUpdate: true | NotifyUpdate: true | ||||||
|  |  | ||||||
| # Whats the permission to get the notification? | # Whats the permission to get the notification? | ||||||
| @@ -107,6 +110,8 @@ Permission: 'libsdisguises.update' | |||||||
| # RELEASES - Only check for actual releases | # RELEASES - Only check for actual releases | ||||||
| # SNAPSHOTS - Only check for new snapshots | # SNAPSHOTS - Only check for new snapshots | ||||||
| UpdatesBranch: SAME_BUILDS | UpdatesBranch: SAME_BUILDS | ||||||
|  | # Should the plugin automatically update if the server is using dev builds? | ||||||
|  | AutoUpdateDev: true | ||||||
|  |  | ||||||
| # Whats the max size allowed for command disguiseradius | # Whats the max size allowed for command disguiseradius | ||||||
| DisguiseRadiusMax: 50 | DisguiseRadiusMax: 50 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user