mirror of
https://github.com/CarmJos/ScriptItems
synced 2026-07-15 07:21:23 +08:00
完成指令部分
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
package cc.carm.plugin.scriptitems.manager;
|
||||
|
||||
import cc.carm.lib.easyplugin.configuration.file.FileConfig;
|
||||
import cc.carm.lib.easyplugin.configuration.language.MessagesConfig;
|
||||
import cc.carm.lib.easyplugin.configuration.language.MessagesInitializer;
|
||||
import cc.carm.plugin.scriptitems.configuration.PluginMessages;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class ConfigManager {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
|
||||
private FileConfig config;
|
||||
private MessagesConfig messageConfig;
|
||||
|
||||
public ConfigManager(JavaPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public boolean initConfig() {
|
||||
try {
|
||||
this.config = new FileConfig(plugin);
|
||||
this.messageConfig = new MessagesConfig(plugin);
|
||||
|
||||
FileConfig.pluginConfiguration = () -> config;
|
||||
FileConfig.messageConfiguration = () -> messageConfig;
|
||||
|
||||
MessagesInitializer.initialize(messageConfig, PluginMessages.class);
|
||||
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfig getPluginConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public FileConfig getMessageConfig() {
|
||||
return messageConfig;
|
||||
}
|
||||
|
||||
public void reload() throws Exception {
|
||||
getPluginConfig().reload();
|
||||
getMessageConfig().reload();
|
||||
}
|
||||
|
||||
public void saveConfig() throws Exception {
|
||||
getPluginConfig().save();
|
||||
getMessageConfig().save();
|
||||
}
|
||||
|
||||
public static <V> Map<String, V> readStringMap(@Nullable ConfigurationSection section,
|
||||
@NotNull Function<String, V> valueCast) {
|
||||
if (section == null) return new LinkedHashMap<>();
|
||||
Map<String, V> result = new LinkedHashMap<>();
|
||||
for (String key : section.getKeys(false)) {
|
||||
V finalValue = valueCast.apply(section.getString(key));
|
||||
if (finalValue != null) result.put(key, finalValue);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static <V> Map<String, V> readSectionMap(@Nullable ConfigurationSection section,
|
||||
@NotNull Function<ConfigurationSection, V> valueCast) {
|
||||
if (section == null) return new LinkedHashMap<>();
|
||||
Map<String, V> result = new LinkedHashMap<>();
|
||||
for (String key : section.getKeys(false)) {
|
||||
if (!section.isConfigurationSection(key)) continue;
|
||||
V finalValue = valueCast.apply(section.getConfigurationSection(key));
|
||||
if (finalValue != null) result.put(key, finalValue);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static <V> Map<String, V> readListMap(@Nullable ConfigurationSection section,
|
||||
@NotNull Function<@NotNull List<String>, V> valueCast) {
|
||||
if (section == null) return new LinkedHashMap<>();
|
||||
Map<String, V> result = new LinkedHashMap<>();
|
||||
for (String key : section.getKeys(false)) {
|
||||
if (!section.isList(key)) continue;
|
||||
V finalValue = valueCast.apply(section.getStringList(key));
|
||||
if (finalValue != null) result.put(key, finalValue);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package cc.carm.plugin.scriptitems.manager;
|
||||
|
||||
import cc.carm.plugin.scriptitems.Main;
|
||||
import cc.carm.plugin.scriptitems.item.ItemSettings;
|
||||
import cc.carm.plugin.scriptitems.item.ScriptItem;
|
||||
import cc.carm.plugin.scriptitems.util.JarResourceUtils;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.tags.CustomItemTagContainer;
|
||||
import org.bukkit.inventory.meta.tags.ItemTagType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ItemsManager {
|
||||
|
||||
private static final String FOLDER_NAME = "items";
|
||||
|
||||
public HashMap<String, ItemSettings> items = new HashMap<>();
|
||||
|
||||
protected NamespacedKey idKey;
|
||||
protected NamespacedKey uuidKey;
|
||||
|
||||
public void initialize() {
|
||||
this.idKey = new NamespacedKey(Main.getInstance(), "id");
|
||||
this.uuidKey = new NamespacedKey(Main.getInstance(), "uuid");
|
||||
loadItems();
|
||||
Main.info("成功加载了 " + items.size() + " 个脚本物品。");
|
||||
}
|
||||
|
||||
public void loadItems() {
|
||||
File prefixDataFolder = getStorageFolder();
|
||||
if (!prefixDataFolder.isDirectory() || !prefixDataFolder.exists()) {
|
||||
try {
|
||||
JarResourceUtils.copyFolderFromJar(
|
||||
FOLDER_NAME, Main.getInstance().getDataFolder(),
|
||||
JarResourceUtils.CopyOption.COPY_IF_NOT_EXIST
|
||||
);
|
||||
} catch (Exception ex) {
|
||||
boolean success = prefixDataFolder.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
String[] filesList = prefixDataFolder.list();
|
||||
if (filesList == null || filesList.length < 1) {
|
||||
Main.severe(" 配置文件夹中暂无任何物品,请检查。");
|
||||
Main.severe(" There's no configured items.");
|
||||
return;
|
||||
}
|
||||
|
||||
List<File> files = Arrays.stream(filesList)
|
||||
.map(s -> new File(prefixDataFolder, s))
|
||||
.filter(File::isFile)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
HashMap<String, ItemSettings> dataItems = new HashMap<>();
|
||||
|
||||
if (files.size() > 0) {
|
||||
for (File file : files) {
|
||||
String fileName = file.getName();
|
||||
if (fileName.startsWith(".")) continue;
|
||||
try {
|
||||
ItemSettings item = ItemSettings.load(file);
|
||||
Main.info(" 完成物品加载 [#" + item.getIdentifier() + "] " + item.getName() + " (" + fileName + ")");
|
||||
dataItems.put(item.getIdentifier(), item);
|
||||
} catch (Exception ex) {
|
||||
Main.severe("在加载物品 " + file.getAbsolutePath() + " 时出错,请检查配置!");
|
||||
Main.severe("Error occurred when loading item #" + file.getAbsolutePath() + " !");
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items = dataItems;
|
||||
}
|
||||
|
||||
private static File getStorageFolder() {
|
||||
return new File(Main.getInstance().getDataFolder(), FOLDER_NAME);
|
||||
}
|
||||
|
||||
@Unmodifiable
|
||||
public Map<String, ItemSettings> listItemSettings() {
|
||||
return ImmutableMap.copyOf(items);
|
||||
}
|
||||
|
||||
public @Nullable ItemSettings getItemSettings(@NotNull String identifier) {
|
||||
return items.get(identifier);
|
||||
}
|
||||
|
||||
public ItemStack applyTag(@NotNull ItemStack originalItem, String identifier, UUID uuid) {
|
||||
if (!originalItem.hasItemMeta()) return originalItem;
|
||||
ItemMeta meta = originalItem.getItemMeta();
|
||||
if (meta == null) return originalItem;
|
||||
CustomItemTagContainer container = meta.getCustomTagContainer();
|
||||
container.setCustomTag(idKey, ItemTagType.STRING, identifier);
|
||||
container.setCustomTag(uuidKey, ItemTagType.STRING, uuid.toString());
|
||||
originalItem.setItemMeta(meta);
|
||||
return originalItem;
|
||||
}
|
||||
|
||||
public @Nullable ScriptItem parseItem(@Nullable ItemStack item) {
|
||||
if (item == null || item.getType() == Material.AIR) return null;
|
||||
if (!item.hasItemMeta()) return null;
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta == null) return null;
|
||||
CustomItemTagContainer container = meta.getCustomTagContainer();
|
||||
String settingsID = container.getCustomTag(this.idKey, ItemTagType.STRING);
|
||||
String itemUUID = container.getCustomTag(this.uuidKey, ItemTagType.STRING);
|
||||
if (settingsID == null || itemUUID == null) return null;
|
||||
ItemSettings settings = getItemSettings(settingsID);
|
||||
if (settings == null) return null;
|
||||
return new ScriptItem(UUID.fromString(itemUUID), settings, item);
|
||||
}
|
||||
|
||||
public boolean isScriptItem(ItemStack item) {
|
||||
return item.hasItemMeta() && item.getItemMeta() != null
|
||||
&& item.getItemMeta().getCustomTagContainer().hasCustomTag(idKey, ItemTagType.STRING);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user