commit ab223481fe92289a302edfaca3cd050d21c1933d
Author: tianyu <32282861@qq.com>
Date: Thu Jul 25 04:33:47 2024 +0800
测试版
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c037f46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,40 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+/.idea/
+/out/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..fdf505d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ org.example
+ DemonGemsSocket
+ 1.0-SNAPSHOT
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ public-rpg
+ https://repo.aurora-pixels.com/repository/public-rpg/
+
+
+
+
+
+ org.spigotmc
+ spigot-api
+ 1.12.2
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/me/Demon/DemonGemsSocket/GemsAPI.java b/src/main/java/me/Demon/DemonGemsSocket/GemsAPI.java
new file mode 100644
index 0000000..de953dd
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/GemsAPI.java
@@ -0,0 +1,49 @@
+package me.Demon.DemonGemsSocket;
+
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.inventory.ItemFlag;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.List;
+
+public abstract class GemsAPI {
+
+ public static String getname(String games_key){
+ FileConfiguration yml = Main.plugin.getConfig();
+ return yml.getString("Games."+games_key+".name");
+ }
+
+ public static int getchance(String games_key){
+ FileConfiguration yml = Main.plugin.getConfig();
+ return yml.getInt("Games."+games_key+".chance");
+ }
+
+ public static String gettype(String games_key){
+ FileConfiguration yml = Main.plugin.getConfig();
+ return yml.getString("Games."+games_key+".type");
+ }
+
+ public static ItemStack getItems(String games_key){
+ FileConfiguration yml = Main.plugin.getConfig();
+ ItemStack item = yml.getItemStack("Items."+games_key).clone();
+ ItemMeta meta = item.getItemMeta();
+ meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
+ meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL,1,true);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ public static String getGems_Key(ItemStack item){
+ ItemMeta meta = item.getItemMeta();
+ FileConfiguration yml = Main.plugin.getConfig();
+ for (String key : yml.getConfigurationSection("Games").getKeys(false)){
+ String name = yml.getString("Games."+key+".name");
+ if(meta.getDisplayName().equalsIgnoreCase(name)){
+ return key;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/GemsListGui.java b/src/main/java/me/Demon/DemonGemsSocket/GemsListGui.java
new file mode 100644
index 0000000..576ffb9
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/GemsListGui.java
@@ -0,0 +1,39 @@
+package me.Demon.DemonGemsSocket;
+
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+public class GemsListGui implements Listener {
+
+ public static void OpenGui(Player p){
+ Inventory inv = Bukkit.createInventory(null,54,"宝石镶嵌 - 查看所有宝石");
+ FileConfiguration yml = Main.plugin.getConfig();
+ for (String key : yml.getConfigurationSection("Items").getKeys(false)){
+ ItemStack item = GemsAPI.getItems(key);
+ item.setAmount(1);
+ inv.addItem(item);
+ }
+ p.openInventory(inv);
+ }
+
+ @EventHandler
+ public void onclick(InventoryClickEvent e){
+ Player p = (Player) e.getWhoClicked();
+ if(e.getInventory() != null && "宝石镶嵌 - 查看所有宝石".equalsIgnoreCase(e.getInventory().getTitle())){
+ e.setCancelled(true);
+ if(e.getRawSlot() >= 0 && e.getRawSlot() < e.getInventory().getSize()) {
+ ItemStack item = e.getCurrentItem();
+ if(!Main.itemIsNull(item) &&!Main.itemIsLore(item)) {
+ p.getInventory().addItem(e.getCurrentItem());
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/Item/Rod_Unlock.java b/src/main/java/me/Demon/DemonGemsSocket/Item/Rod_Unlock.java
new file mode 100644
index 0000000..fa31bce
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/Item/Rod_Unlock.java
@@ -0,0 +1,125 @@
+package me.Demon.DemonGemsSocket.Item;
+
+import me.Demon.DemonGemsSocket.GemsAPI;
+import me.Demon.DemonGemsSocket.Main;
+import me.Demon.DemonGemsSocket.listener.GemsGui;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.inventory.InventoryType;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Rod_Unlock implements Listener {
+
+ public static ItemStack setItem_UnlockEvent(ItemStack items){
+ ItemStack item = items.clone();
+ ItemMeta meta = item.getItemMeta();
+ List lore = meta.getLore();
+ for (int i = 0;i < lore.size();i++){
+ String s = lore.get(i);
+ if (s.contains("§7- < §1§5§r§7已锁定§1§5§r§7 >")){
+ lore.set(i,Main.EmptyLore);
+ break;
+ }
+ }
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ // 玩家在背包中点击献祭宝典拿起来点击魂环事件
+ @EventHandler
+ public void onOpenclick(InventoryClickEvent e) {
+ Player p = (Player) e.getWhoClicked();
+ if (e.getInventory().getType() == InventoryType.CRAFTING) {
+ // 判断点击起来的物品是否是拆除器
+ int type = 0;
+ ItemStack book = e.getCursor();
+ if (!Main.itemIsNull(book) && !Main.itemIsLore(book)) {
+ ItemMeta meta = book.getItemMeta();
+ if(meta.getDisplayName().equalsIgnoreCase("§7[§e宝石§7]§d小黑子开孔器")){
+ type = 1;
+ }else if(meta.getDisplayName().equalsIgnoreCase("§7[§e宝石§7]§d顶级开孔器")){
+ type = 2;
+ }
+ }else{
+ return;
+ }
+ // 获取点击物品是否是魂环
+ ItemStack item = e.getCurrentItem();
+ if(!Main.itemIsNull(item) && !Main.itemIsLore(item)) {
+ ItemMeta meta = item.getItemMeta();
+ if(type == 1) {
+ if (!book.getItemMeta().getDisplayName().equalsIgnoreCase("§7[§e宝石§7]§d小黑子开孔器")) {
+ return;
+ }
+ if (book.getAmount() >= 2) {
+ p.sendMessage(Main.prefix + "开孔失败,每次最多使用一个开孔器");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if (!meta.getLore().contains("§7- < §1§5§r§7已锁定§1§5§r§7 >")) {
+ p.sendMessage(Main.prefix + "开孔失败,该物品可能并不存在为解锁宝石槽");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if (item.getAmount() >= 2) {
+ p.sendMessage(Main.prefix + "开孔失败,每次最多为一个物品进行此操作。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if(Main.getRandomInt(100,1) >= 40){
+ e.setCursor(new ItemStack(Material.AIR));
+ p.sendMessage(Main.prefix + "开孔失败,损失了一个 §7[§e宝石§7]§d小黑子开孔器");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ // 扣除物品
+ e.setCursor(new ItemStack(Material.AIR));
+ // 修改物品的Lore
+ ItemStack new_item = setItem_UnlockEvent(item);
+ e.setCurrentItem(new_item);
+ p.sendMessage(Main.prefix + "开孔成功,已解锁宝石槽位一个。");
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ } else {
+ if (!book.getItemMeta().getDisplayName().equalsIgnoreCase("§7[§e宝石§7]§d顶级开孔器")) {
+ return;
+ }
+ if (book.getAmount() >= 2) {
+ p.sendMessage(Main.prefix + "开孔失败,每次最多使用一个开孔器");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if (!meta.getLore().contains("§7- < §1§5§r§7已锁定§1§5§r§7 >")) {
+ p.sendMessage(Main.prefix + "开孔失败,该物品可能并不存在为解锁宝石槽");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if (item.getAmount() >= 2) {
+ p.sendMessage(Main.prefix + "开孔失败,每次最多为一个物品进行此操作。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ // 扣除物品
+ e.setCursor(new ItemStack(Material.AIR));
+ // 修改物品的Lore
+ ItemStack new_item = setItem_UnlockEvent(item);
+ e.setCurrentItem(new_item);
+ p.sendMessage(Main.prefix + "开孔成功,已解锁宝石槽位一个。");
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/Main.java b/src/main/java/me/Demon/DemonGemsSocket/Main.java
new file mode 100644
index 0000000..f2502b3
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/Main.java
@@ -0,0 +1,192 @@
+package me.Demon.DemonGemsSocket;
+
+import me.Demon.DemonGemsSocket.Item.Rod_Unlock;
+import me.Demon.DemonGemsSocket.Remove.GemRemove;
+import me.Demon.DemonGemsSocket.listener.*;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
+
+public class Main extends JavaPlugin {
+
+ public static Main plugin;
+ public static String prefix = "§7[§6宝石§7] §f";
+ public static String EmptyLore = "§7- < §1§5§r§7空§1§5§r§7 >";
+ public static HashMap GemHashMap = new HashMap<>();
+
+ @Override
+ public void onEnable() {
+ plugin = this;
+ saveDefaultConfig();
+ for (String gemKey : getConfig().getConfigurationSection("Games").getKeys(false)) {
+ String name = getConfig().getString("Games." + gemKey + ".name");
+ String replore = "§1§6§r§8- §8< " + name + " §8>§1§6§r";
+ GemHashMap.put(replore, gemKey);
+ }
+ Bukkit.getConsoleSender().sendMessage("§6[宝石镶嵌] §f载入宝石: §e" + GemHashMap.size() + "颗");
+ Bukkit.getPluginManager().registerEvents(new GemsListGui(), plugin);
+ Bukkit.getPluginManager().registerEvents(new GemsOpen(), plugin);
+ Bukkit.getPluginManager().registerEvents(new GemsGuiEvent(), plugin);
+ Bukkit.getPluginManager().registerEvents(new GemsGuiClose(), plugin);
+ Bukkit.getPluginManager().registerEvents(new Rod_Unlock(), plugin);
+ Bukkit.getPluginManager().registerEvents(new GemRemove(), plugin);
+ Bukkit.getConsoleSender().sendMessage("§6[宝石镶嵌] §a插件成功载入Server!");
+ Bukkit.getConsoleSender().sendMessage("§6[宝石镶嵌] §a妖魂QQ:1763917516");
+ }
+
+ public void onDisable() {
+ Bukkit.getConsoleSender().sendMessage("§6[宝石镶嵌] §c插件已正常关闭!");
+ }
+
+ public boolean onCommand(CommandSender sender, Command cmd, String CommandLabel, String[] args) {
+ if (CommandLabel.equalsIgnoreCase("socketpro") && sender.isOp()) {
+ if (args.length == 0) {
+ sender.sendMessage("§r");
+ sender.sendMessage("§e------- ======= §6镶嵌宝石系统 §e======= -------");
+ sender.sendMessage("§2/socketpro open §f- §2打开宝石库");
+ sender.sendMessage("§2/socketpro chaichu §f- §2打开拆除台");
+ sender.sendMessage("§2/socketpro giveall §e[宝石代号] §f- §2给予在线玩家1颗宝石");
+ sender.sendMessage("§2/socketpro give §e[宝石代号] §2<数量> §f- §2给予宝石");
+ sender.sendMessage("§2/socketpro give §e[宝石代号] §2<数量> §b<玩家> §f- §2给予宝石");
+ sender.sendMessage("§2/socketpro givepro §e[宝石代号] §2<数量> §b<玩家> §f- §2给予神护宝石");
+ sender.sendMessage("§e------- ======= §6镶嵌宝石系统 §e======= -------");
+ sender.sendMessage("§r");
+ }
+ // socket give
+ if (args.length == 1 && args[0].equalsIgnoreCase("open")) {
+ GemsListGui.OpenGui((Player) sender);
+ }
+ if (args.length == 1 && args[0].equalsIgnoreCase("chaichu")) {
+ GemRemove.OpenGui((Player) sender);
+ }
+ if (args.length == 2 && args[0].equalsIgnoreCase("giveall")) {
+ String gems_key = args[1];
+ if (GemsAPI.getchance(gems_key) <= 10) {
+ sender.sendMessage(Main.prefix + "宝石可能不存在,请检查配置。");
+ return true;
+ }
+ int cont = 0;
+ int amount = 1;
+ ItemStack item = GemsAPI.getItems(gems_key);
+ item.setAmount(amount);
+ for (Player p : Bukkit.getOnlinePlayers()) {
+ p.getInventory().addItem(item);
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ p.sendMessage(Main.prefix + "你从 §e" + sender.getName() + " §a那收到了一颗 §r" + item.getItemMeta().getDisplayName());
+ cont++;
+ }
+ sender.sendMessage(Main.prefix + "本次总计发放 §e" + cont + "颗 §r" + item.getItemMeta().getDisplayName());
+ }
+ if (args.length == 3 && args[0].equalsIgnoreCase("give")) {
+ String gems_key = args[1];
+ if (GemsAPI.getchance(gems_key) <= 10) {
+ sender.sendMessage(Main.prefix + "宝石可能不存在,请检查配置。");
+ return true;
+ }
+ int amount = Integer.parseInt(args[2]);
+ if (amount < 1) {
+ sender.sendMessage(Main.prefix + "宝石数量必须大于或等于1。");
+ return true;
+ }
+ Player p = (Player) sender;
+ ItemStack item = GemsAPI.getItems(gems_key);
+ item.setAmount(amount);
+ p.getInventory().addItem(item);
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ sender.sendMessage(Main.prefix + "给予 §6" + amount + "x" + item.getItemMeta().getDisplayName() + " §a给 §e" + p.getName());
+ }
+ if (args.length == 4 && args[0].equalsIgnoreCase("give")) {
+ String gems_key = args[1];
+ if (GemsAPI.getchance(gems_key) <= 10) {
+ sender.sendMessage(Main.prefix + "宝石可能不存在,请检查配置。");
+ return true;
+ }
+ int amount = Integer.parseInt(args[2]);
+ if (amount < 1) {
+ sender.sendMessage(Main.prefix + "宝石数量必须大于或等于1。");
+ return true;
+ }
+ Player p = Bukkit.getPlayer(args[3]);
+ if (p != null) {
+ ItemStack item = GemsAPI.getItems(gems_key);
+ item.setAmount(amount);
+ p.getInventory().addItem(item);
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ sender.sendMessage(Main.prefix + "给予 §6" + amount + "x" + item.getItemMeta().getDisplayName() + " §a给 §e" + p.getName());
+ } else {
+ sender.sendMessage(Main.prefix + "目标玩家不在线。");
+ }
+ }
+ if (args.length == 4 && args[0].equalsIgnoreCase("givepro")) {
+ String gems_key = args[1];
+ if (GemsAPI.getchance(gems_key) <= 10) {
+ sender.sendMessage(Main.prefix + "宝石可能不存在,请检查配置。");
+ return true;
+ }
+ int amount = Integer.parseInt(args[2]);
+ if (amount < 1) {
+ sender.sendMessage(Main.prefix + "宝石数量必须大于或等于1。");
+ return true;
+ }
+ Player p = Bukkit.getPlayer(args[3]);
+ if (p != null) {
+ ItemStack item = GemsAPI.getItems(gems_key);
+ item.setAmount(amount);
+ ItemMeta meta = item.getItemMeta();
+ List lore = meta.getLore();
+ for (int i = 0; i < lore.size(); i++) {
+ String s = lore.get(i);
+ if (s.contains("§e▶ §7神护: §c§l✘")) {
+ lore.set(i, "§e▶ §7神护: §a§l✔");
+ break;
+ }
+ }
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+ p.getInventory().addItem(item);
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ sender.sendMessage(Main.prefix + "给予 §6" + amount + "x" + item.getItemMeta().getDisplayName() + " §a给 §e" + p.getName());
+ } else {
+ sender.sendMessage(Main.prefix + "目标玩家不在线。");
+ }
+ }
+ }
+ return false;
+ }
+
+ public static boolean itemIsNull(ItemStack item) {
+ return item == null || item.getType() == Material.AIR;
+ }
+
+ public static boolean itemIsLore(ItemStack item) {
+ return item.getItemMeta().getLore() == null;
+ }
+
+ public static int getRandomInt(int max, int mix) {
+ return new Random().nextInt(max) + mix;
+ }
+
+ public static int getEmptySlotCount(Player p) {
+ int count = 0;
+ Inventory inv = p.getInventory();
+ for (int i = 0; i < 36; i++) {
+ ItemStack item = inv.getItem(i);
+ if (itemIsNull(item)) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/Remove/GemRemove.java b/src/main/java/me/Demon/DemonGemsSocket/Remove/GemRemove.java
new file mode 100644
index 0000000..d373c84
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/Remove/GemRemove.java
@@ -0,0 +1,193 @@
+package me.Demon.DemonGemsSocket.Remove;
+
+import me.Demon.DemonGemsSocket.GemsAPI;
+import me.Demon.DemonGemsSocket.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GemRemove implements Listener {
+
+ @EventHandler
+ public void onclick(InventoryClickEvent e) {
+ Player p = (Player) e.getWhoClicked();
+ Inventory inv = e.getInventory();
+ if (inv != null && "战争领域 - 宝石拆除台".equalsIgnoreCase(inv.getTitle())) {
+ int slot = e.getRawSlot();
+ ItemStack click_item = e.getCurrentItem();
+ if (slot >= 0 && slot < 27) {
+ e.setCancelled(true);
+ if (slot == 20) {
+ if (click_item.getTypeId() == 160) {
+ ItemStack item = e.getCursor();
+ if (!Main.itemIsNull(item) && !Main.itemIsLore(item)) {
+ inv.setItem(slot, item);
+ e.setCursor(new ItemStack(Material.AIR));
+ setCheckGem(inv, item);
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, (float) 0.6, (float) 1.8);
+ } else {
+ p.sendMessage(Main.prefix + "该物品无法放入槽位中.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ }
+ } else {
+ if (!Main.itemIsNull(e.getCursor())) {
+ p.sendMessage(Main.prefix + "请将物品槽中的物品取出后再放入.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ return;
+ }
+ for (int i = 0; i < 9; i++) {
+ e.getInventory().setItem(i, glass(0, "§7[§c宝石槽§7]"));
+ }
+ e.setCursor(e.getCurrentItem());
+ e.getInventory().setItem(slot, glass(0, "§7[§6装备槽§7]"));
+ p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, (float) 0.6, (float) 1.8);
+ }
+ }
+ if (slot == 24) {
+ if (click_item.getTypeId() == 160) {
+ ItemStack item = e.getCursor();
+ if (!Main.itemIsNull(item) && !Main.itemIsLore(item)) {
+ ItemMeta meta = item.getItemMeta();
+ if (!meta.getDisplayName().contains("拆除器")) {
+ p.sendMessage(Main.prefix + "该槽位只能放入宝石拆除器.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ return;
+ }
+ inv.setItem(slot, item);
+ e.setCursor(new ItemStack(Material.AIR));
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, (float) 0.6, (float) 1.8);
+ } else {
+ p.sendMessage(Main.prefix + "该物品无法放入槽位中.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ }
+ } else {
+ if (!Main.itemIsNull(e.getCursor())) {
+ p.sendMessage(Main.prefix + "请将物品槽中的物品取出后再放入.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ return;
+ }
+ e.setCursor(e.getCurrentItem());
+ e.getInventory().setItem(slot, glass(0, "§7[§6拆除器§7]"));
+ p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, (float) 0.6, (float) 1.8);
+ }
+ }
+ if (slot < 9) {
+ ItemStack item = e.getCurrentItem();
+ if (!Main.itemIsLore(item)) {
+ // 获取拆除槽物品是否存在.
+ ItemStack chaichu = inv.getItem(24);
+ if (Main.itemIsNull(chaichu) || Main.itemIsLore(chaichu)) {
+ p.sendMessage(Main.prefix + "拆除失败,你需要放一个拆除器.");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ return;
+ }
+ int type = 1;
+ if (chaichu.getItemMeta().getLore().contains("§e▶ §7成功几率: §a100%")) {
+ type = 2;
+ }
+ if (type == 1) {
+ if (Main.getRandomInt(100, 1) >= 35) {
+ inv.setItem(24, glass(0, "§7[§6拆除器§7]"));
+ p.sendMessage(Main.prefix + "拆除失败,损失了一个 §7[§e宝石§7]§d小黑子拆除器");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, (float) 0.6, (float) 1.8);
+ return;
+ }
+ }
+ // 设置玩家物品的lore为空
+ ItemStack zb_item = inv.getItem(20).clone();
+ ItemMeta zb_meta = zb_item.getItemMeta();
+ int line = Integer.parseInt(item.getItemMeta().getDisplayName().split("§8#")[1]);
+ List lore = zb_meta.getLore();
+ lore.set(line, Main.EmptyLore);
+ zb_meta.setLore(lore);
+ zb_item.setItemMeta(zb_meta);
+ inv.setItem(20, zb_item);
+ // 给予玩家宝石
+ ItemStack gem_item = recoverGemItems(e.getCurrentItem());
+ p.getInventory().addItem(gem_item);
+ // 执行拆除成功的操作
+ inv.setItem(slot, glass(0, "§7[§c宝石槽§7]"));
+ inv.setItem(24, glass(0, "§7[§6拆除器§7]"));
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, (float) 0.6, (float) 1.8);
+ }
+ }
+ }
+ }
+ }
+
+ public static ItemStack recoverGemItems(ItemStack items) {
+ ItemStack item = items.clone();
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(meta.getDisplayName().split("§8#")[0]);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ public static void setCheckGem(Inventory inv, ItemStack item) {
+ List gemList = getGemCheckList(item);
+ if (gemList.size() >= 1) {
+ for (int i = 0; i < gemList.size(); i++) {
+ String gemKey = gemList.get(i).split("#")[0];
+ String line = gemList.get(i).split("#")[1];
+ ItemStack gem_item = GemsAPI.getItems(gemKey);
+ ItemMeta meta = gem_item.getItemMeta();
+ meta.setDisplayName(meta.getDisplayName() + "§8#" + line);
+ gem_item.setItemMeta(meta);
+ inv.setItem(i, gem_item);
+ }
+ }
+ }
+
+ public static List getGemCheckList(ItemStack item) {
+ ItemMeta meta = item.getItemMeta();
+ List lore = meta.getLore();
+ List GemList = new ArrayList<>();
+ for (int i = 0; i < lore.size(); i++) {
+ String s = lore.get(i);
+ if (s.startsWith("§1§6§r§8- §8< ")) {
+ if (Main.GemHashMap.get(s) != null) {
+ String GemKey = Main.GemHashMap.get(s);
+ GemList.add(GemKey + "#" + i);
+ }
+ }
+ }
+ return GemList;
+ }
+
+ public static void OpenGui(Player p) {
+ Inventory inv = Bukkit.createInventory(null, 27, "战争领域 - 宝石拆除台");
+ for (int i = 0; i < 9; i++) {
+ inv.setItem(i, glass(0, "§7[§c宝石槽§7]"));
+ }
+ for (int i = 9; i < 27; i++) {
+ inv.setItem(i, glass(15, "§r"));
+ }
+ inv.setItem(19, glass(4, "§7[[§a▧▧§7]]"));
+ inv.setItem(20, glass(0, "§7[§6装备槽§7]"));
+ inv.setItem(21, glass(4, "§7[[§a▧▧§7]]"));
+
+ inv.setItem(25, glass(1, "§7[[§a▧▧§7]]"));
+ inv.setItem(24, glass(0, "§7[§6拆除器§7]"));
+ inv.setItem(23, glass(1, "§7[[§a▧▧§7]]"));
+ p.openInventory(inv);
+ }
+
+
+ public static ItemStack glass(int data, String name) {
+ ItemStack item = new ItemStack(160, 1, (short) data);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(name);
+ item.setItemMeta(meta);
+ return item;
+ }
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGui.java b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGui.java
new file mode 100644
index 0000000..6498030
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGui.java
@@ -0,0 +1,73 @@
+package me.Demon.DemonGemsSocket.listener;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GemsGui {
+
+ public static void OpenGui(Player p,ItemStack gems_Items){
+ Inventory inv = Bukkit.createInventory(null,27,"§9§l宝石镶嵌系统");
+ for (int i = 0; i < 27;i++){
+ inv.setItem(i,glass(15,"§8§l[§e§l!§8§l]"));
+ }
+ inv.setItem(1,sign_show("物品信息","§7将装备放置下方槽位"));
+ inv.setItem(2,sign_show("镶嵌宝石","§7将宝石放置下方槽位"));
+ inv.setItem(10,glass(0,"§7[§6请放入装备§7]"));
+ inv.setItem(11,gems_Items);
+ inv.setItem(16,ok_butt());
+ inv.setItem(15,sign_show("温馨提示","§c宝石镶嵌后无法取出"));
+ inv.setItem(14,no_butt());
+ p.openInventory(inv);
+ }
+
+ public static ItemStack ok_butt(){
+ ItemStack item = new ItemStack(Material.WOOL,1,(short)13);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName("§8§m §r");
+ List lore = new ArrayList<>();
+ lore.add("§8§l[ §a§l确认操作 §8§l]");
+ lore.add("§8§m §r");
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ public static ItemStack no_butt(){
+ ItemStack item = new ItemStack(Material.WOOL,1,(short)14);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName("§8§m §r");
+ List lore = new ArrayList<>();
+ lore.add("§8§l[ §c§l取消操作 §8§l]");
+ lore.add("§8§m §r");
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ public static ItemStack sign_show(String name,String info){
+ ItemStack item = new ItemStack(Material.SIGN);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName("§8[§a"+name+"§8]");
+ List lore = new ArrayList<>();
+ lore.add("§3§m §r");
+ lore.add(info);
+ meta.setLore(lore);
+ item.setItemMeta(meta);
+ return item;
+ }
+
+ public static ItemStack glass(int data,String name){
+ ItemStack item = new ItemStack(160,1,(short) data);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(name);
+ item.setItemMeta(meta);
+ return item;
+ }
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiClose.java b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiClose.java
new file mode 100644
index 0000000..78763db
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiClose.java
@@ -0,0 +1,27 @@
+package me.Demon.DemonGemsSocket.listener;
+
+import me.Demon.DemonGemsSocket.Main;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.inventory.Inventory;
+
+public class GemsGuiClose implements Listener {
+
+
+ @EventHandler
+ public void onclose(InventoryCloseEvent e) {
+ Player p = (Player) e.getPlayer();
+ Inventory inv = e.getInventory();
+ if (inv != null && inv.getTitle().equalsIgnoreCase("§9§l宝石镶嵌系统")) {
+ if(!Main.itemIsNull(inv.getItem(10)) && !Main.itemIsLore(inv.getItem(10))){
+ p.getInventory().addItem(inv.getItem(10));
+ }
+ if(!Main.itemIsNull(inv.getItem(11)) && !Main.itemIsLore(inv.getItem(11))){
+ p.getInventory().addItem(inv.getItem(11));
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiEvent.java b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiEvent.java
new file mode 100644
index 0000000..4260f53
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsGuiEvent.java
@@ -0,0 +1,136 @@
+package me.Demon.DemonGemsSocket.listener;
+
+import me.Demon.DemonGemsSocket.GemsAPI;
+import me.Demon.DemonGemsSocket.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GemsGuiEvent implements Listener {
+
+ @EventHandler
+ public void onGemsGuiClick(InventoryClickEvent e) {
+ Player p = (Player) e.getWhoClicked();
+ Inventory inv = e.getInventory();
+ if (e.getInventory() != null && inv.getTitle().equalsIgnoreCase("§9§l宝石镶嵌系统")) {
+ e.setCancelled(true);
+ if (e.getRawSlot() >= inv.getSize()) {
+ ItemStack item = e.getCurrentItem();
+ if (!Main.itemIsNull(item) && !Main.itemIsLore(item)) {
+ ItemMeta meta = item.getItemMeta();
+ if (meta.getLore().contains(Main.EmptyLore)) {
+ inv.setItem(10, item);
+ e.setCurrentItem(new ItemStack(Material.AIR));
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ } else {
+ p.sendMessage(Main.prefix + "镶嵌失败,该物品没有可以空余宝石槽。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ }
+ }
+ }
+ if (e.getRawSlot() == 10) {
+ if (!Main.itemIsLore(e.getCurrentItem())) {
+ p.getInventory().addItem(e.getCurrentItem());
+ inv.setItem(10, GemsGui.glass(0, "§7[§6请放入装备§7]"));
+ p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 2);
+ }
+ }
+ if (e.getRawSlot() == 16) {
+ ItemStack item = inv.getItem(10).clone();
+ if (Main.itemIsLore(item) || !item.getItemMeta().getLore().contains(Main.EmptyLore)) {
+ p.sendMessage(Main.prefix + "镶嵌失败,该物品没有可以空余宝石槽。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ ItemStack gems = inv.getItem(11).clone();
+ if (GemsAPI.getGems_Key(gems) == null) {
+ p.sendMessage(Main.prefix + "宝石配置出现错误,请联系管理员。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ String Gems_Key = GemsAPI.getGems_Key(gems);
+ if (GemsAPI.gettype(Gems_Key).equalsIgnoreCase("Armor")) {
+ if (!isArmor(item)) {
+ p.sendMessage(Main.prefix + "镶嵌失败,这是一颗防具宝石。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ } else if (GemsAPI.gettype(Gems_Key).equalsIgnoreCase("Weapon")) {
+ if (isArmor(item)) {
+ p.sendMessage(Main.prefix + "镶嵌失败,这是一颗武器宝石。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ }
+ int chance = GemsAPI.getchance(Gems_Key);
+ String replore = "§1§6§r§8- §8< " + GemsAPI.getname(Gems_Key) + " §8>§1§6§r";
+ if (gems.getItemMeta().getLore().contains("§e▶ §7神护: §a§l✔")) {
+ GemsXiruEvant(inv, p, item, replore);
+ return;
+ }
+ if (Main.getRandomInt(100, 1) < chance) {
+ GemsXiruEvant(inv, p, item, replore);
+ } else {
+ inv.setItem(11, GemsGui.glass(15, "板子"));
+ p.sendMessage(Main.prefix + "镶嵌失败,不要灰心继续努力!下一个会成功镶嵌的!");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ p.closeInventory();
+ }
+ }
+ if (e.getRawSlot() == 14) {
+ p.closeInventory();
+ p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 2);
+ }
+ }
+ }
+
+ public static void GemsXiruEvant(Inventory inv, Player p, ItemStack item, String replore) {
+ inv.setItem(10, GemsGui.glass(15, "板子"));
+ inv.setItem(11, GemsGui.glass(15, "板子"));
+ p.closeInventory();
+ p.getInventory().addItem(AddGemsItemsEvant(item, replore));
+ p.sendMessage(Main.prefix + "镶嵌成功,装备已自动回到背包中。");
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ }
+
+ public static ItemStack AddGemsItemsEvant(ItemStack item, String replore) {
+ ItemStack items = item.clone();
+ ItemMeta meta = items.getItemMeta();
+ List lore = meta.getLore();
+ for (int i = 0; i < lore.size(); i++) {
+ String s = lore.get(i);
+ if (s.contains(Main.EmptyLore)) {
+ lore.set(i, replore);
+ break;
+ }
+ }
+ meta.setLore(lore);
+ items.setItemMeta(meta);
+ return items;
+ }
+
+ //判断物品是否是防具
+ public static boolean isArmor(ItemStack item) {
+ Material material = item.getType();
+ if (material.name().contains("_HELMET")) {
+ return true;
+ } else if (material.name().contains("_CHESTPLATE")) {
+ return true;
+ } else if (material.name().contains("_LEGGINGS")) {
+ return true;
+ } else if (material.name().contains("_BOOTS")) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/me/Demon/DemonGemsSocket/listener/GemsOpen.java b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsOpen.java
new file mode 100644
index 0000000..5289e9e
--- /dev/null
+++ b/src/main/java/me/Demon/DemonGemsSocket/listener/GemsOpen.java
@@ -0,0 +1,43 @@
+package me.Demon.DemonGemsSocket.listener;
+
+import me.Demon.DemonGemsSocket.GemsAPI;
+import me.Demon.DemonGemsSocket.Main;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryType;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
+
+public class GemsOpen implements Listener {
+
+ @EventHandler
+ public void onClickGems(PlayerInteractEvent e){
+ Player p = e.getPlayer();
+ ItemStack item = p.getItemInHand();
+ if(!Main.itemIsNull(item) && !Main.itemIsLore(item)){
+ ItemMeta meta = item.getItemMeta();
+ if(meta.getLore().contains("§c提示: §7手持宝石右键镶嵌")){
+ if(item.getAmount() >= 2) {
+ p.sendMessage(Main.prefix + "镶嵌失败,每次最多镶嵌一颗宝石。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ if (GemsAPI.getGems_Key(item) == null) {
+ p.sendMessage(Main.prefix + "宝石配置出现错误,请联系管理员。");
+ p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1, 2);
+ return;
+ }
+ GemsGui.OpenGui(p, item);
+ p.getInventory().setItemInHand(new ItemStack(Material.AIR));
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 2);
+ }
+ }
+ }
+
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..1630467
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,106 @@
+Games:
+ 红宝石1:
+ chance: 80.0
+ name: §c红宝石 §cI
+ sxLore: "§1§6§r§8- §8< %name% §8>§1§6§r"
+Items:
+ 红宝石1:
+ ==: org.bukkit.inventory.ItemStack
+ type: INK_SACK
+ damage: 1
+ meta:
+ ==: ItemMeta
+ meta-type: UNSPECIFIC
+ display-name: §c红宝石 §cI
+ lore:
+ - "§8§l§m-----------------------"
+ - "§e▶ §7种类: §f宝石"
+ - "§e▶ §7神护: §c§l✘"
+ - "§e▶ §7适合物品: §f武器"
+ - "§e▶ §7成功几率: §a80%"
+ - "§8§l§m-----------------------"
+ - "§8§l[§4§l!§8§l] §7宝石效果:"
+ - "§6§l» §7增加§c攻击伤害 §f+4"
+ - ""
+ - "§c提示: §7打开背包,拿起宝石"
+ - "§7然后放在要镶嵌的物品上"
+ 红宝石2:
+ ==: org.bukkit.inventory.ItemStack
+ type: INK_SACK
+ damage: 1
+ meta:
+ ==: ItemMeta
+ meta-type: UNSPECIFIC
+ display-name: §c红宝石 §cII
+ lore:
+ - "§8§l§m-----------------------"
+ - "§e▶ §7种类: §f宝石"
+ - "§e▶ §7神护: §c§l✘"
+ - "§e▶ §7适合物品: §f武器"
+ - "§e▶ §7成功几率: §a68%"
+ - "§8§l§m-----------------------"
+ - "§8§l[§4§l!§8§l] §7宝石效果:"
+ - "§6§l» §7增加§c攻击伤害 §f+6"
+ - ""
+ - "§c提示: §7打开背包,拿起宝石"
+ - "§7然后放在要镶嵌的物品上"
+ 红宝石3:
+ ==: org.bukkit.inventory.ItemStack
+ type: INK_SACK
+ damage: 1
+ meta:
+ ==: ItemMeta
+ meta-type: UNSPECIFIC
+ display-name: §c红宝石 §cIII
+ lore:
+ - "§8§l§m-----------------------"
+ - "§e▶ §7种类: §f宝石"
+ - "§e▶ §7神护: §c§l✘"
+ - "§e▶ §7适合物品: §f武器"
+ - "§e▶ §7成功几率: §a56%"
+ - "§8§l§m-----------------------"
+ - "§8§l[§4§l!§8§l] §7宝石效果:"
+ - "§6§l» §7增加§c攻击伤害 §f+8"
+ - ""
+ - "§c提示: §7打开背包,拿起宝石"
+ - "§7然后放在要镶嵌的物品上"
+ 红宝石4:
+ ==: org.bukkit.inventory.ItemStack
+ type: INK_SACK
+ damage: 1
+ meta:
+ ==: ItemMeta
+ meta-type: UNSPECIFIC
+ display-name: §c红宝石 §cIV
+ lore:
+ - "§8§l§m-----------------------"
+ - "§e▶ §7种类: §f宝石"
+ - "§e▶ §7神护: §c§l✘"
+ - "§e▶ §7适合物品: §f武器"
+ - "§e▶ §7成功几率: §a44%"
+ - "§8§l§m-----------------------"
+ - "§8§l[§4§l!§8§l] §7宝石效果:"
+ - "§6§l» §7增加§c攻击伤害 §f+12"
+ - ""
+ - "§c提示: §7打开背包,拿起宝石"
+ - "§7然后放在要镶嵌的物品上"
+ 红宝石5:
+ ==: org.bukkit.inventory.ItemStack
+ type: INK_SACK
+ damage: 1
+ meta:
+ ==: ItemMeta
+ meta-type: UNSPECIFIC
+ display-name: §c红宝石 §cV
+ lore:
+ - "§8§l§m-----------------------"
+ - "§e▶ §7种类: §f宝石"
+ - "§e▶ §7神护: §c§l✘"
+ - "§e▶ §7适合物品: §f武器"
+ - "§e▶ §7成功几率: §a44%"
+ - "§8§l§m-----------------------"
+ - "§8§l[§4§l!§8§l] §7宝石效果:"
+ - "§6§l» §7增加§c攻击伤害 §f+16"
+ - ""
+ - "§c提示: §7打开背包,拿起宝石"
+ - "§7然后放在要镶嵌的物品上"
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..8708f9c
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,6 @@
+name: DemonGemsSocket
+main: me.Demon.DemonGemsSocket.Main
+version: 2.0.3
+commands:
+ socketpro:
+#socket load Gems 翡翠宝石
\ No newline at end of file