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