diff --git a/src/main/java/net/momirealms/customcrops/ConfigReader.java b/src/main/java/net/momirealms/customcrops/ConfigReader.java index bef1247..81d9cdd 100644 --- a/src/main/java/net/momirealms/customcrops/ConfigReader.java +++ b/src/main/java/net/momirealms/customcrops/ConfigReader.java @@ -188,6 +188,14 @@ public class ConfigReader { AdventureManager.consoleMessage("[CustomCrops] 已启用 PlotSquared 保护!"); } } + if(config.getBoolean("config.integration.Towny",false)){ + if(Bukkit.getPluginManager().getPlugin("Towny") == null){ + CustomCrops.instance.getLogger().warning("未检测到插件 Towny!"); + }else { + integration.add(new Towny()); + AdventureManager.consoleMessage("[CustomCrops] 已启用 Towny 保护!"); + } + } } } @@ -304,6 +312,7 @@ public class ConfigReader { public static String setSeason; public static String wrongArgs; public static String forceSave; + public static String noSeason; public static boolean hasCropInfo; public static boolean hasSprinklerInfo; public static boolean hasWaterInfo; @@ -347,6 +356,7 @@ public class ConfigReader { wrongArgs = config.getString("messages.wrong-args"); forceSave = config.getString("messages.force-save"); beforePlant = config.getString("messages.before-plant"); + noSeason = config.getString("messages.no-season","当前世界没有季节"); hasCropInfo = config.getBoolean("hologram.grow-info.enable"); if (hasCropInfo){ diff --git a/src/main/java/net/momirealms/customcrops/CustomCrops.java b/src/main/java/net/momirealms/customcrops/CustomCrops.java index f911381..aa26907 100644 --- a/src/main/java/net/momirealms/customcrops/CustomCrops.java +++ b/src/main/java/net/momirealms/customcrops/CustomCrops.java @@ -79,10 +79,12 @@ public final class CustomCrops extends JavaPlugin { this.potManager = new PotManager(this); this.potManager.loadData(); - NBTItem nbtItem = new NBTItem(new ItemStack(Material.WHEAT)); - //启动完成 AdventureManager.consoleMessage("[CustomCrops] 插件已加载!作者:小默米 QQ:3266959688"); + + NBTItem nbtItem = new NBTItem(new ItemStack(Material.WHEAT)); + nbtItem.getItem(); + } @Override diff --git a/src/main/java/net/momirealms/customcrops/integrations/Towny.java b/src/main/java/net/momirealms/customcrops/integrations/Towny.java new file mode 100644 index 0000000..5e5f402 --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/integrations/Towny.java @@ -0,0 +1,23 @@ +package net.momirealms.customcrops.integrations; + +import com.palmergames.bukkit.towny.object.TownyPermission; +import com.palmergames.bukkit.towny.utils.PlayerCacheUtil; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class Towny implements Integration{ + + @Override + public boolean canBreak(Location location, Player player) { + return TownyPermission(player, location, TownyPermission.ActionType.DESTROY); + } + + @Override + public boolean canPlace(Location location, Player player) { + return TownyPermission(player, location, TownyPermission.ActionType.BUILD); + } + + private boolean TownyPermission(Player player, Location location, TownyPermission.ActionType actionType){ + return PlayerCacheUtil.getCachePermission(player, location, location.getBlock().getType(), actionType); + } +} diff --git a/src/main/java/net/momirealms/customcrops/integrations/WorldGuard.java b/src/main/java/net/momirealms/customcrops/integrations/WorldGuard.java index 3f7e3dc..2f245ff 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/WorldGuard.java +++ b/src/main/java/net/momirealms/customcrops/integrations/WorldGuard.java @@ -1,10 +1,13 @@ package net.momirealms.customcrops.integrations; import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionQuery; import org.bukkit.Location; @@ -15,11 +18,11 @@ public record WorldGuard() implements Integration { @Override public boolean canPlace(Location location, Player player) { LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - RegionContainer container = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform().getRegionContainer(); - RegionQuery query = container.createQuery(); - ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); - if (set != null){ - return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD); + World world = BukkitAdapter.adapt(location.getWorld()); + WorldGuardPlatform platform = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform(); + if (hasRegion(world, BukkitAdapter.asBlockVector(location))){ + RegionQuery query = platform.getRegionContainer().createQuery(); + return query.testBuild(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD); }else { return true; } @@ -28,13 +31,20 @@ public record WorldGuard() implements Integration { @Override public boolean canBreak(Location location, Player player) { LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - RegionContainer container = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform().getRegionContainer(); - RegionQuery query = container.createQuery(); - ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); - if (set != null){ - return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK); + World world = BukkitAdapter.adapt(location.getWorld()); + WorldGuardPlatform platform = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform(); + if (hasRegion(world, BukkitAdapter.asBlockVector(location))){ + RegionQuery query = platform.getRegionContainer().createQuery(); + return query.testBuild(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK); }else { return true; } } + + private boolean hasRegion(World world, BlockVector3 vector){ + RegionContainer container = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionManager regionManager = container.get(world); + if (regionManager == null) return true; + return regionManager.getApplicableRegions(vector).size() > 0; + } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customcrops/utils/Placeholders.java b/src/main/java/net/momirealms/customcrops/utils/Placeholders.java index 5a6e375..fd430d7 100644 --- a/src/main/java/net/momirealms/customcrops/utils/Placeholders.java +++ b/src/main/java/net/momirealms/customcrops/utils/Placeholders.java @@ -7,6 +7,8 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; +import java.util.Optional; + public class Placeholders extends PlaceholderExpansion{ @Override @@ -27,7 +29,7 @@ public class Placeholders extends PlaceholderExpansion{ @Override public String onRequest(OfflinePlayer player, String params) { if (params.equalsIgnoreCase("season")){ - return SeasonManager.SEASON.get(player.getPlayer().getWorld().getName()) + return Optional.ofNullable(SeasonManager.SEASON.get(player.getPlayer().getWorld().getName())).orElse(ConfigReader.Message.noSeason) .replace("spring", ConfigReader.Message.spring) .replace("summer", ConfigReader.Message.summer) .replace("autumn", ConfigReader.Message.autumn) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 86489cb..ac7ba2c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,9 +9,10 @@ config: Kingdoms: false #信任的玩家可以收获、浇水和种植 GriefDefender: false - #拥有地皮权限的玩家可以收获、浇水和种植 + #拥有plot add的玩家可以收获、浇水和种植 PlotSquared: false - + #拥有Town权限的玩家可以收获、浇水和种植 + Towny: false #生长时间点(tick) #洒水器将会在农作物全部完成生长后开始工作 diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 7254dd9..1b22a55 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -24,6 +24,7 @@ messages: back-up: '已完成数据备份!' set-season: '成功切换世界 {world} 的季节为 {season}!' before-plant: '这种肥料必须在种植前使用!' + no-season: '当前世界没有季节' #全息信息显示 hologram: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2f5d392..1b76671 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: CustomCrops -version: '1.5.1' +version: '1.5.3' main: net.momirealms.customcrops.CustomCrops api-version: 1.16 depend: