diff --git a/pom.xml b/pom.xml index f3a02a4..a104184 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ cn.lunadeer MinecraftPluginUtils - 1.3.0-SNAPSHOT + 1.3.1-SNAPSHOT com.github.BlueMap-Minecraft @@ -90,11 +90,5 @@ v2.6.2 provided - - com.github.MilkBowl - VaultAPI - 1.7 - provided - diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 8f0d86f..ce65544 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -4,10 +4,10 @@ import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; import cn.lunadeer.minecraftpluginutils.Scheduler; import cn.lunadeer.minecraftpluginutils.XLogger; -import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -143,7 +143,7 @@ public class Cache { // Notification.info(player, "您已离开子领地:%s", last_dominion.getName()); String msg = last_dominion.getLeaveMessage(); msg = msg.replace("${DOM_NAME}", last_dominion.getName()); - player.sendActionBar(Component.text(msg)); + Notification.actionBar(player, msg); } if (current_dom_id != -1) { // if (current_dominion.getParentDomId() == -1) @@ -152,7 +152,7 @@ public class Cache { // Notification.info(player, "您正在进入子领地:%s", current_dominion.getName()); String msg = current_dominion.getJoinMessage(); msg = msg.replace("${DOM_NAME}", current_dominion.getName()); - player.sendActionBar(Component.text(msg)); + Notification.actionBar(player, msg); } lightOrNot(player, current_dominion); // 发光检查 diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index e9ec8e8..03878ae 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -37,14 +37,7 @@ public final class Dominion extends JavaPlugin { new Scheduler(this); AutoClean.run(); Cache.instance = new Cache(); - - if (config.getEconomyEnable()) { - vault = new VaultConnect(this); - if (vault.getEconomy() == null) { - XLogger.err("你没有安装 Vault 前置插件,无法使用经济功能。"); - config.setEconomyEnable(false); - } - } + new VaultConnect(this); Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this); Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this); @@ -63,7 +56,7 @@ public final class Dominion extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new CuiManager(this), this); XLogger.info("领地插件已启动"); - XLogger.info("版本:" + this.getPluginMeta().getVersion()); + XLogger.info("版本:" + this.getDescription().getVersion()); // http://patorjk.com/software/taag/#p=display&f=Big&t=Dominion XLogger.info(" _____ _ _"); XLogger.info(" | __ \\ (_) (_)"); @@ -79,6 +72,7 @@ public final class Dominion extends JavaPlugin { @Override public void onDisable() { // Plugin shutdown logic + database.close(); } public static Dominion instance; @@ -86,5 +80,4 @@ public final class Dominion extends JavaPlugin { public static DatabaseManager database; public static Map> pointsSelect = new HashMap<>(); private GiteaReleaseCheck giteaReleaseCheck; - public static VaultConnect vault; } diff --git a/src/main/java/cn/lunadeer/dominion/VaultConnect.java b/src/main/java/cn/lunadeer/dominion/VaultConnect.java deleted file mode 100644 index aad388e..0000000 --- a/src/main/java/cn/lunadeer/dominion/VaultConnect.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.lunadeer.dominion; - -import cn.lunadeer.minecraftpluginutils.XLogger; -import net.milkbowl.vault.chat.Chat; -import net.milkbowl.vault.economy.Economy; -import net.milkbowl.vault.permission.Permission; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; - -public class VaultConnect { - - private Economy econ = null; - private Permission perms = null; - private Chat chat = null; - private JavaPlugin plugin; - - public VaultConnect(JavaPlugin plugin) { - this.plugin = plugin; - if (!setupEconomy()) { - XLogger.err("你没有安装 Vault 前置插件,无法使用经济功能,如果不需要使用经济功能请前往配置文件关闭。"); - return; - } - setupPermissions(); - setupChat(); - } - - private boolean setupEconomy() { - if (plugin.getServer().getPluginManager().getPlugin("Vault") == null) { - return false; - } - RegisteredServiceProvider rsp = plugin.getServer().getServicesManager().getRegistration(Economy.class); - if (rsp == null) { - return false; - } - econ = rsp.getProvider(); - return econ != null; - } - - private boolean setupChat() { - RegisteredServiceProvider rsp = plugin.getServer().getServicesManager().getRegistration(Chat.class); - chat = rsp.getProvider(); - return chat != null; - } - - private boolean setupPermissions() { - RegisteredServiceProvider rsp = plugin.getServer().getServicesManager().getRegistration(Permission.class); - perms = rsp.getProvider(); - return perms != null; - } - - public Economy getEconomy() { - return econ; - } - - public Permission getPermissions() { - return perms; - } - - public Chat getChat() { - return chat; - } -} diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index 8ed97cc..ca0a874 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -6,6 +6,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; +import cn.lunadeer.minecraftpluginutils.VaultConnect; import cn.lunadeer.minecraftpluginutils.XLogger; import org.bukkit.Location; import org.bukkit.World; @@ -143,6 +144,10 @@ public class DominionController { } // 检查经济 if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); + return; + } int count; if (Dominion.config.getEconomyOnlyXZ()) { count = dominion.getSquare(); @@ -150,12 +155,12 @@ public class DominionController { count = dominion.getVolume(); } float price = count * Dominion.config.getEconomyPrice(); - if (Dominion.vault.getEconomy().getBalance(operator.getPlayer()) < price) { - operator.setResponse(FAIL.addMessage("你的余额不足,创建此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural())); + if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) { + operator.setResponse(FAIL.addMessage("你的余额不足,创建此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); return; } - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural())); - Dominion.vault.getEconomy().withdrawPlayer(operator.getPlayer(), price); + operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); + VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price); } dominion = DominionDTO.insert(dominion); if (dominion == null) { @@ -264,6 +269,10 @@ public class DominionController { AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size); // 检查经济 if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); + return; + } int count; if (Dominion.config.getEconomyOnlyXZ()) { count = (x2 - x1 + 1) * (z2 - z1 + 1) - dominion.getSquare(); @@ -271,12 +280,12 @@ public class DominionController { count = (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1) - dominion.getVolume(); } float price = count * Dominion.config.getEconomyPrice(); - if (Dominion.vault.getEconomy().getBalance(operator.getPlayer()) < price) { - operator.setResponse(FAIL.addMessage("你的余额不足,扩展此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural())); + if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) { + operator.setResponse(FAIL.addMessage("你的余额不足,扩展此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); return; } - SUCCESS.addMessage("已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural()); - Dominion.vault.getEconomy().withdrawPlayer(operator.getPlayer(), price); + SUCCESS.addMessage("已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural()); + VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price); } if (operator instanceof BukkitPlayerOperator) { World world = Dominion.instance.getServer().getWorld(dominion.getWorld()); @@ -376,6 +385,10 @@ public class DominionController { AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size); // 退还经济 if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); + return; + } int count; if (Dominion.config.getEconomyOnlyXZ()) { count = dominion.getSquare() - (x2 - x1 + 1) * (z2 - z1 + 1); @@ -383,8 +396,8 @@ public class DominionController { count = dominion.getVolume() - (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1); } float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund(); - Dominion.vault.getEconomy().depositPlayer(operator.getPlayer(), refund); - SUCCESS.addMessage("已退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural()); + VaultConnect.instance.depositPlayer(operator.getPlayer(), refund); + SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural()); } if (operator instanceof BukkitPlayerOperator) { World world = Dominion.instance.getServer().getWorld(dominion.getWorld()); @@ -429,6 +442,10 @@ public class DominionController { AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name); // 退还经济 if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "退款失败,没有可用的经济插件系统,请联系服主。")); + return; + } int count = 0; if (Dominion.config.getEconomyOnlyXZ()) { for (DominionDTO sub_dominion : sub_dominions) { @@ -440,8 +457,8 @@ public class DominionController { } } float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund(); - Dominion.vault.getEconomy().depositPlayer(operator.getPlayer(), refund); - SUCCESS.addMessage("已退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural()); + VaultConnect.instance.depositPlayer(operator.getPlayer(), refund); + SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural()); } operator.setResponse(SUCCESS); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java index b76316c..b491d33 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -27,8 +27,8 @@ public enum Flag { CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true), CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true), COMPARER("comparer", "比较器交互", "是否可以与比较器交互", false, false, true), - DOOR("door", "门交互", "是否可以使用各种材质的门", false, false, true), - DYE("dye", "染色", "是否可以使用染料染色", false, false, true), + DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true), + DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true), EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true), ENCHANT("enchant", "使用附魔台", "是否可以使用附魔台", false, false, true), ENDER_MAN("ender_man", "末影人行为", "包含:末影人是否可以生成、瞬移", false, true, true), diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java index de0d395..1d1a8e6 100644 --- a/src/main/java/cn/lunadeer/dominion/events/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -63,8 +63,7 @@ public class Apis { String.format("你没有 %s (%s) 权限", flag.getDisplayName(), flag.getDescription()), Style.style(TextColor.color(0xFF0000), TextDecoration.BOLD)) .hoverEvent(Component.text(flag.getDescription())); - // Notification.error(player, msg); - player.sendActionBar(msg); + Notification.actionBar(player, msg); if (event != null) { event.setCancelled(true); } diff --git a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java index 2afcce7..02942d4 100644 --- a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -3,7 +3,6 @@ package cn.lunadeer.dominion.events; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; -import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.*; @@ -16,6 +15,7 @@ import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerInteractEvent; import java.util.Objects; @@ -133,8 +133,11 @@ public class EnvironmentEvents implements Listener { } @EventHandler(priority = EventPriority.HIGHEST) // ender_man escape - public void onEnderManEscape(EndermanEscapeEvent event) { + public void onEnderManEscape(EntityTeleportEvent event) { Entity entity = event.getEntity(); + if (entity.getType() != EntityType.ENDERMAN) { + return; + } DominionDTO dom = Cache.instance.getDominion(entity.getLocation()); checkFlag(dom, Flag.ENDER_MAN, event); } diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 631f6e9..6e26275 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -6,7 +6,6 @@ import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Teleport; -import io.papermc.paper.event.entity.EntityDyeEvent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -338,12 +337,15 @@ public class PlayerEvents implements Listener { } @EventHandler(priority = EventPriority.HIGHEST) // dye - public void dyeEvent(EntityDyeEvent event) { + public void dyeEvent(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); - if (player == null) { + Entity entity = event.getRightClicked(); + if (!(entity instanceof Sheep) + && !(entity instanceof Wolf) + && !(entity instanceof Cat)) { return; } - DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation()); + DominionDTO dom = Cache.instance.getDominion(entity.getLocation()); checkFlag(dom, Flag.DYE, player, event); } diff --git a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java index a7cf062..9a036b9 100644 --- a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java @@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; +import cn.lunadeer.minecraftpluginutils.VaultConnect; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; @@ -75,6 +76,10 @@ public class SelectPointEvents implements Listener { DominionDTO dominion = new DominionDTO(player.getUniqueId(), "", loc1.getWorld().getName(), minX, minY, minZ, maxX, maxY, maxZ); if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + Notification.error(player, "计算价格失败,没有可用的经济插件系统,请联系服主。"); + return; + } int count; if (Dominion.config.getEconomyOnlyXZ()) { count = dominion.getSquare(); @@ -82,7 +87,7 @@ public class SelectPointEvents implements Listener { count = dominion.getVolume(); } float price = count * Dominion.config.getEconomyPrice(); - Notification.info(player, "预计领地创建价格为 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural()); + Notification.info(player, "预计领地创建价格为 %.2f %s", price, VaultConnect.instance.currencyNamePlural()); } ParticleRender.showBoxFace(Dominion.instance, player, loc1, loc2); Notification.info(player, "尺寸: %d x %d x %d", dominion.getWidthX(), dominion.getHeight(), dominion.getWidthZ()); diff --git a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java index 5c16559..a5a225a 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java +++ b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java @@ -351,6 +351,8 @@ public class ConfigManager { public void setEconomyEnable(Boolean economy_enable) { _economy_enable = economy_enable; + _file.set("Economy.Enable", economy_enable); + _plugin.saveConfig(); } public Float getEconomyPrice() { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 343f455..6aa760a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,8 @@ main: cn.lunadeer.dominion.Dominion api-version: '1.20' load: STARTUP folia-supported: true +loadbefore: + - Vault commands: Dominion: description: 领地插件命令