Skip to content

Commit 1434ca1

Browse files
authored
Merge pull request #3406 from Multiverse/feat/papi-config
Add config options `warn-invalid-papi-format` and `invalid-papi-format-returns-blank`
2 parents 05d0188 + 212b684 commit 1434ca1

4 files changed

Lines changed: 62 additions & 12 deletions

File tree

src/main/java/org/mvplugins/multiverse/core/PlaceholderExpansionHook.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.jetbrains.annotations.Nullable;
1414
import org.jvnet.hk2.annotations.Service;
1515

16+
import org.mvplugins.multiverse.core.config.CoreConfig;
1617
import org.mvplugins.multiverse.core.economy.MVEconomist;
1718
import org.mvplugins.multiverse.core.utils.MinecraftTimeFormatter;
1819
import org.mvplugins.multiverse.core.utils.REPatterns;
@@ -28,12 +29,17 @@
2829
final class PlaceholderExpansionHook extends PlaceholderExpansion {
2930

3031
private final MultiverseCore plugin;
32+
private final CoreConfig coreConfig;
3133
private final WorldManager worldManager;
3234
private final MVEconomist economist;
3335

3436
@Inject
35-
public PlaceholderExpansionHook(MultiverseCore plugin, WorldManager worldManager, MVEconomist economist) {
37+
public PlaceholderExpansionHook(@NotNull MultiverseCore plugin,
38+
@NotNull CoreConfig coreConfig,
39+
@NotNull WorldManager worldManager,
40+
@NotNull MVEconomist economist) {
3641
this.plugin = plugin;
42+
this.coreConfig = coreConfig;
3743
this.worldManager = worldManager;
3844
this.economist = economist;
3945
}
@@ -44,6 +50,13 @@ public boolean register() {
4450
return super.register();
4551
}
4652

53+
@Override
54+
public void warning(String msg) {
55+
if (coreConfig.getWarnInvalidPapiFormat()) {
56+
super.warning(msg);
57+
}
58+
}
59+
4760
@Override
4861
public @NotNull String getIdentifier() {
4962
return "multiverse-core";
@@ -84,22 +97,20 @@ public boolean persist() {
8497

8598
final var placeholder = paramsArray.remove(0).toLowerCase(Locale.ENGLISH);
8699

87-
String worldName = parseWorldName(offlinePlayer, paramsArray);
88-
if (worldName == null) return null;
89-
90-
return worldManager.getWorld(worldName)
91-
.onEmpty(() -> warning("Multiverse World not found: " + worldName))
100+
return parseWorldName(offlinePlayer, paramsArray)
101+
.flatMap(worldName -> worldManager.getWorld(worldName)
102+
.onEmpty(() -> warning("Multiverse World not found: " + worldName)))
92103
.flatMap(world -> world.asLoadedWorld()
93104
.flatMap(loadedWorld -> getLoadedWorldPlaceHolderValue(placeholder, paramsArray, loadedWorld))
94105
.orElse(() -> getWorldPlaceHolderValue(placeholder, paramsArray, world)))
95-
.getOrNull();
106+
.getOrElse(() -> coreConfig.getInvalidPapiFormatReturnsBlank() ? "" : null);
96107
}
97108

98-
private @Nullable String parseWorldName(OfflinePlayer offlinePlayer, List<String> paramsArray) {
109+
private @NotNull Option<String> parseWorldName(OfflinePlayer offlinePlayer, List<String> paramsArray) {
99110
// No world defined, get from player
100111
if (paramsArray.isEmpty()) {
101112
if (offlinePlayer instanceof Player player) {
102-
return player.getWorld().getName();
113+
return Option.of(player.getWorld().getName());
103114
} else {
104115
warning("You must specify a world name for non-player placeholders");
105116
return null;
@@ -110,15 +121,15 @@ public boolean persist() {
110121
String paramWorldName = paramsArray.get(paramsArray.size() - 1);
111122
if (worldManager.isWorld(paramWorldName)) {
112123
paramsArray.remove(paramsArray.size() - 1);
113-
return paramWorldName;
124+
return Option.of(paramWorldName);
114125
}
115126

116127
// Param not a world, fallback to player
117128
if (offlinePlayer instanceof Player player) {
118-
return player.getWorld().getName();
129+
return Option.of(player.getWorld().getName());
119130
}
120131
warning("Multiverse World not found: " + paramWorldName);
121-
return null;
132+
return Option.none();
122133
}
123134

124135
private @NotNull Option<String> getWorldPlaceHolderValue(@NotNull String placeholder,

src/main/java/org/mvplugins/multiverse/core/config/CoreConfig.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,26 @@ public boolean isRegisterPapiHook() {
493493
return configHandle.get(configNodes.registerPapiHook);
494494
}
495495

496+
@ApiStatus.AvailableSince("5.5")
497+
public Try<Void> setWarnInvalidPapiFormat(boolean warnInvalidPapiFormat) {
498+
return configHandle.set(configNodes.warnInvalidPapiFormat, warnInvalidPapiFormat);
499+
}
500+
501+
@ApiStatus.AvailableSince("5.5")
502+
public boolean getWarnInvalidPapiFormat() {
503+
return configHandle.get(configNodes.warnInvalidPapiFormat);
504+
}
505+
506+
@ApiStatus.AvailableSince("5.5")
507+
public Try<Void> setInvalidPapiFormatReturnsBlank(boolean invalidPapiFormatReturnsBlank) {
508+
return configHandle.set(configNodes.invalidPapiFormatReturnsBlank, invalidPapiFormatReturnsBlank);
509+
}
510+
511+
@ApiStatus.AvailableSince("5.5")
512+
public boolean getInvalidPapiFormatReturnsBlank() {
513+
return configHandle.get(configNodes.invalidPapiFormatReturnsBlank);
514+
}
515+
496516
/**
497517
* {@inheritDoc}
498518
*/

src/main/java/org/mvplugins/multiverse/core/config/CoreConfigNodes.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,23 @@ private <N extends Node> N node(N node) {
390390
.name("register-papi-hook")
391391
.build());
392392

393+
final ConfigNode<Boolean> warnInvalidPapiFormat = node(ConfigNode.builder("messaging.warn-invalid-papi-format", Boolean.class)
394+
.comment("")
395+
.comment("This config option defines whether or not Multiverse should warn about invalid PlaceholderAPI formats.")
396+
.comment("Only applies if PlaceholderAPI is installed, and only to multiverse placeholders.")
397+
.defaultValue(true)
398+
.name("warn-invalid-papi-format")
399+
.build());
400+
401+
final ConfigNode<Boolean> invalidPapiFormatReturnsBlank = node(ConfigNode.builder("messaging.invalid-papi-format-returns-blank", Boolean.class)
402+
.comment("")
403+
.comment("By default, invalid formats will return the original placeholder string.")
404+
.comment("This config option defines whether or not Multiverse should show invalid PlaceholderAPI formats as blank.")
405+
.comment("Only applies if PlaceholderAPI is installed, and only to multiverse placeholders.")
406+
.defaultValue(false)
407+
.name("invalid-papi-format-returns-blank")
408+
.build());
409+
393410
final ConfigNode<Locale> defaultLocale = node(ConfigNode.builder("messaging.default-locale", Locale.class)
394411
.comment("")
395412
.comment("This config option defines the default language Multiverse should use.")

src/test/resources/configs/fresh_config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ messaging:
3636
enable-chat-prefix: false
3737
chat-prefix-format: '[%world%]%chat%'
3838
register-papi-hook: true
39+
warn-invalid-papi-format: true
40+
invalid-papi-format-returns-blank: false
3941
default-locale: en
4042
per-player-locale: true
4143

0 commit comments

Comments
 (0)