9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2025-12-22 16:39:36 +00:00

Towny Support + WorldGuard Fix

This commit is contained in:
Xiao-MoMi
2022-07-06 14:33:49 +08:00
parent 649f7d28a8
commit f6dbe3c76c
8 changed files with 66 additions and 17 deletions

View File

@@ -188,6 +188,14 @@ public class ConfigReader {
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>PlotSquared <color:#FFEBCD>保护!"); AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>PlotSquared <color:#FFEBCD>保护!");
} }
} }
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("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>Towny <color:#FFEBCD>保护!");
}
}
} }
} }
@@ -304,6 +312,7 @@ public class ConfigReader {
public static String setSeason; public static String setSeason;
public static String wrongArgs; public static String wrongArgs;
public static String forceSave; public static String forceSave;
public static String noSeason;
public static boolean hasCropInfo; public static boolean hasCropInfo;
public static boolean hasSprinklerInfo; public static boolean hasSprinklerInfo;
public static boolean hasWaterInfo; public static boolean hasWaterInfo;
@@ -347,6 +356,7 @@ public class ConfigReader {
wrongArgs = config.getString("messages.wrong-args"); wrongArgs = config.getString("messages.wrong-args");
forceSave = config.getString("messages.force-save"); forceSave = config.getString("messages.force-save");
beforePlant = config.getString("messages.before-plant"); beforePlant = config.getString("messages.before-plant");
noSeason = config.getString("messages.no-season","当前世界没有季节");
hasCropInfo = config.getBoolean("hologram.grow-info.enable"); hasCropInfo = config.getBoolean("hologram.grow-info.enable");
if (hasCropInfo){ if (hasCropInfo){

View File

@@ -79,10 +79,12 @@ public final class CustomCrops extends JavaPlugin {
this.potManager = new PotManager(this); this.potManager = new PotManager(this);
this.potManager.loadData(); this.potManager.loadData();
NBTItem nbtItem = new NBTItem(new ItemStack(Material.WHEAT));
//启动完成 //启动完成
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#F5DEB3>插件已加载!作者:小默米 QQ:3266959688"); AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#F5DEB3>插件已加载!作者:小默米 QQ:3266959688");
NBTItem nbtItem = new NBTItem(new ItemStack(Material.WHEAT));
nbtItem.getItem();
} }
@Override @Override

View File

@@ -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);
}
}

View File

@@ -1,10 +1,13 @@
package net.momirealms.customcrops.integrations; package net.momirealms.customcrops.integrations;
import com.sk89q.worldedit.bukkit.BukkitAdapter; 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.LocalPlayer;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; 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.flags.Flags;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.protection.regions.RegionQuery;
import org.bukkit.Location; import org.bukkit.Location;
@@ -15,11 +18,11 @@ public record WorldGuard() implements Integration {
@Override @Override
public boolean canPlace(Location location, Player player) { public boolean canPlace(Location location, Player player) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
RegionContainer container = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform().getRegionContainer(); World world = BukkitAdapter.adapt(location.getWorld());
RegionQuery query = container.createQuery(); WorldGuardPlatform platform = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); if (hasRegion(world, BukkitAdapter.asBlockVector(location))){
if (set != null){ RegionQuery query = platform.getRegionContainer().createQuery();
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD); return query.testBuild(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD);
}else { }else {
return true; return true;
} }
@@ -28,13 +31,20 @@ public record WorldGuard() implements Integration {
@Override @Override
public boolean canBreak(Location location, Player player) { public boolean canBreak(Location location, Player player) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
RegionContainer container = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform().getRegionContainer(); World world = BukkitAdapter.adapt(location.getWorld());
RegionQuery query = container.createQuery(); WorldGuardPlatform platform = com.sk89q.worldguard.WorldGuard.getInstance().getPlatform();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); if (hasRegion(world, BukkitAdapter.asBlockVector(location))){
if (set != null){ RegionQuery query = platform.getRegionContainer().createQuery();
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK); return query.testBuild(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK);
}else { }else {
return true; 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;
}
} }

View File

@@ -7,6 +7,8 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Optional;
public class Placeholders extends PlaceholderExpansion{ public class Placeholders extends PlaceholderExpansion{
@Override @Override
@@ -27,7 +29,7 @@ public class Placeholders extends PlaceholderExpansion{
@Override @Override
public String onRequest(OfflinePlayer player, String params) { public String onRequest(OfflinePlayer player, String params) {
if (params.equalsIgnoreCase("season")){ 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("spring", ConfigReader.Message.spring)
.replace("summer", ConfigReader.Message.summer) .replace("summer", ConfigReader.Message.summer)
.replace("autumn", ConfigReader.Message.autumn) .replace("autumn", ConfigReader.Message.autumn)

View File

@@ -9,9 +9,10 @@ config:
Kingdoms: false Kingdoms: false
#信任的玩家可以收获、浇水和种植 #信任的玩家可以收获、浇水和种植
GriefDefender: false GriefDefender: false
#拥有地皮权限的玩家可以收获、浇水和种植 #拥有plot add的玩家可以收获、浇水和种植
PlotSquared: false PlotSquared: false
#拥有Town权限的玩家可以收获、浇水和种植
Towny: false
#生长时间点(tick) #生长时间点(tick)
#洒水器将会在农作物全部完成生长后开始工作 #洒水器将会在农作物全部完成生长后开始工作

View File

@@ -24,6 +24,7 @@ messages:
back-up: '<white>已完成数据备份!' back-up: '<white>已完成数据备份!'
set-season: '<white>成功切换世界 {world} 的季节为 {season}!' set-season: '<white>成功切换世界 {world} 的季节为 {season}!'
before-plant: '<white>这种肥料必须在种植前使用!' before-plant: '<white>这种肥料必须在种植前使用!'
no-season: '当前世界没有季节'
#全息信息显示 #全息信息显示
hologram: hologram:

View File

@@ -1,5 +1,5 @@
name: CustomCrops name: CustomCrops
version: '1.5.1' version: '1.5.3'
main: net.momirealms.customcrops.CustomCrops main: net.momirealms.customcrops.CustomCrops
api-version: 1.16 api-version: 1.16
depend: depend: