mirror of
https://github.com/Xiao-MoMi/Custom-Crops.git
synced 2025-12-19 15:09:25 +00:00
1.5.20
This commit is contained in:
@@ -128,11 +128,11 @@ loots:
|
||||
max_amount: 1
|
||||
chance: 100
|
||||
ignore_fortune: true
|
||||
tomato_stage_4:
|
||||
type: customcrops:tomato_stage_4
|
||||
items:
|
||||
result_1:
|
||||
item: customcrops:tomato
|
||||
min_amount: 1
|
||||
max_amount: 3
|
||||
chance: 100
|
||||
# tomato_stage_4:
|
||||
# type: customcrops:tomato_stage_4
|
||||
# items:
|
||||
# result_1:
|
||||
# item: customcrops:tomato
|
||||
# min_amount: 1
|
||||
# max_amount: 3
|
||||
# chance: 100
|
||||
@@ -11,7 +11,7 @@ https://afdian.net/@xiaomomi
|
||||
https://polymart.org/resource/customcrops.2625
|
||||
|
||||
### How to compile
|
||||
Just compile it with -gradle shadowjar. Some premium plugins are used as
|
||||
Just compile it with gradle build. Some premium plugins are used as
|
||||
local libraries. If you don't need those integrations just remove them!
|
||||
Default ItemsAdder Config is also included in this project, which will
|
||||
provide a template and help you understand how this plugin works.
|
||||
|
||||
@@ -5,7 +5,7 @@ plugins {
|
||||
|
||||
|
||||
group = 'net.momirealms'
|
||||
version = '1.5.19'
|
||||
version = '1.5.20'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
||||
@@ -34,6 +34,7 @@ import net.momirealms.customcrops.requirements.YPos;
|
||||
import net.momirealms.customcrops.utils.*;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
@@ -91,7 +92,12 @@ public class ConfigReader {
|
||||
public static boolean quality;
|
||||
public static boolean canAddWater;
|
||||
public static boolean allWorld;
|
||||
public static boolean pwSeason;
|
||||
public static boolean nwSeason;
|
||||
public static boolean needEmptyHand;
|
||||
public static boolean boneMeal;
|
||||
public static Particle boneMealSuccess;
|
||||
public static double boneMealChance;
|
||||
public static double quality_1;
|
||||
public static double quality_2;
|
||||
public static SkillXP skillXP;
|
||||
@@ -123,6 +129,14 @@ public class ConfigReader {
|
||||
hasParticle = config.getBoolean("config.water-particles", true);
|
||||
rightClickHarvest = config.getBoolean("config.right-click-harvest", true);
|
||||
needEmptyHand = config.getBoolean("config.harvest-with-empty-hand", true);
|
||||
pwSeason = config.getBoolean("config.prevent-plant-if-wrong-season", true);
|
||||
nwSeason = config.getBoolean("config.should-notify-if-wrong-season", true);
|
||||
|
||||
boneMeal = config.getBoolean("config.bone-meal.enable", true);
|
||||
if (boneMeal){
|
||||
boneMealChance = config.getDouble("config.bone-meal.chance",0.5);
|
||||
boneMealSuccess = Particle.valueOf(config.getString("config.bone-meal.success-particle", "VILLAGER_HAPPY").toUpperCase());
|
||||
}
|
||||
|
||||
//数量与高度限制
|
||||
enableLimit = config.getBoolean("config.limit.enable",true);
|
||||
@@ -532,29 +546,26 @@ public class ConfigReader {
|
||||
YamlConfiguration config = getConfig("fertilizer.yml");
|
||||
if (config.contains("speed")){
|
||||
config.getConfigurationSection("speed").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("speed." + key + ".item"), ":")[1].equals(key)){
|
||||
SpeedGrow speedGrow = new SpeedGrow(key, config.getInt("speed." + key + ".times"), config.getDouble("speed." + key + ".chance"), config.getBoolean("加速肥料." + key + ".before-plant"));
|
||||
SpeedGrow speedGrow = new SpeedGrow(key, config.getInt("speed." + key + ".times"), config.getDouble("speed." + key + ".chance"), config.getBoolean("speed." + key + ".before-plant"));
|
||||
speedGrow.setName(config.getString("speed." + key + ".name"));
|
||||
FERTILIZERS.put(key, speedGrow);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] fertilizer " + key + "'s key should be the same with ItemsAdder item's key </red>");
|
||||
if (config.contains("speed." + key + ".particle")){
|
||||
speedGrow.setParticle(Particle.valueOf(config.getString("speed." + key + ".particle").toUpperCase()));
|
||||
}
|
||||
FERTILIZERS.put(StringUtils.split(config.getString("speed." + key + ".item"), ":")[1], speedGrow);
|
||||
});
|
||||
}
|
||||
if (config.contains("retaining")){
|
||||
config.getConfigurationSection("retaining").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("retaining." + key + ".item"), ":")[1].equals(key)){
|
||||
RetainingSoil retainingSoil = new RetainingSoil(key, config.getInt("retaining." + key + ".times"), config.getDouble("retaining." + key + ".chance"), config.getBoolean("保湿肥料." + key + ".before-plant"));
|
||||
RetainingSoil retainingSoil = new RetainingSoil(key, config.getInt("retaining." + key + ".times"), config.getDouble("retaining." + key + ".chance"), config.getBoolean("retaining." + key + ".before-plant"));
|
||||
retainingSoil.setName(config.getString("retaining." + key + ".name"));
|
||||
FERTILIZERS.put(key, retainingSoil);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] fertilizer " + key + "'s key should be the same with ItemsAdder item's key </red>");
|
||||
if (config.contains("retaining." + key + ".particle")){
|
||||
retainingSoil.setParticle(Particle.valueOf(config.getString("retaining." + key + ".particle").toUpperCase()));
|
||||
}
|
||||
FERTILIZERS.put(StringUtils.split(config.getString("retaining." + key + ".item"), ":")[1], retainingSoil);
|
||||
});
|
||||
}
|
||||
if (config.contains("quality")){
|
||||
config.getConfigurationSection("quality").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("quality." + key + ".item"), ":")[1].equals(key)){
|
||||
String[] split = StringUtils.split(config.getString("quality." + key + ".chance"), "/");
|
||||
int[] weight = new int[3];
|
||||
weight[0] = Integer.parseInt(split[0]);
|
||||
@@ -562,48 +573,10 @@ public class ConfigReader {
|
||||
weight[2] = Integer.parseInt(split[2]);
|
||||
QualityCrop qualityCrop = new QualityCrop(key, config.getInt("quality." + key + ".times"), weight, config.getBoolean("quality." + key + ".before-plant"));
|
||||
qualityCrop.setName(config.getString("quality." + key + ".name"));
|
||||
FERTILIZERS.put(key, qualityCrop);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] fertilizer " + key + "'s key should be the same with ItemsAdder item's key </red>");
|
||||
}
|
||||
});
|
||||
}
|
||||
if (config.contains("加速肥料")){
|
||||
config.getConfigurationSection("加速肥料").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("加速肥料." + key + ".item"), ":")[1].equals(key)){
|
||||
SpeedGrow speedGrow = new SpeedGrow(key, config.getInt("加速肥料." + key + ".times"), config.getDouble("加速肥料." + key + ".chance"), config.getBoolean("加速肥料." + key + ".before-plant"));
|
||||
speedGrow.setName(config.getString("加速肥料." + key + ".name"));
|
||||
FERTILIZERS.put(key, speedGrow);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] 肥料 " + key + " 与ItemsAdder物品ID不一致</red>");
|
||||
}
|
||||
});
|
||||
}
|
||||
if (config.contains("保湿肥料")){
|
||||
config.getConfigurationSection("保湿肥料").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("保湿肥料." + key + ".item"), ":")[1].equals(key)){
|
||||
RetainingSoil retainingSoil = new RetainingSoil(key, config.getInt("保湿肥料." + key + ".times"), config.getDouble("保湿肥料." + key + ".chance"), config.getBoolean("保湿肥料." + key + ".before-plant"));
|
||||
retainingSoil.setName(config.getString("保湿肥料." + key + ".name"));
|
||||
FERTILIZERS.put(key, retainingSoil);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] 肥料 " + key + " 与ItemsAdder物品ID不一致</red>");
|
||||
}
|
||||
});
|
||||
}
|
||||
if (config.contains("品质肥料")){
|
||||
config.getConfigurationSection("品质肥料").getKeys(false).forEach(key -> {
|
||||
if (StringUtils.split(config.getString("品质肥料." + key + ".item"), ":")[1].equals(key)){
|
||||
String[] split = StringUtils.split(config.getString("品质肥料." + key + ".chance"), "/");
|
||||
int[] weight = new int[3];
|
||||
weight[0] = Integer.parseInt(split[0]);
|
||||
weight[1] = Integer.parseInt(split[1]);
|
||||
weight[2] = Integer.parseInt(split[2]);
|
||||
QualityCrop qualityCrop = new QualityCrop(key, config.getInt("品质肥料." + key + ".times"), weight, config.getBoolean("品质肥料." + key + ".before-plant"));
|
||||
qualityCrop.setName(config.getString("品质肥料." + key + ".name"));
|
||||
FERTILIZERS.put(key, qualityCrop);
|
||||
}else {
|
||||
AdventureManager.consoleMessage("<red>[CustomCrops] 肥料 " + key + " 与ItemsAdder物品ID不一致</red>");
|
||||
if (config.contains("quality." + key + ".particle")){
|
||||
qualityCrop.setParticle(Particle.valueOf(config.getString("quality." + key + ".particle").toUpperCase()));
|
||||
}
|
||||
FERTILIZERS.put(StringUtils.split(config.getString("quality." + key + ".item"), ":")[1], qualityCrop);
|
||||
});
|
||||
}
|
||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><white>" + FERTILIZERS.size() + " <color:#FFEBCD>fertilizers loaded!");
|
||||
@@ -632,6 +605,9 @@ public class ConfigReader {
|
||||
public static Key harvestKey;
|
||||
public static net.kyori.adventure.sound.Sound.Source harvestSource;
|
||||
|
||||
public static Key boneMealKey;
|
||||
public static net.kyori.adventure.sound.Sound.Source boneMealSource;
|
||||
|
||||
public static void loadSound(){
|
||||
YamlConfiguration config = getConfig("sounds.yml");
|
||||
|
||||
@@ -655,6 +631,9 @@ public class ConfigReader {
|
||||
|
||||
harvestKey = Key.key(config.getString("harvest.sound", "minecraft:block.crop.break"));
|
||||
harvestSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("harvest.type", "player").toUpperCase());
|
||||
|
||||
boneMealKey = Key.key(config.getString("bonemeal.sound", "minecraft:item.hoe.till"));
|
||||
boneMealSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("bonemeal.type","player").toUpperCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,13 @@
|
||||
|
||||
package net.momirealms.customcrops.fertilizer;
|
||||
|
||||
import org.bukkit.Particle;
|
||||
|
||||
public interface Fertilizer {
|
||||
String getKey();
|
||||
int getTimes();
|
||||
void setTimes(int times);
|
||||
boolean isBefore();
|
||||
String getName();
|
||||
Particle getParticle();
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
package net.momirealms.customcrops.fertilizer;
|
||||
|
||||
import org.bukkit.Particle;
|
||||
|
||||
public class QualityCrop implements Fertilizer{
|
||||
|
||||
private int[] chance;
|
||||
@@ -24,6 +26,7 @@ public class QualityCrop implements Fertilizer{
|
||||
private int times;
|
||||
private final boolean before;
|
||||
private String name;
|
||||
private Particle particle;
|
||||
|
||||
public QualityCrop(String key, int times, int[] chance, boolean before) {
|
||||
this.chance = chance;
|
||||
@@ -42,9 +45,12 @@ public class QualityCrop implements Fertilizer{
|
||||
public boolean isBefore() {return this.before;}
|
||||
@Override
|
||||
public String getName() {return this.name;}
|
||||
@Override
|
||||
public Particle getParticle() {return this.particle;}
|
||||
public int[] getChance() {return chance;}
|
||||
|
||||
public void setName(String name) {this.name = name;}
|
||||
public void setChance(int[] chance) {this.chance = chance;}
|
||||
public void setKey(String key) {this.key = key;}
|
||||
public int[] getChance() {return chance;}
|
||||
public void setParticle(Particle particle) {this.particle = particle;}
|
||||
}
|
||||
|
||||
@@ -17,13 +17,16 @@
|
||||
|
||||
package net.momirealms.customcrops.fertilizer;
|
||||
|
||||
import org.bukkit.Particle;
|
||||
|
||||
public class RetainingSoil implements Fertilizer{
|
||||
|
||||
private double chance;
|
||||
private String key;
|
||||
private int times;
|
||||
private final boolean before;
|
||||
public String name;
|
||||
private String name;
|
||||
private Particle particle;
|
||||
|
||||
public RetainingSoil(String key, int times, double chance, boolean before){
|
||||
this.times = times;
|
||||
@@ -42,9 +45,12 @@ public class RetainingSoil implements Fertilizer{
|
||||
public boolean isBefore() {return this.before;}
|
||||
@Override
|
||||
public String getName() {return this.name;}
|
||||
@Override
|
||||
public Particle getParticle() {return this.particle;}
|
||||
public double getChance() {return chance;}
|
||||
|
||||
public void setName(String name) {this.name = name;}
|
||||
public void setChance(double chance) {this.chance = chance;}
|
||||
public void setKey(String key) {this.key = key;}
|
||||
public double getChance() {return chance;}
|
||||
public void setParticle(Particle particle) {this.particle = particle;}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
package net.momirealms.customcrops.fertilizer;
|
||||
|
||||
import org.bukkit.Particle;
|
||||
|
||||
public class SpeedGrow implements Fertilizer{
|
||||
|
||||
private double chance;
|
||||
@@ -24,6 +26,7 @@ public class SpeedGrow implements Fertilizer{
|
||||
private int times;
|
||||
private final boolean before;
|
||||
private String name;
|
||||
private Particle particle;
|
||||
|
||||
public SpeedGrow(String key, int times, double chance, boolean before){
|
||||
this.chance = chance;
|
||||
@@ -42,9 +45,12 @@ public class SpeedGrow implements Fertilizer{
|
||||
public boolean isBefore() {return this.before;}
|
||||
@Override
|
||||
public String getName() {return this.name;}
|
||||
@Override
|
||||
public Particle getParticle() {return this.particle;}
|
||||
public double getChance() {return chance;}
|
||||
|
||||
public void setName(String name) {this.name = name;}
|
||||
public double getChance() {return chance;}
|
||||
public void setParticle(Particle particle) {this.particle = particle;}
|
||||
public void setChance(double chance) {this.chance = chance;}
|
||||
public void setKey(String key) {this.key = key;}
|
||||
}
|
||||
|
||||
@@ -136,8 +136,9 @@ public class BreakBlock implements Listener {
|
||||
if(CustomBlock.byAlreadyPlaced(blockUp) != null){
|
||||
CustomBlock customBlock = CustomBlock.byAlreadyPlaced(blockUp);
|
||||
String cropNamespacedId = customBlock.getNamespacedID();
|
||||
if(cropNamespacedId.contains("_stage_") && !cropNamespacedId.equals(ConfigReader.Basic.dead)){
|
||||
if(cropNamespacedId.contains("_stage_")){
|
||||
CustomBlock.remove(location);
|
||||
if (cropNamespacedId.equals(ConfigReader.Basic.dead)) return;
|
||||
if (ConfigReader.Config.quality){
|
||||
String[] cropNameList = StringUtils.split(StringUtils.split(cropNamespacedId, ":")[1], "_");
|
||||
int nextStage = Integer.parseInt(cropNameList[2]) + 1;
|
||||
|
||||
@@ -123,9 +123,13 @@ public class RightClick implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ConfigReader.Config.nwSeason){
|
||||
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.badSeason);
|
||||
}
|
||||
if (ConfigReader.Config.pwSeason){
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(location.getBlock().getType() != Material.AIR){
|
||||
return;
|
||||
}
|
||||
@@ -314,18 +318,35 @@ public class RightClick implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(ConfigReader.Config.rightClickHarvest && !ConfigReader.Config.needEmptyHand){
|
||||
else if (ConfigReader.Config.boneMeal && itemStack.getType() == Material.BONE_MEAL && action == Action.RIGHT_CLICK_BLOCK){
|
||||
Block block = event.getClickedBlock();
|
||||
if (block != null){
|
||||
rightClickHarvest(block, player);
|
||||
CustomBlock customBlock = CustomBlock.byAlreadyPlaced(block);
|
||||
if (customBlock == null) return;
|
||||
for (Integration integration : ConfigReader.Config.integration){
|
||||
if(!integration.canPlace(block.getLocation(), player)) return;
|
||||
}
|
||||
String namespacedID = customBlock.getNamespacedID();
|
||||
if (namespacedID.contains("_stage_") && !namespacedID.equals(ConfigReader.Basic.dead)){
|
||||
int nextStage = Integer.parseInt(namespacedID.substring(namespacedID.length()-1)) + 1;
|
||||
String next = StringUtils.chop(namespacedID) + nextStage;
|
||||
if (CustomBlock.getInstance(next) != null){
|
||||
Location location = block.getLocation();
|
||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||
AdventureManager.playerSound(player, ConfigReader.Sounds.boneMealSource, ConfigReader.Sounds.boneMealKey);
|
||||
if (Math.random() < ConfigReader.Config.boneMealChance){
|
||||
CustomBlock.remove(location);
|
||||
CustomBlock.place(next, location);
|
||||
block.getWorld().spawnParticle(ConfigReader.Config.boneMealSuccess, location.add(0.5,0.3,0.5),5,0.2,0.2,0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(ConfigReader.Config.rightClickHarvest && !ConfigReader.Config.needEmptyHand && action == Action.RIGHT_CLICK_BLOCK){
|
||||
rightClickHarvest(event.getClickedBlock(), player);
|
||||
}
|
||||
}
|
||||
else if (ConfigReader.Config.rightClickHarvest && action == Action.RIGHT_CLICK_BLOCK) {
|
||||
Block block = event.getClickedBlock();
|
||||
if (block != null){
|
||||
rightClickHarvest(block, player);
|
||||
}
|
||||
rightClickHarvest(event.getClickedBlock(), player);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -426,6 +447,9 @@ public class RightClick implements Listener {
|
||||
RetainingSoil retainingSoil = new RetainingSoil(config.getKey(), config.getTimes(),config.getChance(), config.isBefore());
|
||||
PotManager.Cache.put(SimpleLocation.fromLocation(location), retainingSoil);
|
||||
}
|
||||
if (fertilizerConfig.getParticle() != null){
|
||||
location.getWorld().spawnParticle(fertilizerConfig.getParticle(), location.add(0.5,1.3,0.5), 5,0.2,0.2,0.2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,7 +2,6 @@ config:
|
||||
#english spanish chinese
|
||||
lang: english
|
||||
|
||||
|
||||
integration:
|
||||
#integration to prevent other players' grief
|
||||
Residence: false
|
||||
@@ -67,10 +66,10 @@ config:
|
||||
log-time-consume: false
|
||||
|
||||
#Defaultly crops will only grow in loaded chunks.
|
||||
#If you want a mechanic similar to OriginRealms just DISABLE SEASON, GIGANTIC(OverWeight) and REPEATED HARVESTING.
|
||||
#In this way crops data will be removed from file after it comes to its final stage.
|
||||
#If you want a mechanic similar to OriginRealms just DISABLE SEASON and REPEATED HARVESTING.
|
||||
#In this way crops data will be removed from file when it comes to its final stage.
|
||||
#In other words, plugin will only record the crops still on growing.
|
||||
#NEVER SET "only-grow-in-loaded-chunks" FALSE IF YOU DON'T DISABLE THE THREE FEATURES MENTIONED ABOVE.
|
||||
#NEVER SET "only-grow-in-loaded-chunks" FALSE IF YOU ARE USING THE FEATURES MENTIONED ABOVE.
|
||||
#Otherwise it would be laggy because too many data in cache.
|
||||
only-grow-in-loaded-chunks: true
|
||||
|
||||
@@ -86,3 +85,14 @@ config:
|
||||
#If "right-click-harvest" is true
|
||||
#Should player be allowed to harvest with items in hand
|
||||
harvest-with-empty-hand: true
|
||||
|
||||
#Should player be prevented from planting if wrong season
|
||||
prevent-plant-if-wrong-season: true
|
||||
#Should notify player of the wrong season?
|
||||
should-notify-if-wrong-season: true
|
||||
|
||||
#Will bone meal accelerate the growth of crop
|
||||
bone-meal:
|
||||
enable: true
|
||||
chance: 0.5
|
||||
success-particle: VILLAGER_HAPPY
|
||||
@@ -4,21 +4,23 @@
|
||||
|
||||
crops:
|
||||
tomato:
|
||||
|
||||
#the total amount of crops to be dropped
|
||||
amount: 1~4
|
||||
|
||||
#Quality Items
|
||||
quality:
|
||||
1: customcrops:tomato
|
||||
2: customcrops:tomato_silver_star
|
||||
3: customcrops:tomato_golden_star
|
||||
|
||||
#When harvesting, should the crop drop the loots from ItemsAdder too
|
||||
#This is useful for dropping seeds and other items
|
||||
drop-ia-loots: false
|
||||
|
||||
#optional
|
||||
#The chance that a crop grow a stage at grow time
|
||||
grow-chance: 0.9
|
||||
|
||||
#When harvesting, should the crop drop the loots from ItemsAdder too
|
||||
#This is useful for droping seeds and other items
|
||||
drop-ia-loots: false
|
||||
|
||||
#optional
|
||||
#Overweight
|
||||
gigantic:
|
||||
@@ -61,7 +63,6 @@ crops:
|
||||
season:
|
||||
- spring
|
||||
|
||||
|
||||
grape:
|
||||
amount: 2~4
|
||||
quality:
|
||||
|
||||
@@ -10,6 +10,10 @@ speed:
|
||||
item: customcrops:speed_1
|
||||
#Should this fertilizer be used before planting
|
||||
before-plant: true
|
||||
#Optional
|
||||
#The particle to display
|
||||
#https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Particle.html
|
||||
#particle: VILLAGER_HAPPY
|
||||
|
||||
speed_2:
|
||||
name: '뀍'
|
||||
|
||||
@@ -25,3 +25,7 @@ use-fertilizer:
|
||||
harvest:
|
||||
sound: minecraft:block.crop.break
|
||||
type: player
|
||||
|
||||
bonemeal:
|
||||
sound: minecraft:item.hoe.till
|
||||
type: player
|
||||
@@ -8,6 +8,9 @@ config:
|
||||
PlotSquared: false
|
||||
Towny: false
|
||||
Lands: false
|
||||
AureliumSkills: false
|
||||
mcMMO: false
|
||||
MMOCore: false
|
||||
|
||||
#生长时间点(tick)
|
||||
#1000代表上午7点,农作物陆续开始生长
|
||||
@@ -59,11 +62,11 @@ config:
|
||||
log-time-consume: false
|
||||
|
||||
#是否只有加载中的区块农作物才会生长
|
||||
#如果你不使用季节、可重复收获、巨大化农作物特性
|
||||
#如果你不使用季节、可重复收获特性
|
||||
#插件data只会记录正在生长中某个阶段的农作物数据
|
||||
#生长到最后一阶段农作物生长数据就会清除
|
||||
#那么可以尝试设置此值为false来让数据内全部农作物生长
|
||||
#如果你使用上述三个特性中的任意一个,请不要设置为false
|
||||
#如果你使用上述特性中的任意一个,请不要设置为false
|
||||
#否则农作物生长到最后一阶段不会从数据中清除,过大的数据量
|
||||
#可能会导致服务器严重卡顿
|
||||
only-grow-in-loaded-chunks: true
|
||||
@@ -80,3 +83,14 @@ config:
|
||||
|
||||
#玩家是否需要空手右键收获
|
||||
harvest-with-empty-hand: true
|
||||
|
||||
#是否阻止玩家在错误的季节种植
|
||||
prevent-plant-if-wrong-season: true
|
||||
#是否告知玩家这是错误的季节
|
||||
should-notify-if-wrong-season: true
|
||||
|
||||
#骨粉设置
|
||||
bone-meal:
|
||||
enable: true
|
||||
chance: 0.5
|
||||
success-particle: VILLAGER_HAPPY
|
||||
@@ -12,21 +12,24 @@ crops:
|
||||
1: customcrops:tomato
|
||||
2: customcrops:tomato_silver_star
|
||||
3: customcrops:tomato_golden_star
|
||||
|
||||
#农作物每个时间点生长一个阶段的概率
|
||||
#不设置默认为1
|
||||
grow-chance: 0.9
|
||||
#收获的时候是否额外掉落IA配置里的战利品
|
||||
#可用于最后一阶段掉落种子等操作
|
||||
drop-ia-loots: false
|
||||
#巨大化植物,以极低的概率生长为另一种形态
|
||||
gigantic:
|
||||
block: customcrops:gigantic_tomato
|
||||
chance: 0.01
|
||||
|
||||
#收获时候执行指令
|
||||
commands:
|
||||
- 'say {player} harvested a tomato! lol'
|
||||
|
||||
#生长季节
|
||||
season:
|
||||
- summer
|
||||
- autumn
|
||||
|
||||
#种植所需的条件
|
||||
requirements:
|
||||
#适宜的生长高度
|
||||
yPos:
|
||||
@@ -53,7 +56,6 @@ crops:
|
||||
season:
|
||||
- spring
|
||||
|
||||
|
||||
grape:
|
||||
amount: 2~4
|
||||
quality:
|
||||
@@ -74,3 +76,21 @@ crops:
|
||||
season:
|
||||
- autumn
|
||||
- summer
|
||||
|
||||
pepper:
|
||||
amount: 3~6
|
||||
quality:
|
||||
1: customcrops:pepper
|
||||
2: customcrops:pepper_silver_star
|
||||
3: customcrops:pepper_golden_star
|
||||
season:
|
||||
- spring
|
||||
- summer
|
||||
return: customcrops:pepper_stage_3
|
||||
|
||||
garlic:
|
||||
amount: 3~4
|
||||
quality:
|
||||
1: customcrops:garlic
|
||||
2: customcrops:garlic_silver_star
|
||||
3: customcrops:garlic_golden_star
|
||||
@@ -13,6 +13,9 @@ speed:
|
||||
item: customcrops:speed_1
|
||||
#肥料是否只有在种植前才能使用
|
||||
before-plant: true
|
||||
#施肥的粒子效果(可选)
|
||||
#https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Particle.html
|
||||
#particle: VILLAGER_HAPPY
|
||||
|
||||
speed_2:
|
||||
name: '뀍'
|
||||
|
||||
@@ -26,3 +26,7 @@ use-fertilizer:
|
||||
harvest:
|
||||
sound: minecraft:block.crop.break
|
||||
type: player
|
||||
#使用骨粉的音效
|
||||
bonemeal:
|
||||
sound: minecraft:item.hoe.till
|
||||
type: player
|
||||
Reference in New Issue
Block a user