feat(core-bukkit): 当安装 PlaceholderAPI 时自动替换 UI 变量

This commit is contained in:
2024-03-14 23:54:51 +08:00
parent 258bb9ac4f
commit 590e359c65

View File

@@ -2,7 +2,12 @@ package cn.hamster3.mc.plugin.core.bukkit.page.handler;
import cn.hamster3.mc.plugin.core.bukkit.page.ButtonGroup; import cn.hamster3.mc.plugin.core.bukkit.page.ButtonGroup;
import cn.hamster3.mc.plugin.core.bukkit.page.PageConfig; import cn.hamster3.mc.plugin.core.bukkit.page.PageConfig;
import lombok.Getter;
import lombok.Setter;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -27,28 +32,36 @@ import java.util.Map;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public abstract class PageableHandler<E> extends FixedPageHandler { public abstract class PageableHandler<E> extends FixedPageHandler {
private static final ItemStack EMPTY_STACK = new ItemStack(Material.AIR); private static final ItemStack EMPTY_STACK = new ItemStack(Material.AIR);
private final HashMap<Integer, E> elementSlot;
@Setter
private String previewButtonName = "preview"; private String previewButtonName = "preview";
@Setter
private String nextButtonName = "next"; private String nextButtonName = "next";
@Setter
private String barrierButtonName = "barrier"; private String barrierButtonName = "barrier";
@Setter
@Getter
private String elementButtonName = "element"; private String elementButtonName = "element";
@Setter
@Getter
private int page; private int page;
private HashMap<Integer, E> elementSlot;
public PageableHandler(@NotNull HumanEntity player) { public PageableHandler(@NotNull HumanEntity player) {
super(player); super(player);
this.page = 0; this.page = 0;
elementSlot = new HashMap<>();
} }
public PageableHandler(@NotNull HumanEntity player, int page) { public PageableHandler(@NotNull HumanEntity player, int page) {
super(player); super(player);
this.page = page; this.page = page;
elementSlot = new HashMap<>();
} }
public PageableHandler(@NotNull PageConfig config, @NotNull HumanEntity player, int page) { public PageableHandler(@NotNull PageConfig config, @NotNull HumanEntity player, int page) {
super(config, player); super(config, player);
this.page = page; this.page = page;
elementSlot = new HashMap<>();
} }
@NotNull @NotNull
@@ -56,14 +69,6 @@ public abstract class PageableHandler<E> extends FixedPageHandler {
public abstract void onClickElement(@NotNull ClickType clickType, @NotNull InventoryAction action, @NotNull E element); public abstract void onClickElement(@NotNull ClickType clickType, @NotNull InventoryAction action, @NotNull E element);
public String getElementButtonName() {
return elementButtonName;
}
public void setElementButtonName(String elementButtonName) {
this.elementButtonName = elementButtonName;
}
@NotNull @NotNull
public String getElementButtonName(@NotNull E element) { public String getElementButtonName(@NotNull E element) {
return elementButtonName; return elementButtonName;
@@ -128,7 +133,7 @@ public abstract class PageableHandler<E> extends FixedPageHandler {
ArrayList<Integer> buttonIndexes = group.getButtonAllIndex(elementButtonName); ArrayList<Integer> buttonIndexes = group.getButtonAllIndex(elementButtonName);
int pageSize = buttonIndexes.size(); // 一页有多少个按钮 int pageSize = buttonIndexes.size(); // 一页有多少个按钮
elementSlot = new HashMap<>(); elementSlot.clear();
HashMap<String, String> variables = getPageVariables(); HashMap<String, String> variables = getPageVariables();
@@ -166,21 +171,34 @@ public abstract class PageableHandler<E> extends FixedPageHandler {
if (meta == null) { if (meta == null) {
return; return;
} }
HumanEntity player = getPlayer();
if (meta.hasDisplayName()) { if (meta.hasDisplayName()) {
String displayName = meta.getDisplayName(); String displayName = meta.getDisplayName();
for (Map.Entry<String, String> entry : variables.entrySet()) { for (Map.Entry<String, String> entry : variables.entrySet()) {
displayName = displayName.replace(entry.getKey(), entry.getValue()); displayName = displayName.replace(entry.getKey(), entry.getValue());
} }
if (player instanceof Player && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
displayName = PlaceholderAPI.setPlaceholders((OfflinePlayer) player, displayName);
}
meta.setDisplayName(displayName); meta.setDisplayName(displayName);
} }
List<String> lore = meta.getLore(); List<String> lore = meta.getLore();
if (lore != null) { if (lore != null) {
for (int i = 0; i < lore.size(); i++) { if (player instanceof Player && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
String s = lore.get(i); lore.replaceAll(s -> {
for (Map.Entry<String, String> entry : variables.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
s = PlaceholderAPI.setPlaceholders((OfflinePlayer) player, s);
}
return s;
});
} else {
lore.replaceAll(s -> {
for (Map.Entry<String, String> entry : variables.entrySet()) { for (Map.Entry<String, String> entry : variables.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue()); s = s.replace(entry.getKey(), entry.getValue());
} }
lore.set(i, s); return s;
});
} }
meta.setLore(lore); meta.setLore(lore);
} }
@@ -203,23 +221,4 @@ public abstract class PageableHandler<E> extends FixedPageHandler {
return elementSlot; return elementSlot;
} }
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public void setPreviewButtonName(String previewButtonName) {
this.previewButtonName = previewButtonName;
}
public void setNextButtonName(String nextButtonName) {
this.nextButtonName = nextButtonName;
}
public void setBarrierButtonName(String barrierButtonName) {
this.barrierButtonName = barrierButtonName;
}
} }