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>保护!");
}
}
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 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){

View File

@@ -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("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#F5DEB3>插件已加载!作者:小默米 QQ:3266959688");
NBTItem nbtItem = new NBTItem(new ItemStack(Material.WHEAT));
nbtItem.getItem();
}
@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;
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;
}
}

View File

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

View File

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

View File

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

View File

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