mirror of
https://github.com/CarmJos/EasyPlugin.git
synced 2024-09-19 11:15:48 +00:00
chore(item): 添加序列化方法
This commit is contained in:
parent
7a06b39b31
commit
b6bd4beda0
2
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
2
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
@ -14,6 +14,7 @@ assignees: ''
|
||||
### **问题来源**
|
||||
|
||||
描述一下通过哪些操作才发现的问题,如:
|
||||
|
||||
1. 使用了 ...
|
||||
2. 输入了 ...
|
||||
3. 出现了报错 ...
|
||||
@ -32,7 +33,6 @@ assignees: ''
|
||||
- Java版本: `JDK11` / `OPENJDK8` / `JRE8` / `...`
|
||||
- 服务端版本: 请在后台输入 `version` 并复制相关输出。
|
||||
|
||||
|
||||
### **其他补充**
|
||||
|
||||
如有其他补充,可以在这里描述。
|
||||
|
4
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
4
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
@ -8,13 +8,17 @@ assignees: ''
|
||||
---
|
||||
|
||||
### **功能简述**
|
||||
|
||||
简单的描述一下你想要的功能
|
||||
|
||||
### **需求来源**
|
||||
|
||||
简单的描述一下为什么需要这个功能。
|
||||
|
||||
### **功能参考**(可选)
|
||||
|
||||
如果有相关功能的参考,如文本、截图,请提供给我们。
|
||||
|
||||
### **附加内容**
|
||||
|
||||
如果有什么小细节需要重点注意,请在这里告诉我们。
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
package cc.carm.lib.easyplugin.command;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -156,14 +156,16 @@ public class GUI {
|
||||
}
|
||||
|
||||
public void openGUI(Player player) {
|
||||
if (this.type == GUIType.CANCEL) { throw new IllegalStateException("被取消或不存在的GUI"); }
|
||||
if (this.type == GUIType.CANCEL) {
|
||||
throw new IllegalStateException("被取消或不存在的GUI");
|
||||
}
|
||||
|
||||
Inventory inv = Bukkit.createInventory(null, this.type.getSize(), this.name);
|
||||
IntStream.range(0, inv.getSize()).forEach(index -> inv.setItem(index, new ItemStack(Material.AIR)));
|
||||
getItems().forEach((index, item) -> inv.setItem(index, item.getDisplay()));
|
||||
|
||||
GUI previous = getOpenedGUI(player);
|
||||
if(previous != null){
|
||||
if (previous != null) {
|
||||
previous.listener.close(player);
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class GUIListener implements Listener {
|
||||
|
||||
}
|
||||
|
||||
protected void close(Player p){
|
||||
protected void close(Player p) {
|
||||
HandlerList.unregisterAll(this);
|
||||
getCurrentGUI().listener = null;
|
||||
GUI.removeOpenedGUI(p);
|
||||
|
@ -3,18 +3,39 @@ package cc.carm.lib.easyplugin.gui.configuration;
|
||||
import cc.carm.lib.easyplugin.gui.GUIItem;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class GUIActionConfiguration {
|
||||
|
||||
public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType,
|
||||
@Nullable ClickType clickType,
|
||||
@Nullable String actionContent) {
|
||||
return new GUIActionConfiguration(actionType, clickType, actionContent);
|
||||
}
|
||||
|
||||
@Nullable ClickType clickType;
|
||||
final @NotNull GUIActionType actionType;
|
||||
final @Nullable String actionContent;
|
||||
public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType,
|
||||
@Nullable String actionContent) {
|
||||
return of(actionType, null, actionContent);
|
||||
}
|
||||
|
||||
public GUIActionConfiguration(@Nullable ClickType clickType,
|
||||
@NotNull GUIActionType actionType,
|
||||
public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType,
|
||||
@Nullable ClickType clickType) {
|
||||
return of(actionType, clickType, null);
|
||||
}
|
||||
|
||||
public static @NotNull GUIActionConfiguration of(@NotNull GUIActionType actionType) {
|
||||
return of(actionType, null, null);
|
||||
}
|
||||
|
||||
protected final @NotNull GUIActionType actionType;
|
||||
|
||||
protected final @Nullable ClickType clickType;
|
||||
protected final @Nullable String actionContent;
|
||||
|
||||
public GUIActionConfiguration(@NotNull GUIActionType actionType,
|
||||
@Nullable ClickType clickType,
|
||||
@Nullable String actionContent) {
|
||||
this.clickType = clickType;
|
||||
this.actionType = actionType;
|
||||
@ -50,4 +71,36 @@ public class GUIActionConfiguration {
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Contract("null->null")
|
||||
public static GUIActionConfiguration deserialize(@Nullable String actionString) {
|
||||
if (actionString == null) return null;
|
||||
|
||||
int prefixStart = actionString.indexOf("[");
|
||||
int prefixEnd = actionString.indexOf("]");
|
||||
if (prefixStart < 0 || prefixEnd < 0) return null;
|
||||
|
||||
String prefix = actionString.substring(prefixStart + 1, prefixEnd);
|
||||
ClickType clickType = null;
|
||||
GUIActionType actionType;
|
||||
if (prefix.contains(":")) {
|
||||
String[] args = prefix.split(":");
|
||||
clickType = GUIConfiguration.readClickType(args[0]);
|
||||
actionType = GUIActionType.readActionType(args[1]);
|
||||
} else {
|
||||
actionType = GUIActionType.readActionType(prefix);
|
||||
}
|
||||
|
||||
if (actionType == null) return null;
|
||||
|
||||
String content = actionString.substring(prefixEnd + 1).trim();
|
||||
return of(actionType, clickType, content);
|
||||
}
|
||||
|
||||
public @NotNull String serialize() {
|
||||
String prefix = "[" + getActionType().name() + (getClickType() == null ? "" : ":" + getClickType().name()) + "]";
|
||||
String content = getActionContent() == null ? "" : " " + getActionContent();
|
||||
return prefix + content;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,30 +7,27 @@ import cc.carm.lib.easyplugin.utils.MessageUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GUIItemConfiguration {
|
||||
|
||||
Material material;
|
||||
@NotNull Material type;
|
||||
int data;
|
||||
String name;
|
||||
@Nullable String name;
|
||||
@NotNull List<String> lore;
|
||||
|
||||
@NotNull List<Integer> slots;
|
||||
@NotNull List<GUIActionConfiguration> actions;
|
||||
|
||||
public GUIItemConfiguration(Material material, int data,
|
||||
String name, @NotNull List<String> lore,
|
||||
public GUIItemConfiguration(@NotNull Material type, int data,
|
||||
@Nullable String name, @NotNull List<String> lore,
|
||||
@NotNull List<GUIActionConfiguration> actions,
|
||||
@NotNull List<Integer> slots) {
|
||||
this.material = material;
|
||||
this.type = type;
|
||||
this.data = data;
|
||||
this.name = name;
|
||||
this.lore = lore;
|
||||
@ -39,7 +36,7 @@ public class GUIItemConfiguration {
|
||||
}
|
||||
|
||||
public void setupItems(Player player, GUI gui) {
|
||||
ItemStackFactory icon = new ItemStackFactory(this.material);
|
||||
ItemStackFactory icon = new ItemStackFactory(this.type);
|
||||
icon.setDurability(this.data);
|
||||
if (this.name != null) icon.setDisplayName(this.name);
|
||||
icon.setLore(MessageUtils.setPlaceholders(player, this.lore));
|
||||
@ -49,10 +46,29 @@ public class GUIItemConfiguration {
|
||||
this.slots.forEach(slot -> gui.setItem(slot, item));
|
||||
}
|
||||
|
||||
public Map<String, Object> serialize() {
|
||||
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
|
||||
|
||||
map.put("type", this.type.name());
|
||||
if (this.name != null) map.put("name", this.name);
|
||||
if (this.data != 0) map.put("data", this.data);
|
||||
if (!this.lore.isEmpty()) map.put("lore", this.lore);
|
||||
if (this.slots.size() > 1) {
|
||||
map.put("slots", this.slots);
|
||||
} else if (slots.size() == 1) {
|
||||
map.put("slots", this.slots.get(0));
|
||||
}
|
||||
if (!this.actions.isEmpty()) {
|
||||
map.put("actions", this.actions.stream().map(GUIActionConfiguration::serialize).collect(Collectors.toList()));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static GUIItemConfiguration readFrom(@Nullable ConfigurationSection itemSection) {
|
||||
if (itemSection == null) return null;
|
||||
Material material = Optional.ofNullable(Material.matchMaterial(itemSection.getString("material", "STONE"))).orElse(Material.STONE);
|
||||
String material = Optional.ofNullable(itemSection.getString("type")).orElse("STONE");
|
||||
Material type = Optional.ofNullable(Material.matchMaterial(material)).orElse(Material.STONE);
|
||||
int data = itemSection.getInt("data", 0);
|
||||
String name = itemSection.getString("name");
|
||||
List<String> lore = itemSection.getStringList("lore");
|
||||
@ -63,27 +79,13 @@ public class GUIItemConfiguration {
|
||||
List<String> actionsString = itemSection.getStringList("actions");
|
||||
List<GUIActionConfiguration> actions = new ArrayList<>();
|
||||
for (String actionString : actionsString) {
|
||||
int prefixStart = actionString.indexOf("[");
|
||||
int prefixEnd = actionString.indexOf("]");
|
||||
if (prefixStart < 0 || prefixEnd < 0) continue;
|
||||
|
||||
String prefix = actionString.substring(prefixStart + 1, prefixEnd);
|
||||
ClickType clickType = null;
|
||||
GUIActionType actionType;
|
||||
if (prefix.contains(":")) {
|
||||
String[] args = prefix.split(":");
|
||||
clickType = GUIConfiguration.readClickType(args[0]);
|
||||
actionType = GUIActionType.readActionType(args[1]);
|
||||
} else {
|
||||
actionType = GUIActionType.readActionType(prefix);
|
||||
}
|
||||
|
||||
if (actionType == null) continue;
|
||||
actions.add(new GUIActionConfiguration(clickType, actionType, actionString.substring(prefixEnd + 1).trim()));
|
||||
GUIActionConfiguration action = GUIActionConfiguration.deserialize(actionString);
|
||||
if (action == null) continue;
|
||||
actions.add(action);
|
||||
}
|
||||
|
||||
return new GUIItemConfiguration(
|
||||
material, data, name, lore, actions,
|
||||
type, data, name, lore, actions,
|
||||
slots.size() > 0 ? slots : Collections.singletonList(slot)
|
||||
);
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
import cc.carm.lib.easyplugin.gui.configuration.GUIActionType;
|
||||
import cc.carm.lib.easyplugin.gui.configuration.GUIConfiguration;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>easyplugin-parent</artifactId>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<version>1.4.6</version>
|
||||
<version>1.4.7</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
Loading…
Reference in New Issue
Block a user