9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2025-12-22 08:29:35 +00:00

1.5.0-FIX

This commit is contained in:
Xiao-MoMi
2022-07-04 16:44:01 +08:00
parent eda25b0bfc
commit 3d71bed588
14 changed files with 133 additions and 72 deletions

View File

@@ -41,9 +41,9 @@ public class ConfigReader {
Config.loadConfig();
Message.loadMessage();
Basic.loadBasic();
Season.loadSeason();
cropLoad();
fertilizerLoad();
Season.loadSeason();
}
public static class Config{
@@ -150,7 +150,7 @@ public class ConfigReader {
CustomCrops.instance.getLogger().warning("未检测到插件 Residence!");
}else {
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)){
@@ -158,7 +158,7 @@ public class ConfigReader {
CustomCrops.instance.getLogger().warning("未检测到插件 Kingdoms!");
}else {
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)){
@@ -166,7 +166,7 @@ public class ConfigReader {
CustomCrops.instance.getLogger().warning("未检测到插件 WorldGuard!");
}else {
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)){
@@ -174,7 +174,15 @@ public class ConfigReader {
CustomCrops.instance.getLogger().warning("未检测到插件 GriefDefender!");
}else {
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();
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);
if (seasonChange) {
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>当前季节变换模式: <gold>自动");
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 sprinklerEmpty;
public static String sprinklerRight;
public static String beforePlant;
public static double cropOffset;
public static double sprinklerOffset;
@@ -324,6 +338,7 @@ public class ConfigReader {
setSeason = config.getString("messages.set-season");
wrongArgs = config.getString("messages.wrong-args");
forceSave = config.getString("messages.force-save");
beforePlant = config.getString("messages.before-plant");
hasCropInfo = config.getBoolean("hologram.grow-info.enable");
if (hasCropInfo){
@@ -385,6 +400,7 @@ public class ConfigReader {
}
CROPS.put(key, cropInstance);
});
AdventureManager.consoleMessage("<gradient:#ff206c:#fdee55>[CustomCrops] </gradient><color:#FFEBCD>已载入 <white>" + CROPS.size() + " <color:#FFEBCD>种农作物!");
}
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>种肥料!");
}
}

View File

@@ -137,9 +137,19 @@ public class Executor implements CommandExecutor {
}
default -> {
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 {
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> 强制更新缓存并保存");
}
}
}

View 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());
}
}

View File

@@ -23,7 +23,7 @@ public record Residence() implements Integration {
ClaimedResidence res = com.bekvon.bukkit.residence.Residence.getInstance().getResidenceManager().getByLoc(location);
if(res!=null){
ResidencePermissions perms = res.getPermissions();
return perms.playerHas(player, Flags.harvest, true);
return perms.playerHas(player, Flags.destroy, true);
}
return true;
}

View File

@@ -19,7 +19,6 @@ public record WorldGuard() implements Integration {
RegionQuery query = container.createQuery();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
if (set != null){
System.out.println(set);
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BUILD);
}else {
return true;
@@ -33,7 +32,6 @@ public record WorldGuard() implements Integration {
RegionQuery query = container.createQuery();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
if (set != null){
System.out.println(set);
return query.testState(BukkitAdapter.adapt(location), localPlayer, Flags.BLOCK_BREAK);
}else {
return true;

View File

@@ -7,6 +7,7 @@ import net.momirealms.customcrops.ConfigReader;
import net.momirealms.customcrops.datamanager.PotManager;
import net.momirealms.customcrops.fertilizer.Fertilizer;
import net.momirealms.customcrops.fertilizer.QualityCrop;
import net.momirealms.customcrops.integrations.Integration;
import net.momirealms.customcrops.utils.CropInstance;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Location;
@@ -28,9 +29,12 @@ public class BreakBlock implements Listener {
String namespacedId = event.getNamespacedID();
if(namespacedId.contains("_stage_")){
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){
event.setCancelled(true);
Location location = event.getBlock().getLocation();
CustomBlock.place(namespacedId, location);
CustomBlock.byAlreadyPlaced(location.getBlock()).getLoot().forEach(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]);
ThreadLocalRandom current = ThreadLocalRandom.current();
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);
World world = location.getWorld();
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());
}
}
}else {
normalDrop(cropInstance, random, itemLoc, world);
}
}
else {
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());
}
}
normalDrop(cropInstance, random, itemLoc, world);
}
}
}
@@ -86,6 +82,9 @@ public class BreakBlock implements Listener {
PotManager.Cache.remove(location);
World world = location.getWorld();
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){
String cropNamespacedId = CustomBlock.byAlreadyPlaced(blockUp).getNamespacedID();
if(cropNamespacedId.contains("_stage_")){
@@ -120,16 +119,7 @@ public class BreakBlock implements Listener {
}
}
else {
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());
}
}
normalDrop(cropInstance, random, itemLoc, world);
}
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());
}
}
}
}

View File

@@ -49,11 +49,11 @@ public class InteractEntity implements Listener {
int z = location.getBlockZ();
int maxWater = config.getWater();
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){
itemStack.setType(Material.BUCKET);
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){
currentWater = sprinkler.getWater();
currentWater += ConfigReader.Config.sprinklerRefill;
@@ -62,21 +62,27 @@ public class InteractEntity implements Listener {
}
sprinkler.setWater(currentWater);
}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");
currentWater = plugin.getSprinklerManager().data.getInt(stringBuilder.toString());
String path = world + "." + x / 16 + "," + z / 16 + "." + x + "," + location.getBlockY() + "," + z + ".water";
currentWater = plugin.getSprinklerManager().data.getInt(path);
currentWater += ConfigReader.Config.sprinklerRefill;
if (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){
String string = ConfigReader.Message.sprinklerLeft + ConfigReader.Message.sprinklerFull.repeat(currentWater) +
ConfigReader.Message.sprinklerEmpty.repeat(maxWater - currentWater) + ConfigReader.Message.sprinklerRight;
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);
}
}
}

View File

@@ -5,7 +5,6 @@ import de.tr7zw.changeme.nbtapi.NBTItem;
import dev.lone.itemsadder.api.CustomBlock;
import dev.lone.itemsadder.api.CustomStack;
import net.momirealms.customcrops.ConfigReader;
import net.momirealms.customcrops.CustomCrops;
import net.momirealms.customcrops.datamanager.CropManager;
import net.momirealms.customcrops.datamanager.PotManager;
import net.momirealms.customcrops.datamanager.SeasonManager;
@@ -92,19 +91,12 @@ public class RightClick implements Listener {
world.dropItem(itemLoc, CustomStack.getInstance(cropInstance.getQuality_3()).getItemStack());
}
}
}else {
BreakBlock.normalDrop(cropInstance, random, itemLoc, world);
}
}
else {
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());
}
}
BreakBlock.normalDrop(cropInstance, random, itemLoc, world);
}
}else {
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();
if (namespacedID.equals(ConfigReader.Basic.pot) || namespacedID.equals(ConfigReader.Basic.watered_pot)){
itemStack.setAmount(itemStack.getAmount() - 1);
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
addFertilizer(fertilizerConfig, block);
}else if (!fertilizerConfig.isBefore() && namespacedID.contains("_stage_")){
itemStack.setAmount(itemStack.getAmount() - 1);
addFertilizer(fertilizerConfig, block);
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
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);
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
addFertilizer(fertilizerConfig, block);
}
}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);
addFertilizer(fertilizerConfig, block);
player.getWorld().playSound(player.getLocation(), Sound.ITEM_HOE_TILL,1,1);
}else {
AdventureManager.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.beforePlant);
return;
}
}
return;
}
@@ -249,6 +258,7 @@ public class RightClick implements Listener {
return;
}
Sprinkler sprinklerData = new Sprinkler(sprinkler.get().getRange(), 0);
itemStack.setAmount(itemStack.getAmount() - 1);
SprinklerManager.Cache.put(location.add(0,1,0), sprinklerData);
IAFurniture.placeFurniture(sprinkler.get().getNamespacedID_2(),location);
return;

View File

@@ -1,6 +1,5 @@
package net.momirealms.customcrops.utils;
import net.momirealms.customcrops.ConfigReader;
import net.momirealms.customcrops.CustomCrops;
import java.io.File;

View File

@@ -8,7 +8,6 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.momirealms.customcrops.ConfigReader;
import net.momirealms.customcrops.CustomCrops;
import org.bukkit.Bukkit;
import org.bukkit.Location;

View File

@@ -1,16 +1,6 @@
package net.momirealms.customcrops.utils;
public class WateringCan {
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 record WateringCan(int max, int width, int length) {
public int getMax() {
return max;