Skip to content

Commit 1be81dc

Browse files
committed
Added VaultUnlocked support and placeholder integration
Integrated `VaultUnlockedAPI` dependency and registered `UnlockedEconomyPlaceholderStore`.
1 parent c13068a commit 1be81dc

File tree

3 files changed

+168
-1
lines changed

3 files changed

+168
-1
lines changed

plugin/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ repositories {
2727
maven("https://jitpack.io")
2828
maven("https://maven.citizensnpcs.co/repo")
2929
maven("https://repo.alessiodp.com/releases")
30+
maven("https://repo.codemc.org/repository/maven-public")
3031
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
3132
maven("https://repo.fancyplugins.de/releases")
3233
maven("https://repo.papermc.io/repository/maven-public/")
@@ -45,6 +46,7 @@ dependencies {
4546
compileOnly("net.luckperms:api:5.5")
4647

4748
implementation("com.github.MilkBowl:VaultAPI:1.7.1")
49+
implementation("net.milkbowl.vault:VaultUnlockedAPI:2.14")
4850
implementation("net.thenextlvl.core:i18n:3.2.0")
4951
implementation("net.thenextlvl.core:paper:2.2.1")
5052
implementation("org.bstats:bstats-bukkit:3.1.1-SNAPSHOT")
@@ -74,7 +76,7 @@ paper {
7476
load = BukkitPluginDescription.PluginLoadOrder.STARTUP
7577

7678
website = "https://thenextlvl.net"
77-
provides = listOf("Vault")
79+
provides = listOf("Vault", "VaultUnlocked")
7880

7981
serverDependencies {
8082
register("Citizens") {

plugin/src/main/java/net/thenextlvl/service/ServicePlugin.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import net.thenextlvl.service.placeholder.chat.ServiceChatPlaceholderStore;
3434
import net.thenextlvl.service.placeholder.economy.ServiceBankPlaceholderStore;
3535
import net.thenextlvl.service.placeholder.economy.ServiceEconomyPlaceholderStore;
36+
import net.thenextlvl.service.placeholder.economy.UnlockedEconomyPlaceholderStore;
3637
import net.thenextlvl.service.placeholder.group.ServiceGroupPlaceholderStore;
3738
import net.thenextlvl.service.version.PluginVersionChecker;
3839
import net.thenextlvl.service.wrapper.VaultChatServiceWrapper;
@@ -113,6 +114,15 @@ private void registerPlaceholders() {
113114
.registerStore(new ServiceEconomyPlaceholderStore(this))
114115
.registerStore(new ServiceGroupPlaceholderStore(this))
115116
.register();
117+
118+
var authors = new ArrayList<>(getPluginMeta().getAuthors());
119+
authors.add("creatorfromhell");
120+
121+
new PlaceholderExpansionBuilder(this, "vaultunlocked")
122+
.setAuthors(authors)
123+
.setVersion("2.13.1")
124+
.registerStore(new UnlockedEconomyPlaceholderStore(this))
125+
.register();
116126
}
117127

118128
public ComponentBundle bundle() {
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package net.thenextlvl.service.placeholder.economy;
2+
3+
import net.milkbowl.vault2.economy.AccountPermission;
4+
import net.milkbowl.vault2.economy.Economy;
5+
import net.thenextlvl.service.ServicePlugin;
6+
import net.thenextlvl.service.placeholder.api.PlaceholderResolver;
7+
import net.thenextlvl.service.placeholder.api.PlaceholderStore;
8+
import org.jspecify.annotations.NullMarked;
9+
10+
import java.util.UUID;
11+
12+
/**
13+
* <a href="https://github.com/TheNewEconomy/VaultUnlocked/blob/master/src/net/milkbowl/vault/papi/EconomyPlaceholders.java">Source</a>
14+
*/
15+
@NullMarked
16+
public class UnlockedEconomyPlaceholderStore extends PlaceholderStore<Economy> {
17+
private static final String PLUGIN_NAME = "VaultUnlocked";
18+
19+
public UnlockedEconomyPlaceholderStore(ServicePlugin plugin) {
20+
super(plugin, Economy.class);
21+
}
22+
23+
@Override
24+
protected void registerResolvers(Economy provider) {
25+
// %vaultunlocked_balance_currency_<currency>%
26+
registerResolver("balance_currency_%s", (player, matcher) -> {
27+
var currency = decode(matcher.group(1));
28+
return provider.balance(PLUGIN_NAME, player.getUniqueId(), "world", currency).toPlainString();
29+
});
30+
31+
// %vaultunlocked_balance_currency_<currency>_world_<world>%
32+
registerResolver("balance_currency_%s_world_%s", (player, matcher) -> {
33+
var currency = decode(matcher.group(1));
34+
var world = matcher.group(2);
35+
return provider.balance(PLUGIN_NAME, player.getUniqueId(), world, currency).toPlainString();
36+
});
37+
38+
// %vaultunlocked_balance_<world>%
39+
registerResolver("balance_%s", (player, matcher) -> {
40+
var world = matcher.group(1);
41+
return provider.balance(PLUGIN_NAME, player.getUniqueId(), world).toPlainString();
42+
});
43+
44+
// %vaultunlocked_balance%
45+
registerResolver("balance", (player, matcher) -> {
46+
return provider.balance(PLUGIN_NAME, player.getUniqueId()).toPlainString();
47+
});
48+
49+
// %vaultunlocked_balanceformatted_currency_<currency>%
50+
registerResolver("balanceformatted_currency_%s", (player, matcher) -> {
51+
var currency = decode(matcher.group(1));
52+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, player.getUniqueId(), "world", currency));
53+
});
54+
55+
// %vaultunlocked_balanceformatted_currency_<currency>_world_<world>%
56+
registerResolver("balanceformatted_currency_%s_world_%s", (player, matcher) -> {
57+
var currency = decode(matcher.group(1));
58+
var world = matcher.group(2);
59+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, player.getUniqueId(), world, currency));
60+
});
61+
62+
// %vaultunlocked_balanceformatted_<world>% // doesn't exist in the original
63+
registerResolver("balanceformatted_%s", (player, matcher) -> {
64+
var world = matcher.group(1);
65+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, player.getUniqueId(), world));
66+
});
67+
68+
// %vaultunlocked_balanceformatted%
69+
registerResolver("balanceformatted", (player, matcher) -> {
70+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, player.getUniqueId()));
71+
});
72+
73+
// %vaultunlocked_account_<uuid>%
74+
registerResolver("account_%s", PlaceholderResolver.throwing((player, matcher) -> {
75+
var accountId = UUID.fromString(matcher.group(1));
76+
return provider.balance(PLUGIN_NAME, accountId).toPlainString();
77+
}, IllegalArgumentException.class));
78+
79+
// %vaultunlocked_account_<uuid>_currency_<currency>%
80+
registerResolver("account_%s_currency_%s", PlaceholderResolver.throwing((player, matcher) -> {
81+
var accountId = UUID.fromString(matcher.group(1));
82+
var currency = decode(matcher.group(2));
83+
return provider.balance(PLUGIN_NAME, accountId, "world", currency).toPlainString();
84+
}, IllegalArgumentException.class));
85+
86+
// %vaultunlocked_account_<uuid>_currency_<currency>_formatted%
87+
registerResolver("account_%s_currency_%s_formatted", PlaceholderResolver.throwing((player, matcher) -> {
88+
var accountId = UUID.fromString(matcher.group(1));
89+
var currency = decode(matcher.group(2));
90+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, accountId, "world", currency));
91+
}, IllegalArgumentException.class));
92+
93+
// %vaultunlocked_account_<uuid>_currency_<currency>_world_<world>%
94+
registerResolver("account_%s_currency_%s_world_%s", PlaceholderResolver.throwing((player, matcher) -> {
95+
var accountId = UUID.fromString(matcher.group(1));
96+
var currency = decode(matcher.group(2));
97+
var world = matcher.group(3);
98+
return provider.balance(PLUGIN_NAME, accountId, world, currency).toPlainString();
99+
}, IllegalArgumentException.class));
100+
101+
// %vaultunlocked_account_<uuid>_currency_<currency>_world_<world>_formatted%
102+
registerResolver("account_%s_currency_%s_world_%s", PlaceholderResolver.throwing((player, matcher) -> {
103+
var accountId = UUID.fromString(matcher.group(1));
104+
var currency = decode(matcher.group(2));
105+
var world = matcher.group(3);
106+
return provider.format(PLUGIN_NAME, provider.balance(PLUGIN_NAME, accountId, world, currency));
107+
}, IllegalArgumentException.class));
108+
109+
registerResolver("can_%s_%s", PlaceholderResolver.throwing((player, matcher) -> {
110+
var accountId = UUID.fromString(matcher.group(2));
111+
var permission = switch (matcher.group(1)) {
112+
case "deposit" -> AccountPermission.DEPOSIT; // %vaultunlocked_can_deposit_<uuid>%
113+
case "withdraw" -> AccountPermission.WITHDRAW; // %vaultunlocked_can_withdraw_<uuid>%
114+
case "balance" -> AccountPermission.BALANCE; // %vaultunlocked_can_balance_<uuid>%
115+
case "transfer" -> AccountPermission.TRANSFER_OWNERSHIP; // %vaultunlocked_can_transfer_<uuid>%
116+
case "invite" -> AccountPermission.INVITE_MEMBER; // %vaultunlocked_can_invite_<uuid>%
117+
case "remove" -> AccountPermission.REMOVE_MEMBER; // %vaultunlocked_can_remove_<uuid>%
118+
case "modify" -> AccountPermission.CHANGE_MEMBER_PERMISSION; // %vaultunlocked_can_modify_<uuid>%
119+
case "delete" -> AccountPermission.DELETE; // %vaultunlocked_can_delete_<uuid>%
120+
default -> null;
121+
};
122+
if (permission == null) return null;
123+
return provider.hasAccountPermission(PLUGIN_NAME, accountId, player.getUniqueId(), permission) ? "yes" : "no";
124+
}, IllegalArgumentException.class));
125+
126+
// %vaultunlocked_accounts%
127+
registerResolver("accounts", (player, matcher) -> {
128+
return String.join(", ", provider.accountsMemberOf(PLUGIN_NAME, player.getUniqueId()));
129+
});
130+
131+
// %vaultunlocked_accounts_count%
132+
registerResolver("accounts_count", (player, matcher) -> {
133+
return String.valueOf(provider.accountsMemberOf(PLUGIN_NAME, player.getUniqueId()).size());
134+
});
135+
136+
// %vaultunlocked_currency%
137+
registerResolver("currency", (uuid, params) -> {
138+
return provider.defaultCurrencyNameSingular(PLUGIN_NAME);
139+
});
140+
141+
// %vaultunlocked_currencyplural%
142+
registerResolver("currencyplural", (uuid, params) -> {
143+
return provider.defaultCurrencyNamePlural(PLUGIN_NAME);
144+
});
145+
}
146+
147+
private String decode(final String input) {
148+
return input.replace("%20", " ")
149+
.replace("%24", "$")
150+
.replace("%2B", "+")
151+
.replace("%26", "&")
152+
.replace("%2F", "/")
153+
.replace("%3D", "=");
154+
}
155+
}

0 commit comments

Comments
 (0)