1
0
mirror of https://github.com/Zrips/Jobs.git synced 2024-11-25 20:16:13 +01:00

Merge pull request #1669 from MachiganMC/master

Add possibility to be hidden from jobs tops
This commit is contained in:
Zrips 2023-11-15 12:47:03 +02:00 committed by GitHub
commit 11972ffe1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 225 additions and 188 deletions

View File

@ -1,80 +1,34 @@
/**
* Jobs Plugin for Bukkit
* Copyright (C) 2011 Zak Ford <zak.j.ford@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.gamingmesh.jobs;
import org.bukkit.plugin.RegisteredServiceProvider;
import com.gamingmesh.jobs.economy.BlackholeEconomy;
import com.gamingmesh.jobs.economy.VaultEconomy;
import net.Zrips.CMILib.Messages.CMIMessages;
import net.milkbowl.vault.economy.Economy;
public class HookEconomyTask implements Runnable {
private Jobs plugin;
public HookEconomyTask(Jobs plugin) {
this.plugin = plugin;
}
enum hookResult {
novault, noeconomy, pass;
}
@Override
public void run() {
hookResult result = setVault();
if (result.equals(hookResult.pass)) {
return;
}
// no Economy found
Jobs.setEconomy(new BlackholeEconomy());
Jobs.getPluginLogger().severe("==================== " + plugin.getDescription().getName() + " ====================");
if (result.equals(hookResult.novault)) {
Jobs.getPluginLogger().severe("Vault is required by this plugin for economy support!");
Jobs.getPluginLogger().severe("Please install them first!");
Jobs.getPluginLogger().severe("You can find the latest versions here:");
Jobs.getPluginLogger().severe("https://www.spigotmc.org/resources/34315/");
} else {
Jobs.getPluginLogger().severe("Vault detected but economy plugin still missing!");
Jobs.getPluginLogger().severe("Please install Vault supporting economy plugin!");
}
Jobs.getPluginLogger().severe("==============================================");
}
private hookResult setVault() {
if (!plugin.getServer().getPluginManager().isPluginEnabled("Vault"))
return hookResult.novault;
RegisteredServiceProvider<Economy> provider = plugin.getServer().getServicesManager().getRegistration(Economy.class);
if (provider == null) {
return hookResult.noeconomy;
}
Jobs.setEconomy(new VaultEconomy(provider.getProvider()));
CMIMessages.consoleMessage("&e[" + plugin.getDescription().getName() + "] Successfully linked with Vault. (" + provider.getProvider().getName() + ")");
return hookResult.pass;
}
}
/**
* Jobs Plugin for Bukkit
* Copyright (C) 2011 Zak Ford <zak.j.ford@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.gamingmesh.jobs;
import com.gamingmesh.jobs.economy.VaultEconomy;
import net.milkbowl.vault.economy.Economy;
public class HookEconomyTask extends HookVault<Economy> {
public HookEconomyTask(Class<Economy> providerClass) {
super(providerClass);
}
@Override
void runIfProviderIsFound() {
Jobs.setEconomy(new VaultEconomy(provider.getProvider()));
}
}

View File

@ -0,0 +1,15 @@
package com.gamingmesh.jobs;
import net.milkbowl.vault.permission.Permission;
public class HookPermissionTask extends HookVault<Permission> {
public HookPermissionTask(Class<Permission> providerClass) {
super(providerClass);
}
@Override
void runIfProviderIsFound() {
Jobs.setVaultPermission(this.provider.getProvider());
}
}

View File

@ -0,0 +1,60 @@
package com.gamingmesh.jobs;
import net.Zrips.CMILib.Messages.CMIMessages;
import org.bukkit.plugin.RegisteredServiceProvider;
public abstract class HookVault<T> {
private static Boolean vaultEnable = null;
protected Class<T> providerClass;
protected RegisteredServiceProvider<T> provider;
protected HookVault(Class<T> providerClass) {
this.providerClass = providerClass;
if (!isVaultEnable())return;
this.provider = Jobs.getInstance().getServer().getServicesManager().getRegistration(this.providerClass);
if (this.provider != null) {
logProviderConnected();
runIfProviderIsFound();
} else {
logProviderNotFound();
}
}
public static boolean isVaultEnable() {
if (vaultEnable == null) {
setIsVaultEnable();
if (!vaultEnable)
logIfVaultIsNotEnable();
}
return vaultEnable;
}
private static void setIsVaultEnable() {
vaultEnable = Jobs.getInstance().getServer().getPluginManager().isPluginEnabled("Vault");
}
public static void logIfVaultIsNotEnable() {
if (vaultEnable)return;
Jobs.getPluginLogger().severe("==================== " + Jobs.getInstance().getName() + " ====================");
Jobs.getPluginLogger().severe("Vault is required by this plugin for economy support!");
Jobs.getPluginLogger().severe("Please install them first!");
Jobs.getPluginLogger().severe("You can find the latest versions here:");
Jobs.getPluginLogger().severe("https://www.spigotmc.org/resources/34315/");
Jobs.getPluginLogger().severe("==============================================");
}
public void logProviderNotFound() {
if (this.provider == null && isVaultEnable()) {
Jobs.getPluginLogger().severe("==================== " + Jobs.getInstance().getDescription().getName() + " ====================");
Jobs.getPluginLogger().severe("Vault detected but " + this.providerClass.getSimpleName() + " plugin still missing!");
Jobs.getPluginLogger().severe("Please install Vault supporting " + this.providerClass.getSimpleName() + " plugin!");
Jobs.getPluginLogger().severe("==============================================");
}
}
protected void logProviderConnected() {
CMIMessages.consoleMessage("&e[" + Jobs.getInstance().getName() + "] Successfully linked with Vault. (" + provider.getPlugin().getName() + ")");
}
abstract void runIfProviderIsFound();
}

View File

@ -18,28 +18,6 @@
package com.gamingmesh.jobs;
import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.WeakHashMap;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;
import com.gamingmesh.jobs.Gui.GuiManager;
import com.gamingmesh.jobs.Placeholders.Placeholder;
import com.gamingmesh.jobs.Placeholders.PlaceholderAPIHook;
@ -47,40 +25,8 @@ import com.gamingmesh.jobs.Signs.SignUtil;
import com.gamingmesh.jobs.api.JobsExpGainEvent;
import com.gamingmesh.jobs.api.JobsPrePaymentEvent;
import com.gamingmesh.jobs.commands.JobsCommands;
import com.gamingmesh.jobs.config.BlockProtectionManager;
import com.gamingmesh.jobs.config.BossBarManager;
import com.gamingmesh.jobs.config.ConfigManager;
import com.gamingmesh.jobs.config.ExploreManager;
import com.gamingmesh.jobs.config.GeneralConfigManager;
import com.gamingmesh.jobs.config.LanguageManager;
import com.gamingmesh.jobs.config.NameTranslatorManager;
import com.gamingmesh.jobs.config.RestrictedAreaManager;
import com.gamingmesh.jobs.config.RestrictedBlockManager;
import com.gamingmesh.jobs.config.ScheduleManager;
import com.gamingmesh.jobs.config.ShopManager;
import com.gamingmesh.jobs.config.TitleManager;
import com.gamingmesh.jobs.config.YmlMaker;
import com.gamingmesh.jobs.container.ActionInfo;
import com.gamingmesh.jobs.container.ActionType;
import com.gamingmesh.jobs.container.ArchivedJobs;
import com.gamingmesh.jobs.container.BlockProtection;
import com.gamingmesh.jobs.container.Boost;
import com.gamingmesh.jobs.container.Convert;
import com.gamingmesh.jobs.container.CurrencyLimit;
import com.gamingmesh.jobs.container.CurrencyType;
import com.gamingmesh.jobs.container.DBAction;
import com.gamingmesh.jobs.container.FastPayment;
import com.gamingmesh.jobs.container.Job;
import com.gamingmesh.jobs.container.JobInfo;
import com.gamingmesh.jobs.container.JobProgression;
import com.gamingmesh.jobs.container.JobsPlayer;
import com.gamingmesh.jobs.container.JobsWorld;
import com.gamingmesh.jobs.container.LoadStatus;
import com.gamingmesh.jobs.container.Log;
import com.gamingmesh.jobs.container.PlayerInfo;
import com.gamingmesh.jobs.container.PlayerPoints;
import com.gamingmesh.jobs.container.Quest;
import com.gamingmesh.jobs.container.QuestProgression;
import com.gamingmesh.jobs.config.*;
import com.gamingmesh.jobs.container.*;
import com.gamingmesh.jobs.container.blockOwnerShip.BlockOwnerShip;
import com.gamingmesh.jobs.container.blockOwnerShip.BlockTypes;
import com.gamingmesh.jobs.dao.JobsClassLoader;
@ -93,32 +39,35 @@ import com.gamingmesh.jobs.economy.Economy;
import com.gamingmesh.jobs.economy.PaymentData;
import com.gamingmesh.jobs.hooks.HookManager;
import com.gamingmesh.jobs.i18n.Language;
import com.gamingmesh.jobs.listeners.JobsListener;
import com.gamingmesh.jobs.listeners.JobsPayment1_14Listener;
import com.gamingmesh.jobs.listeners.JobsPaymentListener;
import com.gamingmesh.jobs.listeners.PistonProtectionListener;
import com.gamingmesh.jobs.listeners.JobsPayment1_16Listener;
import com.gamingmesh.jobs.listeners.PlayerSignEdit1_20Listeners;
import com.gamingmesh.jobs.listeners.*;
import com.gamingmesh.jobs.selection.SelectionManager;
import com.gamingmesh.jobs.stuff.Loging;
import com.gamingmesh.jobs.stuff.TabComplete;
import com.gamingmesh.jobs.stuff.ToggleBarHandling;
import com.gamingmesh.jobs.stuff.Util;
import com.gamingmesh.jobs.stuff.VersionChecker;
import com.gamingmesh.jobs.stuff.*;
import com.gamingmesh.jobs.stuff.complement.Complement;
import com.gamingmesh.jobs.stuff.complement.Complement1;
import com.gamingmesh.jobs.stuff.complement.Complement2;
import com.gamingmesh.jobs.stuff.complement.JobsChatEvent;
import com.gamingmesh.jobs.tasks.BufferedPaymentThread;
import com.gamingmesh.jobs.tasks.DatabaseSaveThread;
import net.Zrips.CMILib.ActionBar.CMIActionBar;
import net.Zrips.CMILib.Items.CMIMaterial;
import net.Zrips.CMILib.Locale.LC;
import net.Zrips.CMILib.Messages.CMIMessages;
import net.Zrips.CMILib.RawMessages.RawMessage;
import net.Zrips.CMILib.Version.Version;
import net.Zrips.CMILib.Version.Schedulers.CMIScheduler;
import net.Zrips.CMILib.Version.Version;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.sql.SQLException;
import java.util.*;
import java.util.logging.Logger;
public final class Jobs extends JavaPlugin {
@ -142,6 +91,8 @@ public final class Jobs extends JavaPlugin {
private static GeneralConfigManager gConfigManager;
private static BufferedEconomy economy;
private static Permission vaultPermission;
private static PermissionHandler permissionHandler;
private static PermissionManager permissionManager;
@ -691,6 +642,10 @@ public final class Jobs extends JavaPlugin {
economy = new BufferedEconomy(getInstance(), eco);
}
public static void setVaultPermission(Permission permission) {
vaultPermission = permission;
}
/**
* Gets the economy handler
* @return the economy handler
@ -699,6 +654,10 @@ public final class Jobs extends JavaPlugin {
return economy;
}
public static Permission getVaultPermission() {
return vaultPermission;
}
/**
* Gets the version check manager
* @return the version check manager
@ -761,8 +720,14 @@ public final class Jobs extends JavaPlugin {
complement = new Complement1();
}
// register economy
CMIScheduler.get().runTask(new HookEconomyTask(this));
if (HookVault.isVaultEnable()) {
// register economy
CMIScheduler.get().runTask(() -> new HookEconomyTask(net.milkbowl.vault.economy.Economy.class));
// register permission from vault
CMIScheduler.get().runTask(() -> new HookPermissionTask(Permission.class));
}
dao.loadBlockProtection();
getExploreManager().load();

View File

@ -1,21 +1,21 @@
package com.gamingmesh.jobs.commands.list;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.commands.Cmd;
import com.gamingmesh.jobs.container.TopList;
import com.gamingmesh.jobs.i18n.Language;
import net.Zrips.CMILib.Container.PageInfo;
import net.Zrips.CMILib.Locale.LC;
import net.Zrips.CMILib.Messages.CMIMessages;
import net.Zrips.CMILib.Scoreboards.CMIScoreboard;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class gtop implements Cmd {
@ -52,10 +52,17 @@ public class gtop implements Cmd {
int amount = Jobs.getGCManager().JobsTopAmount;
PageInfo pi = new PageInfo(amount, Jobs.getPlayerManager().getPlayersCache().size(), page);
List<TopList> FullList = Jobs.getJobsDAO().getGlobalTopList(pi.getStart());
Bukkit.getScheduler().runTaskAsynchronously(Jobs.getInstance(), () -> showGlobalTop(sender, pi, amount));
return true;
}
private static void showGlobalTop(CommandSender sender, PageInfo pi, int amount) {
Player player = (Player) sender;
List<TopList> FullList = Jobs.getJobsDAO().getGlobalTopList(pi.getStart())
.stream().filter(gtop::hasToBeSeenInGlobalTop).collect(Collectors.toList());
if (FullList.isEmpty()) {
Language.sendMessage(sender, "command.gtop.error.nojob");
return true;
return;
}
if (!Jobs.getGCManager().ShowToplistInScoreboard) {
@ -67,11 +74,11 @@ public class gtop implements Cmd {
break;
Language.sendMessage(sender, "command.gtop.output.list",
"%number%", pi.getPositionForOutput(i),
"%playername%", One.getPlayerInfo().getName(),
"%playerdisplayname%", One.getPlayerInfo().getDisplayName(),
"%level%", One.getLevel(),
"%exp%", One.getExp());
"%number%", pi.getPositionForOutput(i),
"%playername%", One.getPlayerInfo().getName(),
"%playerdisplayname%", One.getPlayerInfo().getDisplayName(),
"%level%", One.getLevel(),
"%exp%", One.getExp());
++i;
}
} else {
@ -82,10 +89,10 @@ public class gtop implements Cmd {
break;
ls.add(Jobs.getLanguage().getMessage("scoreboard.line",
"%number%", pi.getPositionForOutput(i),
"%playername%", one.getPlayerInfo().getName(),
"%playerdisplayname%", one.getPlayerInfo().getDisplayName(),
"%level%", one.getLevel()));
"%number%", pi.getPositionForOutput(i),
"%playername%", one.getPlayerInfo().getName(),
"%playerdisplayname%", one.getPlayerInfo().getDisplayName(),
"%level%", one.getLevel()));
++i;
}
@ -93,6 +100,16 @@ public class gtop implements Cmd {
}
pi.autoPagination(sender, "jobs gtop");
return true;
}
private static boolean hasToBeSeenInGlobalTop(TopList topList) {
Player player = topList.getPlayerInfo().getJobsPlayer().getPlayer();
if (player != null)
return !player.hasPermission("jobs.hidegtop");
return !Jobs.getVaultPermission().playerHas(
null,
Bukkit.getOfflinePlayer(topList.getPlayerInfo().getUuid()),
"jobs.hidegtop"
);
}
}

View File

@ -1,22 +1,23 @@
package com.gamingmesh.jobs.commands.list;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.commands.Cmd;
import com.gamingmesh.jobs.container.Job;
import com.gamingmesh.jobs.container.TopList;
import com.gamingmesh.jobs.i18n.Language;
import net.Zrips.CMILib.Container.PageInfo;
import net.Zrips.CMILib.Locale.LC;
import net.Zrips.CMILib.Messages.CMIMessages;
import net.Zrips.CMILib.Scoreboards.CMIScoreboard;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class top implements Cmd {
@ -56,11 +57,19 @@ public class top implements Cmd {
int workingIn = Jobs.getUsedSlots(job);
PageInfo pi = new PageInfo(Jobs.getGCManager().JobsTopAmount, workingIn, page);
final int finalPage = page;
Bukkit.getScheduler().runTaskAsynchronously(Jobs.getInstance(), () ->showTop(sender, job, pi, finalPage) );
return true;
}
private static void showTop(CommandSender sender, Job job, PageInfo pi, int page) {
Player player = (Player) sender;
List<TopList> fullList = Jobs.getJobsDAO().toplist(job.getName(), pi.getStart())
.stream().filter(topList -> hasToBeSeenInTop(topList, job)).collect(Collectors.toList());
List<TopList> fullList = Jobs.getJobsDAO().toplist(job.getName(), pi.getStart());
if (fullList.isEmpty()) {
CMIMessages.sendMessage(sender, LC.info_NoInformation);
return true;
return;
}
int place = 1;
@ -69,15 +78,16 @@ public class top implements Cmd {
Language.sendMessage(sender, "command.top.output.topline", "%jobname%", job.getName(), "%amount%", Jobs.getGCManager().JobsTopAmount);
for (TopList one : fullList) {
System.out.println(one.getPlayerInfo().getName());
if (place > Jobs.getGCManager().JobsTopAmount)
break;
Language.sendMessage(sender, "command.top.output.list",
"%number%", ((page - 1) * Jobs.getGCManager().JobsTopAmount) + place,
"%playername%", one.getPlayerInfo().getName(),
"%playerdisplayname%", one.getPlayerInfo().getDisplayName(),
"%level%", one.getLevel(),
"%exp%", one.getExp());
"%number%", ((page - 1) * Jobs.getGCManager().JobsTopAmount) + place,
"%playername%", one.getPlayerInfo().getName(),
"%playerdisplayname%", one.getPlayerInfo().getDisplayName(),
"%level%", one.getLevel(),
"%exp%", one.getExp());
place++;
}
pi.autoPagination(sender, "jobs top " + job.getName());
@ -88,7 +98,7 @@ public class top implements Cmd {
if (place > Jobs.getGCManager().JobsTopAmount)
break;
ls.add(Jobs.getLanguage().getMessage("scoreboard.line", "%number%", ((page - 1) * Jobs.getGCManager().JobsTopAmount) + place,
"%playername%", one.getPlayerInfo().getName(), "%playerdisplayname%", one.getPlayerInfo().getDisplayName(), "%level%", one.getLevel()));
"%playername%", one.getPlayerInfo().getName(), "%playerdisplayname%", one.getPlayerInfo().getDisplayName(), "%level%", one.getLevel()));
place++;
}
@ -96,6 +106,16 @@ public class top implements Cmd {
pi.autoPagination(sender, "jobs top " + job.getName());
}
return true;
}
private static boolean hasToBeSeenInTop(TopList topList, Job job) {
Player player = topList.getPlayerInfo().getJobsPlayer().getPlayer();
if (player != null)
return !player.hasPermission("jobs.hidetop.*") || !player.hasPermission("jobs.hidetop." + job.getName().toLowerCase());
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(topList.getPlayerInfo().getUuid());
return !
(Jobs.getVaultPermission().playerHas(null, offlinePlayer, "jobs.hidetop.*")
|| Jobs.getVaultPermission().playerHas(null, offlinePlayer, "jobs.hidetop." + job.getName().toLowerCase()));
}
}

View File

@ -232,3 +232,9 @@ permissions:
jobs.area.remove:
description: Grants access to the area remove command
default: op
jobs.hidetop.*:
description: Prevent player to be shown in all job top
default: false
jobs.hidegtop:
description: Prevent player to be shown in the global jobs top
default: false