mirror of
https://github.com/Xiao-MoMi/Custom-Crops.git
synced 2025-12-22 16:39:36 +00:00
1.4.5
This commit is contained in:
@@ -24,7 +24,6 @@ public final class CustomCrops extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
saveDefaultConfig();
|
|
||||||
|
|
||||||
//加载配置文件
|
//加载配置文件
|
||||||
ConfigManager.Config.ReloadConfig();
|
ConfigManager.Config.ReloadConfig();
|
||||||
@@ -67,9 +66,9 @@ public final class CustomCrops extends JavaPlugin {
|
|||||||
//检测papi依赖
|
//检测papi依赖
|
||||||
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null){
|
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null){
|
||||||
new Placeholders(this).register();
|
new Placeholders(this).register();
|
||||||
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &f检测到PlaceHolderAPI 已启用季节变量!",Bukkit.getConsoleSender());
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7检测到 &aPlaceHolderAPI &7已启用季节变量!",Bukkit.getConsoleSender());
|
||||||
}
|
}
|
||||||
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &f自定义农作物插件已启用!作者:小默米 QQ:3266959688",Bukkit.getConsoleSender());
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7自定义农作物插件已启用!作者:小默米 QQ:3266959688",Bukkit.getConsoleSender());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -85,6 +84,6 @@ public final class CustomCrops extends JavaPlugin {
|
|||||||
|
|
||||||
//备份
|
//备份
|
||||||
BackUp.backUpData();
|
BackUp.backUpData();
|
||||||
MessageManager.consoleMessage(("&#ccfbff-#ef96c5&[CustomCrops] &f自定义农作物插件已卸载!作者:小默米 QQ:3266959688"),Bukkit.getConsoleSender());
|
MessageManager.consoleMessage(("&#ccfbff-#ef96c5&[CustomCrops] &7自定义农作物插件已卸载!作者:小默米 QQ:3266959688"),Bukkit.getConsoleSender());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ public class BackUp {
|
|||||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
|
||||||
|
|
||||||
File crop_data = new File(CustomCrops.instance.getDataFolder(), "crop-data.yml");
|
File crop_data = new File(CustomCrops.instance.getDataFolder(), "crop-data.yml");
|
||||||
File cropBackUp = new File(CustomCrops.instance.getDataFolder(), "backups/"+ format.format(date) + "/" + "crop-data.yml");
|
File cropBackUp = new File(CustomCrops.instance.getDataFolder(), "backups"+ File.separatorChar + format.format(date) + File.separatorChar + "crop-data.yml");
|
||||||
File sprinkler_data = new File(CustomCrops.instance.getDataFolder(), "sprinkler-data.yml");
|
File sprinkler_data = new File(CustomCrops.instance.getDataFolder(), "sprinkler-data.yml");
|
||||||
File sprinklerBackUp = new File(CustomCrops.instance.getDataFolder(), "backups/"+ format.format(date) + "/" + "sprinkler-data.yml");
|
File sprinklerBackUp = new File(CustomCrops.instance.getDataFolder(), "backups"+ File.separatorChar + format.format(date) + File.separatorChar + "sprinkler-data.yml");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BackUp.backUp(crop_data,cropBackUp);
|
BackUp.backUp(crop_data,cropBackUp);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.momirealms.customcrops.datamanager;
|
package net.momirealms.customcrops.datamanager;
|
||||||
|
|
||||||
import dev.lone.itemsadder.api.CustomBlock;
|
|
||||||
import net.momirealms.customcrops.CustomCrops;
|
import net.momirealms.customcrops.CustomCrops;
|
||||||
import net.momirealms.customcrops.utils.Crop;
|
import net.momirealms.customcrops.utils.Crop;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@@ -25,6 +24,7 @@ public class ConfigManager {
|
|||||||
public static boolean res;
|
public static boolean res;
|
||||||
public static boolean wg;
|
public static boolean wg;
|
||||||
public static boolean king;
|
public static boolean king;
|
||||||
|
public static boolean gd;
|
||||||
public static boolean season;
|
public static boolean season;
|
||||||
public static boolean need_water;
|
public static boolean need_water;
|
||||||
public static boolean greenhouse;
|
public static boolean greenhouse;
|
||||||
@@ -77,15 +77,49 @@ public class ConfigManager {
|
|||||||
public static int max_sprinkler;
|
public static int max_sprinkler;
|
||||||
|
|
||||||
public static void ReloadConfig(){
|
public static void ReloadConfig(){
|
||||||
|
CustomCrops.instance.saveDefaultConfig();
|
||||||
CustomCrops.instance.reloadConfig();
|
CustomCrops.instance.reloadConfig();
|
||||||
FileConfiguration configuration = CustomCrops.instance.getConfig();
|
FileConfiguration configuration = CustomCrops.instance.getConfig();
|
||||||
cropLoad();
|
cropLoad();
|
||||||
|
|
||||||
//处理配置
|
//处理配置
|
||||||
Config.res = configuration.getBoolean("integration.residence");
|
Config.res = configuration.getBoolean("config.integration.residence");
|
||||||
Config.king = configuration.getBoolean("integration.kingdomsX");
|
Config.king = configuration.getBoolean("config.integration.kingdomsX");
|
||||||
Config.wg = configuration.getBoolean("integration.worldguard");
|
Config.wg = configuration.getBoolean("config.integration.worldguard");
|
||||||
|
Config.gd = configuration.getBoolean("config.integration.griefdefender");
|
||||||
|
|
||||||
|
if(res){
|
||||||
|
if(Bukkit.getPluginManager().getPlugin("Residence") == null){
|
||||||
|
CustomCrops.instance.getLogger().warning("未检测到插件Residence!");
|
||||||
|
res = false;
|
||||||
|
}else {
|
||||||
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7检测到 &aResidence &7已启用领地保护!",Bukkit.getConsoleSender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(king){
|
||||||
|
if(Bukkit.getPluginManager().getPlugin("Kingdoms") == null){
|
||||||
|
CustomCrops.instance.getLogger().warning("未检测到插件KingdomsX!");
|
||||||
|
king = false;
|
||||||
|
}else {
|
||||||
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7检测到 &aKingdomsX &7已启用领地保护!",Bukkit.getConsoleSender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(wg){
|
||||||
|
if(Bukkit.getPluginManager().getPlugin("WorldGuard") == null){
|
||||||
|
CustomCrops.instance.getLogger().warning("未检测到插件WorldGuard!");
|
||||||
|
wg = false;
|
||||||
|
}else {
|
||||||
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7检测到 &aWorldGuard &7已启用区域保护!",Bukkit.getConsoleSender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(gd){
|
||||||
|
if(Bukkit.getPluginManager().getPlugin("GriefDefender") == null){
|
||||||
|
CustomCrops.instance.getLogger().warning("未检测到插件GriefDefender!");
|
||||||
|
gd = false;
|
||||||
|
}else {
|
||||||
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7检测到 &aGriefDefender &7已启用领地保护!",Bukkit.getConsoleSender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Config.season = configuration.getBoolean("enable-season");
|
Config.season = configuration.getBoolean("enable-season");
|
||||||
Config.need_water = configuration.getBoolean("config.bone-meal-consume-water");
|
Config.need_water = configuration.getBoolean("config.bone-meal-consume-water");
|
||||||
Config.greenhouse = configuration.getBoolean("config.enable-greenhouse");
|
Config.greenhouse = configuration.getBoolean("config.enable-greenhouse");
|
||||||
@@ -198,7 +232,7 @@ public class ConfigManager {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(keys.size() == CONFIG.size()){
|
if(keys.size() == CONFIG.size()){
|
||||||
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &f成功载入 &a" + CONFIG.size() + " &f种农作物", Bukkit.getConsoleSender());
|
MessageManager.consoleMessage("&#ccfbff-#ef96c5&[CustomCrops] &7成功载入 &a" + CONFIG.size() + " &7种农作物", Bukkit.getConsoleSender());
|
||||||
}else {
|
}else {
|
||||||
MessageManager.consoleMessage("&c[CustomCrops] crops.yml配置存在错误,请根据上述提示仔细检查!", Bukkit.getConsoleSender());
|
MessageManager.consoleMessage("&c[CustomCrops] crops.yml配置存在错误,请根据上述提示仔细检查!", Bukkit.getConsoleSender());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package net.momirealms.customcrops.integrations;
|
||||||
|
|
||||||
|
import com.griefdefender.api.GriefDefender;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class GriefDefenderIntegrations {
|
||||||
|
|
||||||
|
public static boolean checkGDBreak(Location location, Player player){
|
||||||
|
return GriefDefender.getCore().getUser(player.getUniqueId()).canBreak(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkGDBuild(Location location, Player player){
|
||||||
|
return GriefDefender.getCore().getUser(player.getUniqueId()).canPlace(player.getInventory().getItemInMainHand(), location);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,36 +8,68 @@ public class IntegrationCheck {
|
|||||||
|
|
||||||
//收获权限检测
|
//收获权限检测
|
||||||
public static boolean HarvestCheck(Location location, Player player){
|
public static boolean HarvestCheck(Location location, Player player){
|
||||||
if(ConfigManager.Config.king){
|
boolean canH = false;
|
||||||
if(KingdomsXIntegrations.checkKDBuild(location,player)){
|
if(ConfigManager.Config.res){
|
||||||
return true;
|
if(ResidenceIntegrations.checkResHarvest(location, player)){
|
||||||
|
canH = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ConfigManager.Config.res){
|
if(ConfigManager.Config.king){
|
||||||
if(ResidenceIntegrations.checkResHarvest(location,player)){
|
if(KingdomsXIntegrations.checkKDBuild(location, player)){
|
||||||
return true;
|
canH = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ConfigManager.Config.wg){
|
if(ConfigManager.Config.wg){
|
||||||
return WorldGuardIntegrations.checkWGHarvest(location, player);
|
if(WorldGuardIntegrations.checkWGHarvest(location, player)){
|
||||||
|
canH = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
if(ConfigManager.Config.gd){
|
||||||
|
if(GriefDefenderIntegrations.checkGDBreak(location, player)){
|
||||||
|
canH = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return canH;
|
||||||
}
|
}
|
||||||
//种植等权限检测
|
//种植等权限检测
|
||||||
public static boolean PlaceCheck(Location location, Player player){
|
public static boolean PlaceCheck(Location location, Player player){
|
||||||
if(ConfigManager.Config.king){
|
boolean canB = false;
|
||||||
if(KingdomsXIntegrations.checkKDBuild(location,player)){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(ConfigManager.Config.res){
|
if(ConfigManager.Config.res){
|
||||||
if(ResidenceIntegrations.checkResBuild(location,player)){
|
if(ResidenceIntegrations.checkResBuild(location,player)){
|
||||||
return true;
|
canB = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(ConfigManager.Config.king){
|
||||||
|
if(KingdomsXIntegrations.checkKDBuild(location,player)){
|
||||||
|
canB = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ConfigManager.Config.wg){
|
if(ConfigManager.Config.wg){
|
||||||
return WorldGuardIntegrations.checkWGBuild(location, player);
|
if(WorldGuardIntegrations.checkWGBuild(location, player)){
|
||||||
|
canB = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
if(ConfigManager.Config.gd){
|
||||||
|
if(GriefDefenderIntegrations.checkGDBuild(location, player)){
|
||||||
|
canB = true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return canB;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,18 +8,18 @@ import org.kingdoms.constants.player.KingdomPlayer;
|
|||||||
|
|
||||||
public class KingdomsXIntegrations {
|
public class KingdomsXIntegrations {
|
||||||
public static boolean checkKDBuild(Location location, Player player){
|
public static boolean checkKDBuild(Location location, Player player){
|
||||||
KingdomPlayer kp = KingdomPlayer.getKingdomPlayer(player);
|
|
||||||
Land land = Land.getLand(location);
|
Land land = Land.getLand(location);
|
||||||
if (land == null) return false;
|
if (land == null) return true;
|
||||||
if (land.isClaimed()) {
|
if (land.isClaimed()) {
|
||||||
|
KingdomPlayer kp = KingdomPlayer.getKingdomPlayer(player);
|
||||||
Kingdom cropKingdom = land.getKingdom();
|
Kingdom cropKingdom = land.getKingdom();
|
||||||
if (kp.getKingdom() != null) {
|
if (kp.getKingdom() != null) {
|
||||||
Kingdom kingdom = kp.getKingdom();
|
Kingdom kingdom = kp.getKingdom();
|
||||||
return kingdom != cropKingdom;
|
return kingdom != cropKingdom;
|
||||||
}else {
|
}else {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,30 +2,25 @@ package net.momirealms.customcrops.integrations;
|
|||||||
|
|
||||||
import com.bekvon.bukkit.residence.containers.Flags;
|
import com.bekvon.bukkit.residence.containers.Flags;
|
||||||
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
|
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
|
||||||
import com.bekvon.bukkit.residence.protection.FlagPermissions;
|
|
||||||
import com.bekvon.bukkit.residence.protection.ResidencePermissions;
|
import com.bekvon.bukkit.residence.protection.ResidencePermissions;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class ResidenceIntegrations {
|
public class ResidenceIntegrations {
|
||||||
public static boolean checkResBuild(Location location, Player player){
|
public static boolean checkResBuild(Location location, Player player){
|
||||||
FlagPermissions.addFlag("build");
|
|
||||||
ClaimedResidence res = com.bekvon.bukkit.residence.Residence.getInstance().getResidenceManager().getByLoc(location);
|
ClaimedResidence res = com.bekvon.bukkit.residence.Residence.getInstance().getResidenceManager().getByLoc(location);
|
||||||
if(res!=null){
|
if(res!=null){
|
||||||
ResidencePermissions perms = res.getPermissions();
|
ResidencePermissions perms = res.getPermissions();
|
||||||
boolean hasPermission = perms.playerHas(player, Flags.build, true);
|
return perms.playerHas(player, Flags.build, true);
|
||||||
return !hasPermission;
|
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
public static boolean checkResHarvest(Location location, Player player){
|
public static boolean checkResHarvest(Location location, Player player){
|
||||||
FlagPermissions.addFlag("harvest");
|
|
||||||
ClaimedResidence res = com.bekvon.bukkit.residence.Residence.getInstance().getResidenceManager().getByLoc(location);
|
ClaimedResidence res = com.bekvon.bukkit.residence.Residence.getInstance().getResidenceManager().getByLoc(location);
|
||||||
if(res!=null){
|
if(res!=null){
|
||||||
ResidencePermissions perms = res.getPermissions();
|
ResidencePermissions perms = res.getPermissions();
|
||||||
boolean hasPermission = perms.playerHas(player, Flags.harvest, true);
|
return perms.playerHas(player, Flags.harvest, true);
|
||||||
return !hasPermission;
|
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ public class WorldGuardIntegrations {
|
|||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||||
RegionQuery query = container.createQuery();
|
RegionQuery query = container.createQuery();
|
||||||
return !query.testState(BukkitAdapter.adapt(loc), localPlayer, Flags.BUILD);
|
return query.testState(BukkitAdapter.adapt(loc), localPlayer, Flags.BUILD);
|
||||||
}
|
}
|
||||||
public static boolean checkWGHarvest(Location loc,Player player){
|
public static boolean checkWGHarvest(Location loc,Player player){
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||||
RegionQuery query = container.createQuery();
|
RegionQuery query = container.createQuery();
|
||||||
return !query.testState(BukkitAdapter.adapt(loc), localPlayer, Flags.BLOCK_BREAK);
|
return query.testState(BukkitAdapter.adapt(loc), localPlayer, Flags.BLOCK_BREAK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ public class RightClickBlock implements Listener {
|
|||||||
if(namespacedId.equalsIgnoreCase(ConfigManager.Config.sprinkler_1i) || namespacedId.equalsIgnoreCase(ConfigManager.Config.sprinkler_2i)){
|
if(namespacedId.equalsIgnoreCase(ConfigManager.Config.sprinkler_1i) || namespacedId.equalsIgnoreCase(ConfigManager.Config.sprinkler_2i)){
|
||||||
Location location = event.getClickedBlock().getLocation();
|
Location location = event.getClickedBlock().getLocation();
|
||||||
//兼容性检测
|
//兼容性检测
|
||||||
if(IntegrationCheck.PlaceCheck(location,player)){
|
if(!IntegrationCheck.PlaceCheck(location,player)){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//高度限制
|
//高度限制
|
||||||
|
|||||||
@@ -18,12 +18,18 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static net.momirealms.customcrops.datamanager.CropManager.CROPS;
|
import static net.momirealms.customcrops.datamanager.CropManager.CROPS;
|
||||||
|
|
||||||
public class RightClickCustomBlock implements Listener {
|
public class RightClickCustomBlock implements Listener {
|
||||||
|
|
||||||
|
private HashMap<Player, Long> coolDown;
|
||||||
|
{
|
||||||
|
coolDown = new HashMap<Player, Long>();
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void rightClickCustomBlock(CustomBlockInteractEvent event){
|
public void rightClickCustomBlock(CustomBlockInteractEvent event){
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
||||||
@@ -39,7 +45,7 @@ public class RightClickCustomBlock implements Listener {
|
|||||||
CustomBlock clickedCustomBlock = CustomBlock.byAlreadyPlaced(clickedBlock);
|
CustomBlock clickedCustomBlock = CustomBlock.byAlreadyPlaced(clickedBlock);
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
//兼容性检测
|
//兼容性检测
|
||||||
if(!IntegrationCheck.HarvestCheck(clickedBlockLocation, player)){
|
if(IntegrationCheck.HarvestCheck(clickedBlockLocation, player)){
|
||||||
//获取点击方块的命名空间与ID
|
//获取点击方块的命名空间与ID
|
||||||
String namespacedID = event.getNamespacedID();
|
String namespacedID = event.getNamespacedID();
|
||||||
//如果ID内有stage则进行下一步
|
//如果ID内有stage则进行下一步
|
||||||
|
|||||||
@@ -85,8 +85,10 @@ config:
|
|||||||
residence: false
|
residence: false
|
||||||
#收获flag为BLOCK-BREAK 浇水种植flag为BUILD
|
#收获flag为BLOCK-BREAK 浇水种植flag为BUILD
|
||||||
worldguard: false
|
worldguard: false
|
||||||
#只有王国成员可以破坏浇水和种植
|
#只有王国成员可以收获、浇水和种植
|
||||||
kingdomsX: false
|
kingdomsX: false
|
||||||
|
#信任的玩家可以收获、浇水和种植
|
||||||
|
griefdefender: false
|
||||||
|
|
||||||
|
|
||||||
#MineDown格式Wiki
|
#MineDown格式Wiki
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
name: CustomCrops
|
name: CustomCrops
|
||||||
version: '1.4.4'
|
version: '1.4.5'
|
||||||
main: net.momirealms.customcrops.CustomCrops
|
main: net.momirealms.customcrops.CustomCrops
|
||||||
api-version: 1.16
|
api-version: 1.16
|
||||||
depend:
|
depend:
|
||||||
- ItemsAdder
|
- ItemsAdder
|
||||||
softdepend:
|
softdepend:
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
|
- Residence
|
||||||
|
- Kingdoms
|
||||||
|
- WorldGuard
|
||||||
|
- GriefDefender
|
||||||
authors: [ XiaoMoMi ]
|
authors: [ XiaoMoMi ]
|
||||||
commands:
|
commands:
|
||||||
customcrops:
|
customcrops:
|
||||||
|
|||||||
Reference in New Issue
Block a user