mirror of
https://github.com/Xiao-MoMi/Custom-Crops.git
synced 2025-12-22 08:29:35 +00:00
1.5.8
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.customcrops;
|
package net.momirealms.customcrops;
|
||||||
|
|
||||||
|
import net.kyori.adventure.key.Key;
|
||||||
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.fertilizer.RetainingSoil;
|
import net.momirealms.customcrops.fertilizer.RetainingSoil;
|
||||||
@@ -12,15 +13,13 @@ import net.momirealms.customcrops.requirements.YPos;
|
|||||||
import net.momirealms.customcrops.utils.*;
|
import net.momirealms.customcrops.utils.*;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ConfigReader {
|
public class ConfigReader {
|
||||||
|
|
||||||
@@ -44,6 +43,7 @@ public class ConfigReader {
|
|||||||
cropLoad();
|
cropLoad();
|
||||||
fertilizerLoad();
|
fertilizerLoad();
|
||||||
Season.loadSeason();
|
Season.loadSeason();
|
||||||
|
Sounds.loadSound();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Config{
|
public static class Config{
|
||||||
@@ -64,10 +64,13 @@ public class ConfigReader {
|
|||||||
public static int yMin;
|
public static int yMin;
|
||||||
public static int yMax;
|
public static int yMax;
|
||||||
public static int sprinklerRefill;
|
public static int sprinklerRefill;
|
||||||
|
public static int waterCanRefill;
|
||||||
public static int timeToGrow;
|
public static int timeToGrow;
|
||||||
|
public static int timeToWork;
|
||||||
public static boolean logTime;
|
public static boolean logTime;
|
||||||
public static boolean onlyLoadedGrow;
|
public static boolean onlyLoadedGrow;
|
||||||
public static boolean quality;
|
public static boolean quality;
|
||||||
|
public static boolean canAddWater;
|
||||||
public static double quality_1;
|
public static double quality_1;
|
||||||
public static double quality_2;
|
public static double quality_2;
|
||||||
|
|
||||||
@@ -87,6 +90,7 @@ public class ConfigReader {
|
|||||||
});
|
});
|
||||||
|
|
||||||
timeToGrow = config.getInt("config.time-to-grow",60)*20;
|
timeToGrow = config.getInt("config.time-to-grow",60)*20;
|
||||||
|
timeToWork = config.getInt("config.time-to-work",30)*20;
|
||||||
|
|
||||||
//异步读取时间
|
//异步读取时间
|
||||||
asyncCheck = config.getBoolean("config.async-time-check",false);
|
asyncCheck = config.getBoolean("config.async-time-check",false);
|
||||||
@@ -131,6 +135,8 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sprinklerRefill = config.getInt("config.sprinkler-refill",2);
|
sprinklerRefill = config.getInt("config.sprinkler-refill",2);
|
||||||
|
waterCanRefill = config.getInt("config.water-can-refill",1);
|
||||||
|
canAddWater = config.getBoolean("config.water-can-add-water-to-sprinkler",true);
|
||||||
|
|
||||||
//农作物生长的白名单世界
|
//农作物生长的白名单世界
|
||||||
worlds = new ArrayList<>();
|
worlds = new ArrayList<>();
|
||||||
@@ -484,4 +490,47 @@ public class ConfigReader {
|
|||||||
}
|
}
|
||||||
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + FERTILIZERS.size() + " <color:#FFEBCD>种肥料!");
|
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + FERTILIZERS.size() + " <color:#FFEBCD>种肥料!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Sounds{
|
||||||
|
|
||||||
|
public static Key waterPotKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source waterPotSource;
|
||||||
|
|
||||||
|
public static Key addWaterToCanKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source addWaterToCanSource;
|
||||||
|
|
||||||
|
public static Key addWaterToSprinklerKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source addWaterToSprinklerSource;
|
||||||
|
|
||||||
|
public static Key placeSprinklerKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source placeSprinklerSource;
|
||||||
|
|
||||||
|
public static Key plantSeedKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source plantSeedSource;
|
||||||
|
|
||||||
|
public static Key useFertilizerKey;
|
||||||
|
public static net.kyori.adventure.sound.Sound.Source useFertilizerSource;
|
||||||
|
|
||||||
|
public static void loadSound(){
|
||||||
|
YamlConfiguration config = getConfig("sounds.yml");
|
||||||
|
|
||||||
|
waterPotKey = Key.key(config.getString("water-pot.sound"));
|
||||||
|
waterPotSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("water-pot.type").toUpperCase());
|
||||||
|
|
||||||
|
addWaterToCanKey = Key.key(config.getString("add-water-to-can.sound"));
|
||||||
|
addWaterToCanSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("add-water-to-can.type").toUpperCase());
|
||||||
|
|
||||||
|
addWaterToSprinklerKey = Key.key(config.getString("add-water-to-sprinkler.sound"));
|
||||||
|
addWaterToSprinklerSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("add-water-to-sprinkler.type").toUpperCase());
|
||||||
|
|
||||||
|
placeSprinklerKey = Key.key(config.getString("place-sprinkler.sound"));
|
||||||
|
placeSprinklerSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("place-sprinkler.type").toUpperCase());
|
||||||
|
|
||||||
|
plantSeedKey = Key.key(config.getString("plant-seed.sound"));
|
||||||
|
plantSeedSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("plant-seed.type").toUpperCase());
|
||||||
|
|
||||||
|
useFertilizerKey = Key.key(config.getString("use-fertilizer.sound"));
|
||||||
|
useFertilizerSource = net.kyori.adventure.sound.Sound.Source.valueOf(config.getString("use-fertilizer.type").toUpperCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,9 +12,11 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.configuration.MemorySection;
|
import org.bukkit.configuration.MemorySection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class SprinklerManager {
|
public class SprinklerManager {
|
||||||
@@ -81,6 +83,7 @@ public class SprinklerManager {
|
|||||||
AdventureManager.consoleMessage("性能监测: 洒水器数据更新" + (time2-time1) + "ms");
|
AdventureManager.consoleMessage("性能监测: 洒水器数据更新" + (time2-time1) + "ms");
|
||||||
}
|
}
|
||||||
if (data.contains(worldName)){
|
if (data.contains(worldName)){
|
||||||
|
BukkitScheduler bukkitScheduler = Bukkit.getScheduler();
|
||||||
data.getConfigurationSection(worldName).getKeys(false).forEach(chunk ->{
|
data.getConfigurationSection(worldName).getKeys(false).forEach(chunk ->{
|
||||||
String[] split = StringUtils.split(chunk,",");
|
String[] split = StringUtils.split(chunk,",");
|
||||||
World world = Bukkit.getWorld(worldName);
|
World world = Bukkit.getWorld(worldName);
|
||||||
@@ -88,23 +91,26 @@ public class SprinklerManager {
|
|||||||
data.getConfigurationSection(worldName + "." + chunk).getValues(false).forEach((key, value) -> {
|
data.getConfigurationSection(worldName + "." + chunk).getValues(false).forEach((key, value) -> {
|
||||||
String[] coordinate = StringUtils.split(key, ",");
|
String[] coordinate = StringUtils.split(key, ",");
|
||||||
Location location = new Location(world,Double.parseDouble(coordinate[0])+0.5,Double.parseDouble(coordinate[1])+0.5,Double.parseDouble(coordinate[2])+0.5);
|
Location location = new Location(world,Double.parseDouble(coordinate[0])+0.5,Double.parseDouble(coordinate[1])+0.5,Double.parseDouble(coordinate[2])+0.5);
|
||||||
|
int random = new Random().nextInt(ConfigReader.Config.timeToWork);
|
||||||
if (value instanceof MemorySection map){
|
if (value instanceof MemorySection map){
|
||||||
Bukkit.getScheduler().callSyncMethod(CustomCrops.instance, ()->{
|
bukkitScheduler.callSyncMethod(CustomCrops.instance, ()->{
|
||||||
int water = (int) map.get("water");
|
int water = (int) map.get("water");
|
||||||
int range = (int) map.get("range");
|
int range = (int) map.get("range");
|
||||||
if(!IAFurniture.getFromLocation(location, world)){
|
if(!IAFurniture.getFromLocation(location, world)){
|
||||||
data.set(worldName + "." + chunk + "." + key, null);
|
data.set(worldName + "." + chunk + "." + key, null);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (range == 0) data.set(worldName + "." + chunk + "." + key, null);
|
|
||||||
if (water > 0){
|
if (water > 0){
|
||||||
data.set(worldName + "." + chunk + "." + key + ".water", water - 1);
|
data.set(worldName + "." + chunk + "." + key + ".water", water - 1);
|
||||||
for(int i = -range; i <= range; i++){
|
bukkitScheduler.runTaskLater(CustomCrops.instance, ()-> {
|
||||||
for (int j = -range; j <= range; j++){
|
for(int i = -range; i <= range; i++){
|
||||||
waterPot(location.clone().add(i,-1,j));
|
for (int j = -range; j <= range; j++){
|
||||||
|
waterPot(location.clone().add(i,-1,j));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}, random);
|
||||||
}
|
}
|
||||||
|
if (range == 0) data.set(worldName + "." + chunk + "." + key, null);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
package net.momirealms.customcrops.listener;
|
package net.momirealms.customcrops.listener;
|
||||||
|
|
||||||
|
import de.tr7zw.changeme.nbtapi.NBTCompound;
|
||||||
|
import de.tr7zw.changeme.nbtapi.NBTItem;
|
||||||
import dev.lone.itemsadder.api.CustomFurniture;
|
import dev.lone.itemsadder.api.CustomFurniture;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import net.momirealms.customcrops.ConfigReader;
|
import net.momirealms.customcrops.ConfigReader;
|
||||||
import net.momirealms.customcrops.CustomCrops;
|
import net.momirealms.customcrops.CustomCrops;
|
||||||
import net.momirealms.customcrops.datamanager.SprinklerManager;
|
import net.momirealms.customcrops.datamanager.SprinklerManager;
|
||||||
|
import net.momirealms.customcrops.utils.AdventureManager;
|
||||||
import net.momirealms.customcrops.utils.HoloUtil;
|
import net.momirealms.customcrops.utils.HoloUtil;
|
||||||
import net.momirealms.customcrops.utils.Sprinkler;
|
import net.momirealms.customcrops.utils.Sprinkler;
|
||||||
|
import net.momirealms.customcrops.utils.WateringCan;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -18,6 +23,8 @@ import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
|
||||||
public class InteractEntity implements Listener {
|
public class InteractEntity implements Listener {
|
||||||
@@ -38,7 +45,7 @@ public class InteractEntity implements Listener {
|
|||||||
if(config != null){
|
if(config != null){
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (time - (coolDown.getOrDefault(player, time - 1000)) < 1000) {
|
if (time - (coolDown.getOrDefault(player, time - 250)) < 250) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
coolDown.put(player, time);
|
coolDown.put(player, time);
|
||||||
@@ -48,12 +55,12 @@ public class InteractEntity implements Listener {
|
|||||||
int x = location.getBlockX();
|
int x = location.getBlockX();
|
||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
int maxWater = config.getWater();
|
int maxWater = config.getWater();
|
||||||
int currentWater;
|
int currentWater = 0;
|
||||||
Location loc = location.clone().subtract(0,1,0).getBlock().getLocation().add(0,1,0);
|
Location loc = location.clone().subtract(0,1,0).getBlock().getLocation().add(0,1,0);
|
||||||
Sprinkler sprinkler = SprinklerManager.Cache.get(loc);
|
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);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.addWaterToSprinklerSource, ConfigReader.Sounds.addWaterToSprinklerKey);
|
||||||
if (sprinkler != null){
|
if (sprinkler != null){
|
||||||
currentWater = sprinkler.getWater();
|
currentWater = sprinkler.getWater();
|
||||||
currentWater += ConfigReader.Config.sprinklerRefill;
|
currentWater += ConfigReader.Config.sprinklerRefill;
|
||||||
@@ -70,12 +77,58 @@ public class InteractEntity implements Listener {
|
|||||||
}
|
}
|
||||||
plugin.getSprinklerManager().data.set(path, currentWater);
|
plugin.getSprinklerManager().data.set(path, currentWater);
|
||||||
}
|
}
|
||||||
}else {
|
}
|
||||||
if (sprinkler != null){
|
else {
|
||||||
currentWater = sprinkler.getWater();
|
if (ConfigReader.Config.canAddWater && itemStack.getType() != Material.AIR){
|
||||||
}else {
|
NBTItem nbtItem = new NBTItem(itemStack);
|
||||||
String path = world + "." + x / 16 + "," + z / 16 + "." + x + "," + location.getBlockY() + "," + z + ".water";
|
int water = nbtItem.getInteger("WaterAmount");
|
||||||
currentWater = plugin.getSprinklerManager().data.getInt(path);
|
if (water > 0){
|
||||||
|
NBTCompound nbtCompound = nbtItem.getCompound("itemsadder");
|
||||||
|
if (nbtCompound != null) {
|
||||||
|
String id = nbtCompound.getString("id");
|
||||||
|
Optional<WateringCan> can = Optional.ofNullable(ConfigReader.CANS.get(id));
|
||||||
|
if (can.isPresent()) {
|
||||||
|
WateringCan wateringCan = can.get();
|
||||||
|
water--;
|
||||||
|
nbtItem.setInteger("WaterAmount", water);
|
||||||
|
AdventureManager.playerSound(player, ConfigReader.Sounds.addWaterToSprinklerSource, ConfigReader.Sounds.addWaterToSprinklerKey);
|
||||||
|
if (sprinkler != null){
|
||||||
|
currentWater = sprinkler.getWater();
|
||||||
|
currentWater++;
|
||||||
|
if (currentWater > maxWater){
|
||||||
|
currentWater = maxWater;
|
||||||
|
}
|
||||||
|
sprinkler.setWater(currentWater);
|
||||||
|
}else {
|
||||||
|
String path = world + "." + x / 16 + "," + z / 16 + "." + x + "," + location.getBlockY() + "," + z + ".water";
|
||||||
|
currentWater = plugin.getSprinklerManager().data.getInt(path);
|
||||||
|
currentWater++;
|
||||||
|
if (currentWater > maxWater){
|
||||||
|
currentWater = maxWater;
|
||||||
|
}
|
||||||
|
plugin.getSprinklerManager().data.set(path, currentWater);
|
||||||
|
}
|
||||||
|
if (ConfigReader.Message.hasWaterInfo){
|
||||||
|
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water) +
|
||||||
|
ConfigReader.Message.waterEmpty.repeat(wateringCan.getMax() - water) + ConfigReader.Message.waterRight;
|
||||||
|
AdventureManager.playerActionbar(player, string.replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water)));
|
||||||
|
}
|
||||||
|
if (ConfigReader.Basic.hasWaterLore){
|
||||||
|
String string = (ConfigReader.Basic.waterLeft + ConfigReader.Basic.waterFull.repeat(water) +
|
||||||
|
ConfigReader.Basic.waterEmpty.repeat(wateringCan.getMax() - water) + ConfigReader.Basic.waterRight).replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water));
|
||||||
|
List<String> lores = nbtItem.getCompound("display").getStringList("Lore");
|
||||||
|
lores.clear();
|
||||||
|
ConfigReader.Basic.waterLore.forEach(lore -> lores.add(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(lore.replace("{water_info}", string)))));
|
||||||
|
}
|
||||||
|
itemStack.setItemMeta(nbtItem.getItem().getItemMeta());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
currentWater = getCurrentWater(location, world, x, z, sprinkler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
currentWater = getCurrentWater(location, world, x, z, sprinkler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ConfigReader.Message.hasSprinklerInfo){
|
if (ConfigReader.Message.hasSprinklerInfo){
|
||||||
@@ -88,4 +141,15 @@ public class InteractEntity implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getCurrentWater(Location location, String world, int x, int z, Sprinkler sprinkler) {
|
||||||
|
int currentWater;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
return currentWater;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
|||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -58,6 +57,7 @@ public class RightClick implements Listener {
|
|||||||
if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK){
|
if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK){
|
||||||
ItemStack itemStack = event.getItem();
|
ItemStack itemStack = event.getItem();
|
||||||
if (itemStack != null){
|
if (itemStack != null){
|
||||||
|
if (itemStack.getType() == Material.AIR) return;
|
||||||
NBTItem nbtItem = new NBTItem(itemStack);
|
NBTItem nbtItem = new NBTItem(itemStack);
|
||||||
NBTCompound nbtCompound = nbtItem.getCompound("itemsadder");
|
NBTCompound nbtCompound = nbtItem.getCompound("itemsadder");
|
||||||
if (nbtCompound != null){
|
if (nbtCompound != null){
|
||||||
@@ -112,6 +112,7 @@ public class RightClick implements Listener {
|
|||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
CropManager.Cache.put(location, cropName);
|
CropManager.Cache.put(location, cropName);
|
||||||
CustomBlock.place((nbtCompound.getString("namespace") + ":" + cropName + "_stage_1"), location);
|
CustomBlock.place((nbtCompound.getString("namespace") + ":" + cropName + "_stage_1"), location);
|
||||||
|
AdventureManager.playerSound(player, ConfigReader.Sounds.plantSeedSource, ConfigReader.Sounds.plantSeedKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
@@ -127,16 +128,20 @@ public class RightClick implements Listener {
|
|||||||
for (Block block : lineOfSight) {
|
for (Block block : lineOfSight) {
|
||||||
if (block.getType() == Material.WATER) {
|
if (block.getType() == Material.WATER) {
|
||||||
if (wateringCan.getMax() > water){
|
if (wateringCan.getMax() > water){
|
||||||
nbtItem.setInteger("WaterAmount", water + 1);
|
water += ConfigReader.Config.waterCanRefill;
|
||||||
|
if (water > wateringCan.getMax()){
|
||||||
|
water = wateringCan.getMax();
|
||||||
|
}
|
||||||
|
nbtItem.setInteger("WaterAmount", water);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BUCKET_FILL,1,1);
|
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BUCKET_FILL,1,1);
|
||||||
if (ConfigReader.Message.hasWaterInfo){
|
if (ConfigReader.Message.hasWaterInfo){
|
||||||
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water + 1) +
|
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water) +
|
||||||
ConfigReader.Message.waterEmpty.repeat(wateringCan.getMax() - water - 1) + ConfigReader.Message.waterRight;
|
ConfigReader.Message.waterEmpty.repeat(wateringCan.getMax() - water) + ConfigReader.Message.waterRight;
|
||||||
AdventureManager.playerActionbar(player, string.replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water + 1)));
|
AdventureManager.playerActionbar(player, string.replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water)));
|
||||||
}
|
}
|
||||||
if (ConfigReader.Basic.hasWaterLore){
|
if (ConfigReader.Basic.hasWaterLore){
|
||||||
String string = (ConfigReader.Basic.waterLeft + ConfigReader.Basic.waterFull.repeat(water + 1) +
|
String string = (ConfigReader.Basic.waterLeft + ConfigReader.Basic.waterFull.repeat(water) +
|
||||||
ConfigReader.Basic.waterEmpty.repeat(wateringCan.getMax() - water - 1) + ConfigReader.Basic.waterRight).replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water + 1));
|
ConfigReader.Basic.waterEmpty.repeat(wateringCan.getMax() - water) + ConfigReader.Basic.waterRight).replace("{max_water}", String.valueOf(wateringCan.getMax())).replace("{water}", String.valueOf(water));
|
||||||
List<String> lores = nbtItem.getCompound("display").getStringList("Lore");
|
List<String> lores = nbtItem.getCompound("display").getStringList("Lore");
|
||||||
lores.clear();
|
lores.clear();
|
||||||
ConfigReader.Basic.waterLore.forEach(lore -> lores.add(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(lore.replace("{water_info}", string)))));
|
ConfigReader.Basic.waterLore.forEach(lore -> lores.add(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(lore.replace("{water_info}", string)))));
|
||||||
@@ -156,7 +161,7 @@ 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)){
|
||||||
nbtItem.setInteger("WaterAmount", water - 1);
|
nbtItem.setInteger("WaterAmount", water - 1);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.BLOCK_WATER_AMBIENT,1,1);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.waterPotSource, ConfigReader.Sounds.waterPotKey);
|
||||||
waterPot(wateringCan.getWidth(), wateringCan.getLength(), block.getLocation(), player.getLocation().getYaw());
|
waterPot(wateringCan.getWidth(), wateringCan.getLength(), block.getLocation(), player.getLocation().getYaw());
|
||||||
if (ConfigReader.Message.hasWaterInfo){
|
if (ConfigReader.Message.hasWaterInfo){
|
||||||
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water - 1) +
|
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water - 1) +
|
||||||
@@ -173,7 +178,7 @@ public class RightClick implements Listener {
|
|||||||
itemStack.setItemMeta(nbtItem.getItem().getItemMeta());
|
itemStack.setItemMeta(nbtItem.getItem().getItemMeta());
|
||||||
}else if (namespacedID.contains("_stage_")){
|
}else if (namespacedID.contains("_stage_")){
|
||||||
nbtItem.setInteger("WaterAmount", water - 1);
|
nbtItem.setInteger("WaterAmount", water - 1);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.BLOCK_WATER_AMBIENT,1,1);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.waterPotSource, ConfigReader.Sounds.waterPotKey);
|
||||||
waterPot(wateringCan.getWidth(), wateringCan.getLength(), block.getLocation().subtract(0,1,0), player.getLocation().getYaw());
|
waterPot(wateringCan.getWidth(), wateringCan.getLength(), block.getLocation().subtract(0,1,0), player.getLocation().getYaw());
|
||||||
if (ConfigReader.Message.hasWaterInfo){
|
if (ConfigReader.Message.hasWaterInfo){
|
||||||
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water - 1) +
|
String string = ConfigReader.Message.waterLeft + ConfigReader.Message.waterFull.repeat(water - 1) +
|
||||||
@@ -210,19 +215,19 @@ public class RightClick implements Listener {
|
|||||||
return;
|
return;
|
||||||
}else {
|
}else {
|
||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.useFertilizerSource, ConfigReader.Sounds.useFertilizerKey);
|
||||||
addFertilizer(fertilizerConfig, block);
|
addFertilizer(fertilizerConfig, block);
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.useFertilizerSource, ConfigReader.Sounds.useFertilizerKey);
|
||||||
addFertilizer(fertilizerConfig, block);
|
addFertilizer(fertilizerConfig, block);
|
||||||
}
|
}
|
||||||
}else if (namespacedID.contains("_stage_")){
|
}else if (namespacedID.contains("_stage_")){
|
||||||
if (!fertilizerConfig.isBefore()){
|
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);
|
AdventureManager.playerSound(player, ConfigReader.Sounds.useFertilizerSource, ConfigReader.Sounds.useFertilizerKey);
|
||||||
}else {
|
}else {
|
||||||
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.beforePlant);
|
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.beforePlant);
|
||||||
return;
|
return;
|
||||||
@@ -247,6 +252,7 @@ public class RightClick implements Listener {
|
|||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
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);
|
||||||
|
AdventureManager.playerSound(player, ConfigReader.Sounds.placeSprinklerSource, ConfigReader.Sounds.placeSprinklerKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ConfigReader.Message.hasCropInfo && id.equals(ConfigReader.Basic.soilDetector) && action == Action.RIGHT_CLICK_BLOCK){
|
if (ConfigReader.Message.hasCropInfo && id.equals(ConfigReader.Basic.soilDetector) && action == Action.RIGHT_CLICK_BLOCK){
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package net.momirealms.customcrops.utils;
|
package net.momirealms.customcrops.utils;
|
||||||
|
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
|
import net.kyori.adventure.key.Key;
|
||||||
|
import net.kyori.adventure.sound.Sound;
|
||||||
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.title.Title;
|
import net.kyori.adventure.title.Title;
|
||||||
@@ -39,4 +41,10 @@ public class AdventureManager {
|
|||||||
MiniMessage mm = MiniMessage.miniMessage();
|
MiniMessage mm = MiniMessage.miniMessage();
|
||||||
au.sendActionBar(mm.deserialize(s));
|
au.sendActionBar(mm.deserialize(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void playerSound(Player player, Sound.Source source, Key key) {
|
||||||
|
Sound sound = Sound.sound(key, source, 1, 1);
|
||||||
|
Audience au = CustomCrops.adventure.player(player);
|
||||||
|
au.playSound(sound);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,16 +10,18 @@ config:
|
|||||||
Lands: false
|
Lands: false
|
||||||
|
|
||||||
#生长时间点(tick)
|
#生长时间点(tick)
|
||||||
#洒水器将会在农作物全部完成生长后开始工作
|
|
||||||
#1000代表上午7点,农作物陆续开始生长
|
#1000代表上午7点,农作物陆续开始生长
|
||||||
|
#洒水器将会在农作物全部完成生长后开始工作
|
||||||
grow-time:
|
grow-time:
|
||||||
- 1000
|
- 1000
|
||||||
|
|
||||||
#生长的时间(秒)
|
#生长点后农作物成长所需的时间(秒)
|
||||||
#农作物将在90秒内随机完成生长以避免在短时间内大量方块替换造成卡顿
|
#农作物将在60秒内随机完成生长以避免在短时间内大量方块替换造成卡顿
|
||||||
#但也不建议设置过长时间,否则内存无法及时释放,区块会被持续加载
|
#但也不建议设置过长时间,否则内存无法及时释放,区块会被持续加载
|
||||||
#配合上方的默认时间点,意思为每天上午7点后,农作物将在90秒内完成生长过程
|
#配合上方的默认时间点,意思为每天上午7点后,农作物将在60秒内完成生长过程
|
||||||
time-to-grow: 90
|
time-to-grow: 60
|
||||||
|
#农作物全部完成生长后洒水器工作所需的时间
|
||||||
|
time-to-work: 30
|
||||||
|
|
||||||
#产物品质
|
#产物品质
|
||||||
quality:
|
quality:
|
||||||
@@ -37,6 +39,10 @@ config:
|
|||||||
|
|
||||||
#使用一次水桶可以补充几个洒水器水槽
|
#使用一次水桶可以补充几个洒水器水槽
|
||||||
sprinkler-refill: 2
|
sprinkler-refill: 2
|
||||||
|
#水壶右键一次水方块能补充多少水量
|
||||||
|
water-can-refill: 1
|
||||||
|
#是否可以用水壶为洒水器加水
|
||||||
|
water-can-add-water-to-sprinkler: true
|
||||||
|
|
||||||
#生长生效的世界
|
#生长生效的世界
|
||||||
whitelist-worlds:
|
whitelist-worlds:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: CustomCrops
|
name: CustomCrops
|
||||||
version: '1.5.7'
|
version: '1.5.8'
|
||||||
main: net.momirealms.customcrops.CustomCrops
|
main: net.momirealms.customcrops.CustomCrops
|
||||||
api-version: 1.16
|
api-version: 1.16
|
||||||
depend:
|
depend:
|
||||||
|
|||||||
24
src/main/resources/sounds.yml
Normal file
24
src/main/resources/sounds.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#使用水壶浇水的音效
|
||||||
|
water-pot:
|
||||||
|
sound: minecraft:block.water.ambient
|
||||||
|
type: player
|
||||||
|
#使用水壶装水的音效
|
||||||
|
add-water-to-can:
|
||||||
|
sound: minecraft:item.bucket.fill
|
||||||
|
type: player
|
||||||
|
#将水加入洒水器的音效
|
||||||
|
add-water-to-sprinkler:
|
||||||
|
sound: minecraft:item.bucket.fill
|
||||||
|
type: player
|
||||||
|
#放置洒水器的音效
|
||||||
|
place-sprinkler:
|
||||||
|
sound: minecraft:block.bone_block.place
|
||||||
|
type: player
|
||||||
|
#种植种子的音效
|
||||||
|
plant-seed:
|
||||||
|
sound: minecraft:item.hoe.till
|
||||||
|
type: player
|
||||||
|
#使用肥料的音效
|
||||||
|
use-fertilizer:
|
||||||
|
sound: minecraft:item.hoe.till
|
||||||
|
type: player
|
||||||
Reference in New Issue
Block a user