feat(core-bukkit): 当安装 PlaceholderAPI 时自动替换 UI 变量
This commit is contained in:
@@ -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);
|
||||
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());
|
||||
}
|
||||
lore.set(i, s);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user