mirror of
https://github.com/Xiao-MoMi/Custom-Crops.git
synced 2025-12-23 00:49:33 +00:00
1.5.0-FIX
This commit is contained in:
@@ -41,9 +41,9 @@ public class ConfigReader {
|
|||||||
Config.loadConfig();
|
Config.loadConfig();
|
||||||
Message.loadMessage();
|
Message.loadMessage();
|
||||||
Basic.loadBasic();
|
Basic.loadBasic();
|
||||||
Season.loadSeason();
|
|
||||||
cropLoad();
|
cropLoad();
|
||||||
fertilizerLoad();
|
fertilizerLoad();
|
||||||
|
Season.loadSeason();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Config{
|
public static class Config{
|
||||||
@@ -150,7 +150,7 @@ public class ConfigReader {
|
|||||||
CustomCrops.instance.getLogger().warning("未检测到插件 Residence!");
|
CustomCrops.instance.getLogger().warning("未检测到插件 Residence!");
|
||||||
}else {
|
}else {
|
||||||
integration.add(new Residence());
|
integration.add(new Residence());
|
||||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>检测到 <gold>Residence <color:#FFEBCD>已启用保护!");
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>Residence <color:#FFEBCD>保护!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(config.getBoolean("config.integration.Kingdoms",false)){
|
if(config.getBoolean("config.integration.Kingdoms",false)){
|
||||||
@@ -158,7 +158,7 @@ public class ConfigReader {
|
|||||||
CustomCrops.instance.getLogger().warning("未检测到插件 Kingdoms!");
|
CustomCrops.instance.getLogger().warning("未检测到插件 Kingdoms!");
|
||||||
}else {
|
}else {
|
||||||
integration.add(new KingdomsX());
|
integration.add(new KingdomsX());
|
||||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>检测到 <gold>KingdomsX <color:#FFEBCD>已启用保护!");
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>KingdomsX <color:#FFEBCD>保护!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(config.getBoolean("config.integration.WorldGuard",false)){
|
if(config.getBoolean("config.integration.WorldGuard",false)){
|
||||||
@@ -166,7 +166,7 @@ public class ConfigReader {
|
|||||||
CustomCrops.instance.getLogger().warning("未检测到插件 WorldGuard!");
|
CustomCrops.instance.getLogger().warning("未检测到插件 WorldGuard!");
|
||||||
}else {
|
}else {
|
||||||
integration.add(new WorldGuard());
|
integration.add(new WorldGuard());
|
||||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>检测到 <gold>WorldGuard <color:#FFEBCD>已启用保护!");
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>WorldGuard <color:#FFEBCD>保护!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(config.getBoolean("config.integration.GriefDefender",false)){
|
if(config.getBoolean("config.integration.GriefDefender",false)){
|
||||||
@@ -174,7 +174,15 @@ public class ConfigReader {
|
|||||||
CustomCrops.instance.getLogger().warning("未检测到插件 GriefDefender!");
|
CustomCrops.instance.getLogger().warning("未检测到插件 GriefDefender!");
|
||||||
}else {
|
}else {
|
||||||
integration.add(new GriefDefender());
|
integration.add(new GriefDefender());
|
||||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>检测到 <gold>GriefDefender <color:#FFEBCD>已启用保护!");
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>GriefDefender <color:#FFEBCD>保护!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(config.getBoolean("config.integration.PlotSquared",false)){
|
||||||
|
if(Bukkit.getPluginManager().getPlugin("PlotSquared") == null){
|
||||||
|
CustomCrops.instance.getLogger().warning("未检测到插件 PlotSquared!");
|
||||||
|
}else {
|
||||||
|
integration.add(new PlotSquared());
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已启用 <gold>PlotSquared <color:#FFEBCD>保护!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,6 +228,7 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + CANS.size() + " <color:#FFEBCD>个水壶!");
|
||||||
|
|
||||||
SPRINKLERS.clear();
|
SPRINKLERS.clear();
|
||||||
if (config.contains("sprinkler")){
|
if (config.contains("sprinkler")){
|
||||||
@@ -236,6 +245,7 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + SPRINKLERS.size()/2 + " <color:#FFEBCD>个洒水器!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,7 +268,10 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
seasonChange = config.getBoolean("season.auto-season-change.enable",false);
|
seasonChange = config.getBoolean("season.auto-season-change.enable",false);
|
||||||
if (seasonChange) {
|
if (seasonChange) {
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>当前季节变换模式: <gold>自动");
|
||||||
duration = config.getInt("season.auto-season-change.duration",28);
|
duration = config.getInt("season.auto-season-change.duration",28);
|
||||||
|
}else {
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>当前季节变换模式: <gold>指令");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -297,6 +310,7 @@ public class ConfigReader {
|
|||||||
public static String sprinklerFull;
|
public static String sprinklerFull;
|
||||||
public static String sprinklerEmpty;
|
public static String sprinklerEmpty;
|
||||||
public static String sprinklerRight;
|
public static String sprinklerRight;
|
||||||
|
public static String beforePlant;
|
||||||
public static double cropOffset;
|
public static double cropOffset;
|
||||||
public static double sprinklerOffset;
|
public static double sprinklerOffset;
|
||||||
|
|
||||||
@@ -324,6 +338,7 @@ public class ConfigReader {
|
|||||||
setSeason = config.getString("messages.set-season");
|
setSeason = config.getString("messages.set-season");
|
||||||
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");
|
||||||
|
|
||||||
hasCropInfo = config.getBoolean("hologram.grow-info.enable");
|
hasCropInfo = config.getBoolean("hologram.grow-info.enable");
|
||||||
if (hasCropInfo){
|
if (hasCropInfo){
|
||||||
@@ -385,6 +400,7 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
CROPS.put(key, cropInstance);
|
CROPS.put(key, cropInstance);
|
||||||
});
|
});
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + CROPS.size() + " <color:#FFEBCD>种农作物!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fertilizerLoad(){
|
public static void fertilizerLoad(){
|
||||||
@@ -428,5 +444,6 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + FERTILIZERS.size() + " <color:#FFEBCD>种肥料!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,9 +137,19 @@ public class Executor implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
if (sender instanceof Player player){
|
if (sender instanceof Player player){
|
||||||
AdventureManager.playerMessage(player,"");
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops reload 重载插件");
|
||||||
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops setseason <world> <season> 设置某个世界的季节");
|
||||||
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops backup 备份数据");
|
||||||
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops forcegrow <world> 强制某个世界的农作物进行生长判定");
|
||||||
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops forcewater <world> 强制某个世界的洒水器进行工作判定");
|
||||||
|
AdventureManager.playerMessage(player,"<color:#F5DEB3>/customcrops forcesave <file> 强制更新缓存并保存");
|
||||||
}else {
|
}else {
|
||||||
AdventureManager.consoleMessage("");
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops reload 重载插件");
|
||||||
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops setseason <world> <season> 设置某个世界的季节");
|
||||||
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops backup 备份数据");
|
||||||
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops forcegrow <world> 强制某个世界的农作物进行生长判定");
|
||||||
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops forcewater <world> 强制某个世界的洒水器进行工作判定");
|
||||||
|
AdventureManager.consoleMessage("<color:#F5DEB3>/customcrops forcesave <file> 强制更新缓存并保存");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package net.momirealms.customcrops.integrations;
|
||||||
|
|
||||||
|
import com.plotsquared.core.location.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public record PlotSquared() implements Integration {
|
||||||
|
@Override
|
||||||
|
public boolean canBreak(org.bukkit.Location location, Player player) {
|
||||||
|
// PlotAPI api = new PlotAPI();
|
||||||
|
// PlotPlayer<?> plotPlayer = com.plotsquared.core.PlotSquared.platform().playerManager().getPlayerIfExists(player.getUniqueId());
|
||||||
|
Location plotLoc = Location.at(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||||
|
if (plotLoc.isPlotRoad()) return false;
|
||||||
|
return plotLoc.getPlotArea().getPlot(plotLoc).isAdded(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlace(org.bukkit.Location location, Player player) {
|
||||||
|
Location plotLoc = Location.at(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||||
|
if (plotLoc.isPlotRoad()) return false;
|
||||||
|
return plotLoc.getPlotArea().getPlot(plotLoc).isAdded(player.getUniqueId());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ public record Residence() implements Integration {
|
|||||||
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();
|
||||||
return perms.playerHas(player, Flags.harvest, true);
|
return perms.playerHas(player, Flags.destroy, true);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ public record WorldGuard() implements Integration {
|
|||||||
RegionQuery query = container.createQuery();
|
RegionQuery query = container.createQuery();
|
||||||
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
|
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
|
||||||
if (set != null){
|
if (set != null){
|
||||||
System.out.println(set);
|
|
||||||
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD);
|
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD);
|
||||||
}else {
|
}else {
|
||||||
return true;
|
return true;
|
||||||
@@ -33,7 +32,6 @@ public record WorldGuard() implements Integration {
|
|||||||
RegionQuery query = container.createQuery();
|
RegionQuery query = container.createQuery();
|
||||||
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
|
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
|
||||||
if (set != null){
|
if (set != null){
|
||||||
System.out.println(set);
|
|
||||||
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK);
|
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK);
|
||||||
}else {
|
}else {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.momirealms.customcrops.ConfigReader;
|
|||||||
import net.momirealms.customcrops.datamanager.PotManager;
|
import net.momirealms.customcrops.datamanager.PotManager;
|
||||||
import net.momirealms.customcrops.fertilizer.Fertilizer;
|
import net.momirealms.customcrops.fertilizer.Fertilizer;
|
||||||
import net.momirealms.customcrops.fertilizer.QualityCrop;
|
import net.momirealms.customcrops.fertilizer.QualityCrop;
|
||||||
|
import net.momirealms.customcrops.integrations.Integration;
|
||||||
import net.momirealms.customcrops.utils.CropInstance;
|
import net.momirealms.customcrops.utils.CropInstance;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -28,9 +29,12 @@ public class BreakBlock implements Listener {
|
|||||||
String namespacedId = event.getNamespacedID();
|
String namespacedId = event.getNamespacedID();
|
||||||
if(namespacedId.contains("_stage_")){
|
if(namespacedId.contains("_stage_")){
|
||||||
Player player =event.getPlayer();
|
Player player =event.getPlayer();
|
||||||
|
Location location = event.getBlock().getLocation();
|
||||||
|
for (Integration integration : ConfigReader.Config.integration){
|
||||||
|
if(!integration.canPlace(location, player)) return;
|
||||||
|
}
|
||||||
if(player.getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH) || player.getInventory().getItemInMainHand().getType() == Material.SHEARS){
|
if(player.getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH) || player.getInventory().getItemInMainHand().getType() == Material.SHEARS){
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Location location = event.getBlock().getLocation();
|
|
||||||
CustomBlock.place(namespacedId, location);
|
CustomBlock.place(namespacedId, location);
|
||||||
CustomBlock.byAlreadyPlaced(location.getBlock()).getLoot().forEach(itemStack -> {
|
CustomBlock.byAlreadyPlaced(location.getBlock()).getLoot().forEach(itemStack -> {
|
||||||
location.getWorld().dropItem(location.clone().add(0.5,0.2,0.5), itemStack);
|
location.getWorld().dropItem(location.clone().add(0.5,0.2,0.5), itemStack);
|
||||||
@@ -45,7 +49,6 @@ public class BreakBlock implements Listener {
|
|||||||
CropInstance cropInstance = ConfigReader.CROPS.get(cropNameList[0]);
|
CropInstance cropInstance = ConfigReader.CROPS.get(cropNameList[0]);
|
||||||
ThreadLocalRandom current = ThreadLocalRandom.current();
|
ThreadLocalRandom current = ThreadLocalRandom.current();
|
||||||
int random = current.nextInt(cropInstance.getMin(), cropInstance.getMax() + 1);
|
int random = current.nextInt(cropInstance.getMin(), cropInstance.getMax() + 1);
|
||||||
Location location = event.getBlock().getLocation();
|
|
||||||
Location itemLoc = location.clone().add(0.5,0.2,0.5);
|
Location itemLoc = location.clone().add(0.5,0.2,0.5);
|
||||||
World world = location.getWorld();
|
World world = location.getWorld();
|
||||||
Fertilizer fertilizer = PotManager.Cache.get(location.clone().subtract(0,1,0));
|
Fertilizer fertilizer = PotManager.Cache.get(location.clone().subtract(0,1,0));
|
||||||
@@ -65,19 +68,12 @@ public class BreakBlock implements Listener {
|
|||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
normalDrop(cropInstance, random, itemLoc, world);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < random; i++){
|
normalDrop(cropInstance, random, itemLoc, world);
|
||||||
double ran = Math.random();
|
|
||||||
if (ran < ConfigReader.Config.quality_1){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_1()).getItemStack());
|
|
||||||
}else if(ran > ConfigReader.Config.quality_2){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_2()).getItemStack());
|
|
||||||
}else {
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +82,9 @@ public class BreakBlock implements Listener {
|
|||||||
PotManager.Cache.remove(location);
|
PotManager.Cache.remove(location);
|
||||||
World world = location.getWorld();
|
World world = location.getWorld();
|
||||||
Block blockUp = location.add(0,1,0).getBlock();
|
Block blockUp = location.add(0,1,0).getBlock();
|
||||||
|
for (Integration integration : ConfigReader.Config.integration){
|
||||||
|
if(!integration.canPlace(location, event.getPlayer())) return;
|
||||||
|
}
|
||||||
if(CustomBlock.byAlreadyPlaced(blockUp) != null){
|
if(CustomBlock.byAlreadyPlaced(blockUp) != null){
|
||||||
String cropNamespacedId = CustomBlock.byAlreadyPlaced(blockUp).getNamespacedID();
|
String cropNamespacedId = CustomBlock.byAlreadyPlaced(blockUp).getNamespacedID();
|
||||||
if(cropNamespacedId.contains("_stage_")){
|
if(cropNamespacedId.contains("_stage_")){
|
||||||
@@ -120,16 +119,7 @@ public class BreakBlock implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < random; i++){
|
normalDrop(cropInstance, random, itemLoc, world);
|
||||||
double ran = Math.random();
|
|
||||||
if (ran < ConfigReader.Config.quality_1){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_1()).getItemStack());
|
|
||||||
}else if(ran > ConfigReader.Config.quality_2){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_2()).getItemStack());
|
|
||||||
}else {
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -142,4 +132,17 @@ public class BreakBlock implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void normalDrop(CropInstance cropInstance, int random, Location itemLoc, World world) {
|
||||||
|
for (int i = 0; i < random; i++){
|
||||||
|
double ran = Math.random();
|
||||||
|
if (ran < ConfigReader.Config.quality_1){
|
||||||
|
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_1()).getItemStack());
|
||||||
|
}else if(ran > ConfigReader.Config.quality_2){
|
||||||
|
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_2()).getItemStack());
|
||||||
|
}else {
|
||||||
|
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,11 +49,11 @@ public class InteractEntity implements Listener {
|
|||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
int maxWater = config.getWater();
|
int maxWater = config.getWater();
|
||||||
int currentWater = 0;
|
int currentWater = 0;
|
||||||
|
Location loc = location.subtract(0,1,0).getBlock().getLocation().add(0,1,0);
|
||||||
|
Sprinkler sprinkler = SprinklerManager.Cache.get(loc);
|
||||||
if (itemStack.getType() == Material.WATER_BUCKET){
|
if (itemStack.getType() == Material.WATER_BUCKET){
|
||||||
itemStack.setType(Material.BUCKET);
|
itemStack.setType(Material.BUCKET);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BUCKET_FILL,1,1);
|
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BUCKET_FILL,1,1);
|
||||||
Location loc = location.subtract(0,1,0).getBlock().getLocation().add(0,1,0);
|
|
||||||
Sprinkler sprinkler = SprinklerManager.Cache.get(loc);
|
|
||||||
if (sprinkler != null){
|
if (sprinkler != null){
|
||||||
currentWater = sprinkler.getWater();
|
currentWater = sprinkler.getWater();
|
||||||
currentWater += ConfigReader.Config.sprinklerRefill;
|
currentWater += ConfigReader.Config.sprinklerRefill;
|
||||||
@@ -62,21 +62,27 @@ public class InteractEntity implements Listener {
|
|||||||
}
|
}
|
||||||
sprinkler.setWater(currentWater);
|
sprinkler.setWater(currentWater);
|
||||||
}else {
|
}else {
|
||||||
StringBuilder stringBuilder = new StringBuilder().append(world).append(".").append(x/16).append(",").append(z/16).append(".").append(x).append(",").append(location.getBlockY()).append(",").append(z).append(".water");
|
String path = world + "." + x / 16 + "," + z / 16 + "." + x + "," + location.getBlockY() + "," + z + ".water";
|
||||||
currentWater = plugin.getSprinklerManager().data.getInt(stringBuilder.toString());
|
currentWater = plugin.getSprinklerManager().data.getInt(path);
|
||||||
currentWater += ConfigReader.Config.sprinklerRefill;
|
currentWater += ConfigReader.Config.sprinklerRefill;
|
||||||
if (currentWater > maxWater){
|
if (currentWater > maxWater){
|
||||||
currentWater = maxWater;
|
currentWater = maxWater;
|
||||||
}
|
}
|
||||||
plugin.getSprinklerManager().data.set(stringBuilder.toString(), currentWater);
|
plugin.getSprinklerManager().data.set(path, currentWater);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
if (sprinkler != null){
|
||||||
|
currentWater = sprinkler.getWater();
|
||||||
|
}else {
|
||||||
|
String path = world + "." + x / 16 + "," + z / 16 + "." + x + "," + location.getBlockY() + "," + z + ".water";
|
||||||
|
currentWater = plugin.getSprinklerManager().data.getInt(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Location loc = armorStand.getLocation().add(0, ConfigReader.Message.sprinklerOffset,0);
|
|
||||||
if (ConfigReader.Message.hasSprinklerInfo){
|
if (ConfigReader.Message.hasSprinklerInfo){
|
||||||
String string = ConfigReader.Message.sprinklerLeft + ConfigReader.Message.sprinklerFull.repeat(currentWater) +
|
String string = ConfigReader.Message.sprinklerLeft + ConfigReader.Message.sprinklerFull.repeat(currentWater) +
|
||||||
ConfigReader.Message.sprinklerEmpty.repeat(maxWater - currentWater) + ConfigReader.Message.sprinklerRight;
|
ConfigReader.Message.sprinklerEmpty.repeat(maxWater - currentWater) + ConfigReader.Message.sprinklerRight;
|
||||||
if(HoloUtil.cache.get(player) == null) {
|
if(HoloUtil.cache.get(player) == null) {
|
||||||
HoloUtil.showHolo(string.replace("{max_water}", String.valueOf(maxWater)).replace("{water}", String.valueOf(currentWater)), player, loc, ConfigReader.Message.sprinklerTime);
|
HoloUtil.showHolo(string.replace("{max_water}", String.valueOf(maxWater)).replace("{water}", String.valueOf(currentWater)), player, location.add(0, ConfigReader.Message.sprinklerOffset,0), ConfigReader.Message.sprinklerTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import de.tr7zw.changeme.nbtapi.NBTItem;
|
|||||||
import dev.lone.itemsadder.api.CustomBlock;
|
import dev.lone.itemsadder.api.CustomBlock;
|
||||||
import dev.lone.itemsadder.api.CustomStack;
|
import dev.lone.itemsadder.api.CustomStack;
|
||||||
import net.momirealms.customcrops.ConfigReader;
|
import net.momirealms.customcrops.ConfigReader;
|
||||||
import net.momirealms.customcrops.CustomCrops;
|
|
||||||
import net.momirealms.customcrops.datamanager.CropManager;
|
import net.momirealms.customcrops.datamanager.CropManager;
|
||||||
import net.momirealms.customcrops.datamanager.PotManager;
|
import net.momirealms.customcrops.datamanager.PotManager;
|
||||||
import net.momirealms.customcrops.datamanager.SeasonManager;
|
import net.momirealms.customcrops.datamanager.SeasonManager;
|
||||||
@@ -92,19 +91,12 @@ public class RightClick implements Listener {
|
|||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
BreakBlock.normalDrop(cropInstance, random, itemLoc, world);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int i = 0; i < random; i++){
|
BreakBlock.normalDrop(cropInstance, random, itemLoc, world);
|
||||||
double ran = Math.random();
|
|
||||||
if (ran < ConfigReader.Config.quality_1){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_1()).getItemStack());
|
|
||||||
}else if(ran > ConfigReader.Config.quality_2){
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_2()).getItemStack());
|
|
||||||
}else {
|
|
||||||
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
customBlock.getLoot().forEach(loot-> location.getWorld().dropItem(location.clone().add(0.5,0.2,0.5), loot));
|
customBlock.getLoot().forEach(loot-> location.getWorld().dropItem(location.clone().add(0.5,0.2,0.5), loot));
|
||||||
@@ -225,13 +217,30 @@ public class RightClick implements Listener {
|
|||||||
}
|
}
|
||||||
String namespacedID = customBlock.getNamespacedID();
|
String namespacedID = customBlock.getNamespacedID();
|
||||||
if (namespacedID.equals(ConfigReader.Basic.pot) || namespacedID.equals(ConfigReader.Basic.watered_pot)){
|
if (namespacedID.equals(ConfigReader.Basic.pot) || namespacedID.equals(ConfigReader.Basic.watered_pot)){
|
||||||
|
CustomBlock customBlockUp = CustomBlock.byAlreadyPlaced(block.getLocation().clone().add(0,1,0).getBlock());
|
||||||
|
if (customBlockUp != null){
|
||||||
|
if (fertilizerConfig.isBefore() && customBlockUp.getNamespacedID().contains("_stage_")){
|
||||||
|
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.beforePlant);
|
||||||
|
return;
|
||||||
|
}else {
|
||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
||||||
addFertilizer(fertilizerConfig, block);
|
addFertilizer(fertilizerConfig, block);
|
||||||
}else if (!fertilizerConfig.isBefore() && namespacedID.contains("_stage_")){
|
}
|
||||||
|
}else {
|
||||||
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
|
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
||||||
|
addFertilizer(fertilizerConfig, block);
|
||||||
|
}
|
||||||
|
}else if (namespacedID.contains("_stage_")){
|
||||||
|
if (!fertilizerConfig.isBefore()){
|
||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
addFertilizer(fertilizerConfig, block);
|
addFertilizer(fertilizerConfig, block);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
||||||
|
}else {
|
||||||
|
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.beforePlant);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -249,6 +258,7 @@ public class RightClick implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Sprinkler sprinklerData = new Sprinkler(sprinkler.get().getRange(), 0);
|
Sprinkler sprinklerData = new Sprinkler(sprinkler.get().getRange(), 0);
|
||||||
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
SprinklerManager.Cache.put(location.add(0,1,0), sprinklerData);
|
SprinklerManager.Cache.put(location.add(0,1,0), sprinklerData);
|
||||||
IAFurniture.placeFurniture(sprinkler.get().getNamespacedID_2(),location);
|
IAFurniture.placeFurniture(sprinkler.get().getNamespacedID_2(),location);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.momirealms.customcrops.utils;
|
package net.momirealms.customcrops.utils;
|
||||||
|
|
||||||
import net.momirealms.customcrops.ConfigReader;
|
|
||||||
import net.momirealms.customcrops.CustomCrops;
|
import net.momirealms.customcrops.CustomCrops;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import net.momirealms.customcrops.ConfigReader;
|
|
||||||
import net.momirealms.customcrops.CustomCrops;
|
import net.momirealms.customcrops.CustomCrops;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|||||||
@@ -1,16 +1,6 @@
|
|||||||
package net.momirealms.customcrops.utils;
|
package net.momirealms.customcrops.utils;
|
||||||
|
|
||||||
public class WateringCan {
|
public record WateringCan(int max, int width, int length) {
|
||||||
|
|
||||||
private final int max;
|
|
||||||
private final int width;
|
|
||||||
private final int length;
|
|
||||||
|
|
||||||
public WateringCan(int max, int width, int length){
|
|
||||||
this.length = length;
|
|
||||||
this.max = max;
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMax() {
|
public int getMax() {
|
||||||
return max;
|
return max;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
config:
|
config:
|
||||||
#插件兼容
|
#插件兼容
|
||||||
integration:
|
integration:
|
||||||
#收获flag为harvest 浇水种植flag为build
|
#收获flag为destroy 浇水种植flag为build
|
||||||
Residence: false
|
Residence: false
|
||||||
#收获flag为BLOCK-BREAK 浇水种植flag为BUILD
|
#收获flag为BLOCK-BREAK 浇水种植flag为BUILD
|
||||||
WorldGuard: false
|
WorldGuard: false
|
||||||
@@ -9,6 +9,9 @@ config:
|
|||||||
Kingdoms: false
|
Kingdoms: false
|
||||||
#信任的玩家可以收获、浇水和种植
|
#信任的玩家可以收获、浇水和种植
|
||||||
GriefDefender: false
|
GriefDefender: false
|
||||||
|
#拥有地皮权限的玩家可以收获、浇水和种植
|
||||||
|
PlotSquared: false
|
||||||
|
|
||||||
|
|
||||||
#生长时间点(tick)
|
#生长时间点(tick)
|
||||||
#洒水器将会在农作物全部完成生长后开始工作
|
#洒水器将会在农作物全部完成生长后开始工作
|
||||||
@@ -19,6 +22,8 @@ config:
|
|||||||
quality:
|
quality:
|
||||||
#若不启用则植物成熟阶段会掉落IA配置里的loot
|
#若不启用则植物成熟阶段会掉落IA配置里的loot
|
||||||
#如果关闭产物品质需要在IA物品配置内自行添加最后一阶段掉落物
|
#如果关闭产物品质需要在IA物品配置内自行添加最后一阶段掉落物
|
||||||
|
#如果你使用的领地插件不被兼容,请不要启用产物品质功能,
|
||||||
|
#请立即更换领地插件或寻找作者写领地兼容
|
||||||
enable: true
|
enable: true
|
||||||
#默认品质权重比
|
#默认品质权重比
|
||||||
default-ratio: 17/2/1
|
default-ratio: 17/2/1
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ messages:
|
|||||||
force-save: '成功强制保存缓存信息!'
|
force-save: '成功强制保存缓存信息!'
|
||||||
back-up: '已完成数据备份!'
|
back-up: '已完成数据备份!'
|
||||||
set-season: '成功切换世界 {world} 的季节为 {season}!'
|
set-season: '成功切换世界 {world} 的季节为 {season}!'
|
||||||
|
before-plant: '这种肥料必须在种植前使用!'
|
||||||
|
|
||||||
#全息信息显示
|
#全息信息显示
|
||||||
hologram:
|
hologram:
|
||||||
@@ -39,7 +40,7 @@ hologram:
|
|||||||
#洒水器信息
|
#洒水器信息
|
||||||
sprinkler-info:
|
sprinkler-info:
|
||||||
enable: true
|
enable: true
|
||||||
y-offset: -0.2
|
y-offset: 0.8
|
||||||
duration: 1
|
duration: 1
|
||||||
#可用变量 {water}当前水量 {max_water}最大蓄水量
|
#可用变量 {water}当前水量 {max_water}最大蓄水量
|
||||||
left: '<font:customcrops:default>뀂'
|
left: '<font:customcrops:default>뀂'
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ softdepend:
|
|||||||
- Kingdoms
|
- Kingdoms
|
||||||
- WorldGuard
|
- WorldGuard
|
||||||
- GriefDefender
|
- GriefDefender
|
||||||
|
- PlotSquared
|
||||||
authors: [ XiaoMoMi ]
|
authors: [ XiaoMoMi ]
|
||||||
commands:
|
commands:
|
||||||
customcrops:
|
customcrops:
|
||||||
|
|||||||
Reference in New Issue
Block a user