Skip to content

Commit 151e4dc

Browse files
committed
Parsing placeholders for potentially offline players
1 parent 313e88a commit 151e4dc

3 files changed

Lines changed: 29 additions & 7 deletions

File tree

src/main/java/com/bekvon/bukkit/residence/Placeholders/Placeholder.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.regex.Matcher;
1111
import java.util.regex.Pattern;
1212

13+
import org.bukkit.Bukkit;
1314
import org.bukkit.entity.Player;
1415

1516
import com.bekvon.bukkit.residence.Residence;
@@ -69,7 +70,7 @@ public enum CMIPlaceHolders {
6970
residence_user_current_rentdays,
7071
residence_user_current_rentends,
7172
residence_user_current_flag_$1("Get flags from current residence by flag name", "flagName"),
72-
73+
7374
;
7475

7576
static {
@@ -364,16 +365,23 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) {
364365
}
365366

366367
public String getValue(Player player, CMIPlaceHolders placeHolder, String value) {
368+
return getValue(player != null ? player.getUniqueId() : null, placeHolder, value);
369+
}
370+
371+
public String getValue(UUID uuid, CMIPlaceHolders placeHolder, String value) {
367372

368-
if (placeHolder == null)
373+
if (placeHolder == null || uuid == null)
369374
return null;
370375

371-
Object cached = placeHolder.getCachedValue(player != null ? player.getUniqueId() : null);
376+
Player player = Bukkit.getPlayer(uuid);
377+
378+
Object cached = placeHolder.getCachedValue(uuid);
379+
372380
if (cached != null) {
373381
return (String) cached;
374382
}
375383

376-
ResidencePlayer user = ResidencePlayer.get(player);
384+
ResidencePlayer user = ResidencePlayer.get(uuid);
377385

378386
String result = null;
379387

@@ -514,7 +522,7 @@ public String getValue(Player player, CMIPlaceHolders placeHolder, String value)
514522
values = placeHolder.getComplexValues(value);
515523
if (values.isEmpty())
516524
return "";
517-
res = plugin.getResidenceManager().getByName(values.get(0));
525+
res = plugin.getResidenceManager().getByName(values.get(0));
518526
if (res == null)
519527
return "";
520528
return res == null ? "" : res.getName();

src/main/java/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.bekvon.bukkit.residence.Placeholders;
22

3+
import java.util.UUID;
4+
5+
import org.bukkit.OfflinePlayer;
36
import org.bukkit.entity.Player;
7+
import org.jetbrains.annotations.NotNull;
48

59
import com.bekvon.bukkit.residence.Residence;
610
import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders;
@@ -41,12 +45,20 @@ public String getVersion() {
4145
}
4246

4347
@Override
44-
public String onPlaceholderRequest(Player player, String identifier) {
48+
public String onPlaceholderRequest(Player player, @NotNull String identifier) {
49+
return process(player == null ? null : player.getUniqueId(), identifier);
50+
}
51+
52+
@Override
53+
public String onRequest(OfflinePlayer player, @NotNull String identifier) {
54+
return process(player == null ? null : player.getUniqueId(), identifier);
55+
}
4556

57+
private String process(UUID uuid, String identifier) {
4658
CMIPlaceHolders placeHolder = CMIPlaceHolders.getByName("residence_" + identifier);
4759
if (placeHolder == null) {
4860
return null;
4961
}
50-
return plugin.getPlaceholderAPIManager().getValue(player, placeHolder, "residence_" + identifier);
62+
return plugin.getPlaceholderAPIManager().getValue(uuid, placeHolder, "residence_" + identifier);
5163
}
5264
}

src/main/java/com/bekvon/bukkit/residence/protection/ResidencePermissions.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ public boolean playerHas(String player, String flag, boolean def) {
9292

9393
@Override
9494
public boolean playerHas(Player player, Flags flag, FlagCombo f) {
95+
if (player == null)
96+
return false;
9597
return playerHas(player.getUniqueId(), flag, f);
9698
}
9799

0 commit comments

Comments
 (0)