Update check with config setting and permission

This commit is contained in:
PikaMug 2021-09-22 01:39:22 -04:00
parent 75658b6399
commit 3f26d3478b
7 changed files with 89 additions and 7 deletions

View File

@ -44,6 +44,7 @@ import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import me.blackvein.quests.util.RomanNumeral;
import me.blackvein.quests.util.UpdateChecker;
import me.clip.placeholderapi.PlaceholderAPI;
import me.pikamug.localelib.LocaleManager;
import net.citizensnpcs.api.CitizensAPI;
@ -237,7 +238,15 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
getServer().getPluginManager().registerEvents(partiesListener, this);
}
// 11 - Delay loading of Quests, Actions and modules
// 11 - Attempt to check for updates
new UpdateChecker(this, 3711).getVersion(version -> {
if (!getDescription().getVersion().split("-")[0].equalsIgnoreCase(version)) {
getLogger().info(ChatColor.DARK_GREEN + Lang.get("updateTo").replace("<version>",
version).replace("<url>", ChatColor.AQUA + getDescription().getWebsite()));
}
});
// 12 - Delay loading of Quests, Actions and modules
delayLoadQuestInfo();
}

View File

@ -43,6 +43,7 @@ public class Settings {
private int topLimit = 150;
private boolean translateNames = false;
private boolean translateSubCommands = false;
private boolean updateCheck = true;
public Settings(final Quests plugin) {
this.plugin = plugin;
@ -174,6 +175,12 @@ public class Settings {
public void setTranslateSubCommands(final boolean translateSubCommands) {
this.translateSubCommands = translateSubCommands;
}
public boolean canUpdateCheck() {
return updateCheck;
}
public void setUpdateCheck(final boolean updateCheck) {
this.updateCheck = updateCheck;
}
public void init() {
final FileConfiguration config = plugin.getConfig();
@ -204,6 +211,7 @@ public class Settings {
topLimit = config.getInt("top-limit", 150);
translateNames = config.getBoolean("translate-names", true);
translateSubCommands = config.getBoolean("translate-subcommands", false);
updateCheck = config.getBoolean("update-check", true);
try {
config.save(new File(plugin.getDataFolder(), "config.yml"));
} catch (final IOException e) {

View File

@ -20,6 +20,7 @@ import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import me.blackvein.quests.util.UpdateChecker;
import net.citizensnpcs.api.CitizensAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -848,14 +849,25 @@ public class PlayerListener implements Listener {
@EventHandler
public void onPlayerJoin(final PlayerJoinEvent evt) {
if (plugin.canUseQuests(evt.getPlayer().getUniqueId())) {
final Quester noobCheck = new Quester(plugin, evt.getPlayer().getUniqueId());
final Player player = evt.getPlayer();
if (player.hasPermission("quests.admin.update")) {
new UpdateChecker(plugin, 3711).getVersion(version -> {
if (!plugin.getDescription().getVersion().split("-")[0].equalsIgnoreCase(version)) {
evt.getPlayer().sendMessage(ChatColor.GRAY + "[" + ChatColor.YELLOW + "Quests" + ChatColor.GRAY
+ "] " + ChatColor.GREEN + Lang.get(player, "updateTo").replace("<version>",
version).replace("<url>", ChatColor.DARK_AQUA + "" + ChatColor.UNDERLINE
+ plugin.getDescription().getWebsite()));
}
});
}
if (plugin.canUseQuests(player.getUniqueId())) {
final Quester noobCheck = new Quester(plugin, player.getUniqueId());
if (plugin.getSettings().canGenFilesOnJoin() && !noobCheck.hasData()) {
noobCheck.saveData();
}
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, () -> {
final CompletableFuture<Quester> cf = plugin.getStorage().loadQuester(evt.getPlayer().getUniqueId());
final CompletableFuture<Quester> cf = plugin.getStorage().loadQuester(player.getUniqueId());
try {
final Quester quester = cf.get();
if (quester == null) {

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2014 PikaMug and contributors. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package me.blackvein.quests.util;
import me.blackvein.quests.Quests;
import org.bukkit.Bukkit;
import org.bukkit.util.Consumer;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;
public class UpdateChecker {
private final Quests plugin;
private final int resourceId;
public UpdateChecker(Quests plugin, int resourceId) {
this.plugin = plugin;
this.resourceId = resourceId;
}
public void getVersion(final Consumer<String> consumer) {
if (plugin.getSettings().canUpdateCheck()) {
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> {
try (InputStream inputStream = new URL("https://api.spigotmc.org/legacy/update.php?resource="
+ this.resourceId).openStream(); Scanner scanner = new Scanner(inputStream)) {
if (scanner.hasNext()) {
consumer.accept(scanner.next());
}
} catch (IOException e) {
this.plugin.getLogger().info("Update check failed: " + e.getMessage());
}
});
}
}
}

View File

@ -35,4 +35,5 @@ storage-method:
trial-save: false
top-limit: 150
translate-names: true
translate-subcommands: false
translate-subcommands: false
update-check: true

View File

@ -3,8 +3,7 @@ main: me.blackvein.quests.Quests
version: ${project.version}-b${env.BUILD_NUMBER}
api-version: 1.13
description: An extensive questing system.
website: https://www.spigotmc.org/resources/quests.3711/
dev-url: https://github.com/PikaMug/Quests
website: https://github.com/PikaMug/Quests
author: PikaMug
softdepend: [Citizens, CitizensBooks, Denizen, DungeonsXL, GPS, Heroes, mcMMO, Parties, PhatLoots, PlaceholderAPI, Unite, Vault, WorldGuard]
permissions:
@ -79,6 +78,7 @@ permissions:
quests.admin.remove: true
quests.admin.reload: true
quests.admin.drop: true
quests.admin.update: true
quests.admin.trial: false
quests.admin:
description: Display administrator help
@ -125,6 +125,9 @@ permissions:
quests.admin.drop:
description: Ability to drop the Quests Journal
default: op
quests.admin.update:
description: Permit viewing of update check notices
default: op
quests.admin.trial:
description: Limit access to sensitive editor prompts
default: false

View File

@ -807,3 +807,4 @@ duplicateEditor: "You are already using an editor!"
difference: "The difference is '<data>'."
notInstalled: "Not installed"
confirmDelete: "Are you sure?"
updateTo: "Update to <version>: <url>"