diff --git a/build.gradle b/build.gradle index c64c047..c75b83e 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.0.6' +version = '2.0.7' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customcrops/api/event/WaterBucketFillSprinklerEvent.java b/src/main/java/net/momirealms/customcrops/api/event/WaterBucketFillSprinklerEvent.java new file mode 100644 index 0000000..b56e09d --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/api/event/WaterBucketFillSprinklerEvent.java @@ -0,0 +1,45 @@ +package net.momirealms.customcrops.api.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class WaterBucketFillSprinklerEvent extends PlayerEvent implements Cancellable { + + private final ItemStack itemStack; + private boolean cancelled; + private static final HandlerList handlers = new HandlerList(); + + public WaterBucketFillSprinklerEvent(@NotNull Player who, ItemStack itemStack) { + super(who); + this.itemStack = itemStack; + this.cancelled = false; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + cancelled = cancel; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public ItemStack getItemStack() { + return itemStack; + } +} diff --git a/src/main/java/net/momirealms/customcrops/api/event/WaterCanFillSprinklerEvent.java b/src/main/java/net/momirealms/customcrops/api/event/WaterCanFillSprinklerEvent.java new file mode 100644 index 0000000..b54c88a --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/api/event/WaterCanFillSprinklerEvent.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customcrops.api.event; + +import de.tr7zw.changeme.nbtapi.NBTItem; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +public class WaterCanFillSprinklerEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private final NBTItem nbtItem; + + public WaterCanFillSprinklerEvent(@NotNull Player who, NBTItem nbtItem) { + super(who); + this.cancelled = false; + this.nbtItem = nbtItem; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return getHandlerList(); + } + + public NBTItem getNbtItem() { + return nbtItem; + } +} diff --git a/src/main/java/net/momirealms/customcrops/api/event/WaterPotEvent.java b/src/main/java/net/momirealms/customcrops/api/event/WaterPotEvent.java new file mode 100644 index 0000000..83dcc05 --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/api/event/WaterPotEvent.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) <2022> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customcrops.api.event; + +import de.tr7zw.changeme.nbtapi.NBTItem; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + +public class WaterPotEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; + private final NBTItem nbtItem; + private int currentWater; + private final Location location; + + public WaterPotEvent(@NotNull Player who, Location location, NBTItem nbtItem, int currentWater) { + super(who); + this.cancelled = false; + this.nbtItem = nbtItem; + this.currentWater = currentWater; + this.location = location; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return getHandlerList(); + } + + public NBTItem getNbtItem() { + return nbtItem; + } + + public int getCurrentWater() { + return currentWater; + } + + public void setCurrentWater(int currentWater) { + this.currentWater = currentWater; + } + + public Location getLocation() { + return location; + } +} diff --git a/src/main/java/net/momirealms/customcrops/api/event/WateringCanFillEvent.java b/src/main/java/net/momirealms/customcrops/api/event/WateringCanFillEvent.java index b78fb57..016a1d9 100644 --- a/src/main/java/net/momirealms/customcrops/api/event/WateringCanFillEvent.java +++ b/src/main/java/net/momirealms/customcrops/api/event/WateringCanFillEvent.java @@ -17,6 +17,7 @@ package net.momirealms.customcrops.api.event; +import de.tr7zw.changeme.nbtapi.NBTItem; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; @@ -28,12 +29,14 @@ public class WateringCanFillEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancelled; - private ItemStack itemStack; + private final NBTItem nbtItem; + private int currentWater; - public WateringCanFillEvent(@NotNull Player who, ItemStack itemStack) { + public WateringCanFillEvent(@NotNull Player who, NBTItem nbtItem, int currentWater) { super(who); this.cancelled = false; - this.itemStack = itemStack; + this.nbtItem = nbtItem; + this.currentWater = currentWater; } @Override @@ -57,15 +60,15 @@ public class WateringCanFillEvent extends PlayerEvent implements Cancellable { return getHandlerList(); } - /** - * Get the item player use - * @return itemStack - */ - public ItemStack getItemStack() { - return itemStack; + public NBTItem getNbtItem() { + return nbtItem; } - public void setItemStack(ItemStack itemStack) { - this.itemStack = itemStack; + public int getCurrentWater() { + return currentWater; + } + + public void setCurrentWater(int currentWater) { + this.currentWater = currentWater; } } diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index 9e79c01..1ee970a 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -204,7 +204,7 @@ public class MainConfig { skyLightLevel = config.getInt("mechanics.dead-if-no-sky-light.level", 10); needSkyLight = config.getBoolean("mechanics.dead-if-no-sky-light.enable", true); - enableEvents = config.getBoolean("other-settings.enable-events", false); + enableEvents = config.getBoolean("other-settings.enable-additional-events", false); String[] split = StringUtils.split(config.getString("mechanics.default-quality-ratio", "17/2/1"), "/"); double[] weight = new double[3]; diff --git a/src/main/java/net/momirealms/customcrops/integrations/customplugin/HandlerP.java b/src/main/java/net/momirealms/customcrops/integrations/customplugin/HandlerP.java index abe7145..79f6b10 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/customplugin/HandlerP.java +++ b/src/main/java/net/momirealms/customcrops/integrations/customplugin/HandlerP.java @@ -48,7 +48,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.ShapedRecipe; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -105,12 +104,10 @@ public abstract class HandlerP extends Function { if (itemStack.getType() == Material.WATER_BUCKET) { - if (MainConfig.enableEvents) { - SprinklerFillEvent sprinklerFillEvent = new SprinklerFillEvent(player, itemStack); - Bukkit.getPluginManager().callEvent(sprinklerFillEvent); - if (sprinklerFillEvent.isCancelled()) { - return; - } + WaterBucketFillSprinklerEvent waterBucketFillSprinklerEvent = new WaterBucketFillSprinklerEvent(player, itemStack); + Bukkit.getPluginManager().callEvent(waterBucketFillSprinklerEvent); + if (waterBucketFillSprinklerEvent.isCancelled()) { + return; } itemStack.setType(Material.BUCKET); @@ -137,12 +134,10 @@ public abstract class HandlerP extends Function { int canWater = nbtItem.getInteger("WaterAmount"); if (canWater > 0) { - if (MainConfig.enableEvents) { - SprinklerFillEvent sprinklerFillEvent = new SprinklerFillEvent(player, itemStack); - Bukkit.getPluginManager().callEvent(sprinklerFillEvent); - if (sprinklerFillEvent.isCancelled()) { - return; - } + WaterCanFillSprinklerEvent waterCanFillSprinklerEvent = new WaterCanFillSprinklerEvent(player, nbtItem); + Bukkit.getPluginManager().callEvent(waterCanFillSprinklerEvent); + if (waterCanFillSprinklerEvent.isCancelled()) { + return; } nbtItem.setInteger("WaterAmount", --canWater); @@ -207,12 +202,10 @@ public abstract class HandlerP extends Function { if (customWorld == null) return false; Fertilizer fertilizer = customWorld.getFertilizer(potLoc); - if (MainConfig.enableEvents) { - SurveyorUseEvent surveyorUseEvent = new SurveyorUseEvent(player, fertilizer, potLoc); - Bukkit.getPluginManager().callEvent(surveyorUseEvent); - if (surveyorUseEvent.isCancelled()) { - return true; - } + SurveyorUseEvent surveyorUseEvent = new SurveyorUseEvent(player, fertilizer, potLoc); + Bukkit.getPluginManager().callEvent(surveyorUseEvent); + if (surveyorUseEvent.isCancelled()) { + return true; } if (fertilizer != null) { @@ -298,12 +291,10 @@ public abstract class HandlerP extends Function { return true; } - if (MainConfig.enableEvents) { - SprinklerPlaceEvent sprinklerPlaceEvent = new SprinklerPlaceEvent(player, sprinklerLoc); - Bukkit.getPluginManager().callEvent(sprinklerPlaceEvent); - if (sprinklerPlaceEvent.isCancelled()) { - return true; - } + SprinklerPlaceEvent sprinklerPlaceEvent = new SprinklerPlaceEvent(player, sprinklerLoc); + Bukkit.getPluginManager().callEvent(sprinklerPlaceEvent); + if (sprinklerPlaceEvent.isCancelled()) { + return true; } if (SoundConfig.placeSprinkler.isEnable()) { @@ -344,18 +335,14 @@ public abstract class HandlerP extends Function { if (block.getType() == Material.WATER) { if (config.getMax() > water) { - if (MainConfig.enableEvents) { - WateringCanFillEvent wateringCanFillEvent = new WateringCanFillEvent(player, itemStack); - Bukkit.getPluginManager().callEvent(wateringCanFillEvent); - if (wateringCanFillEvent.isCancelled()) { - return true; - } + WateringCanFillEvent wateringCanFillEvent = new WateringCanFillEvent(player, nbtItem, water += MainConfig.waterToWaterCan); + Bukkit.getPluginManager().callEvent(wateringCanFillEvent); + if (wateringCanFillEvent.isCancelled()) { + return true; } - water += MainConfig.waterToWaterCan; - if (water > config.getMax()) water = config.getMax(); - nbtItem.setInteger("WaterAmount", water); - + if (wateringCanFillEvent.getCurrentWater() > config.getMax()) water = config.getMax(); + nbtItem.setInteger("WaterAmount", wateringCanFillEvent.getCurrentWater()); if (SoundConfig.addWaterToCan.isEnable()) { AdventureUtil.playerSound( @@ -371,7 +358,7 @@ public abstract class HandlerP extends Function { } if (MainConfig.enableWaterCanLore && !MainConfig.enablePacketLore) { - addWaterLore(nbtItem, config, water); + addWaterLore(nbtItem, config, wateringCanFillEvent.getCurrentWater()); } itemStack.setItemMeta(nbtItem.getItem().getItemMeta()); @@ -440,12 +427,10 @@ public abstract class HandlerP extends Function { } } - if (MainConfig.enableEvents) { - FertilizerUseEvent fertilizerUseEvent = new FertilizerUseEvent(player, fertilizer, potLoc); - Bukkit.getPluginManager().callEvent(fertilizerUseEvent); - if (fertilizerUseEvent.isCancelled()) { - return true; - } + FertilizerUseEvent fertilizerUseEvent = new FertilizerUseEvent(player, fertilizer, potLoc); + Bukkit.getPluginManager().callEvent(fertilizerUseEvent); + if (fertilizerUseEvent.isCancelled()) { + return true; } if (fertilizer.getParticle() != null) { @@ -601,12 +586,10 @@ public abstract class HandlerP extends Function { } } - if (MainConfig.enableEvents) { - SeedPlantEvent seedPlantEvent = new SeedPlantEvent(player, seedLoc, crop); - Bukkit.getPluginManager().callEvent(seedPlantEvent); - if (seedPlantEvent.isCancelled()) { - return false; - } + SeedPlantEvent seedPlantEvent = new SeedPlantEvent(player, seedLoc, crop); + Bukkit.getPluginManager().callEvent(seedPlantEvent); + if (seedPlantEvent.isCancelled()) { + return false; } if (SoundConfig.plantSeed.isEnable() && player != null) { diff --git a/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderHandler.java b/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderHandler.java index d1fea1f..9221ffb 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderHandler.java +++ b/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderHandler.java @@ -19,13 +19,12 @@ package net.momirealms.customcrops.integrations.customplugin.itemsadder; import de.tr7zw.changeme.nbtapi.NBTCompound; import de.tr7zw.changeme.nbtapi.NBTItem; -import dev.lone.itemsadder.api.CustomBlock; import dev.lone.itemsadder.api.CustomStack; import dev.lone.itemsadder.api.Events.*; import net.kyori.adventure.key.Key; import net.momirealms.customcrops.CustomCrops; import net.momirealms.customcrops.api.crop.Crop; -import net.momirealms.customcrops.api.event.WaterEvent; +import net.momirealms.customcrops.api.event.WaterPotEvent; import net.momirealms.customcrops.config.*; import net.momirealms.customcrops.integrations.AntiGrief; import net.momirealms.customcrops.integrations.customplugin.HandlerP; @@ -34,7 +33,6 @@ import net.momirealms.customcrops.integrations.customplugin.itemsadder.listeners import net.momirealms.customcrops.managers.CropManager; import net.momirealms.customcrops.managers.CustomWorld; import net.momirealms.customcrops.objects.WaterCan; -import net.momirealms.customcrops.objects.fertilizer.Fertilizer; import net.momirealms.customcrops.utils.AdventureUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; @@ -150,12 +148,10 @@ public abstract class ItemsAdderHandler extends HandlerP { int water = nbtItem.getInteger("WaterAmount"); if (water > 0) { - if (MainConfig.enableEvents) { - WaterEvent waterEvent = new WaterEvent(player, can.getItemStack()); - Bukkit.getPluginManager().callEvent(waterEvent); - if (waterEvent.isCancelled()) { - return true; - } + WaterPotEvent waterPotEvent = new WaterPotEvent(player, potLoc, nbtItem, --water); + Bukkit.getPluginManager().callEvent(waterPotEvent); + if (waterPotEvent.isCancelled()) { + return true; } NBTCompound nbtCompound = nbtItem.getCompound("itemsadder"); @@ -173,7 +169,7 @@ public abstract class ItemsAdderHandler extends HandlerP { } } - nbtItem.setInteger("WaterAmount", --water); + nbtItem.setInteger("WaterAmount", waterPotEvent.getCurrentWater()); if (SoundConfig.waterPot.isEnable()) { AdventureUtil.playerSound( diff --git a/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHandler.java b/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHandler.java index 6cd5635..131a328 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHandler.java +++ b/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHandler.java @@ -24,7 +24,7 @@ import io.th0rgal.oraxen.items.OraxenItems; import io.th0rgal.oraxen.mechanics.provided.gameplay.furniture.FurnitureMechanic; import net.momirealms.customcrops.CustomCrops; import net.momirealms.customcrops.api.crop.Crop; -import net.momirealms.customcrops.api.event.WaterEvent; +import net.momirealms.customcrops.api.event.WaterPotEvent; import net.momirealms.customcrops.config.*; import net.momirealms.customcrops.integrations.customplugin.HandlerP; import net.momirealms.customcrops.integrations.customplugin.oraxen.listeners.OraxenBlockListener; @@ -144,15 +144,13 @@ public abstract class OraxenHandler extends HandlerP { int water = nbtItem.getInteger("WaterAmount"); if (water > 0) { - if (MainConfig.enableEvents) { - WaterEvent waterEvent = new WaterEvent(player, can); - Bukkit.getPluginManager().callEvent(waterEvent); - if (waterEvent.isCancelled()) { - return true; - } + WaterPotEvent waterPotEvent = new WaterPotEvent(player, potLoc, nbtItem, --water); + Bukkit.getPluginManager().callEvent(waterPotEvent); + if (waterPotEvent.isCancelled()) { + return true; } - nbtItem.setInteger("WaterAmount", --water); + nbtItem.setInteger("WaterAmount", waterPotEvent.getCurrentWater()); if (SoundConfig.waterPot.isEnable()) { AdventureUtil.playerSound( diff --git a/src/main/java/net/momirealms/customcrops/managers/CropManager.java b/src/main/java/net/momirealms/customcrops/managers/CropManager.java index 20f53ab..19f25b0 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -332,11 +332,9 @@ public class CropManager extends Function { public void proceedHarvest(Crop crop, Player player, Location location, @Nullable Fertilizer fertilizer, boolean isRightClick) { //Call harvest event - if (MainConfig.enableEvents) { - CropHarvestEvent cropHarvestEvent = new CropHarvestEvent(player, crop, location, fertilizer); - Bukkit.getPluginManager().callEvent(cropHarvestEvent); - if (cropHarvestEvent.isCancelled()) return; - } + CropHarvestEvent cropHarvestEvent = new CropHarvestEvent(player, crop, location, fertilizer); + Bukkit.getPluginManager().callEvent(cropHarvestEvent); + if (cropHarvestEvent.isCancelled()) return; if (!isRightClick && player.getGameMode() == GameMode.CREATIVE) return; ActionInterface[] actions = crop.getActions(); @@ -444,10 +442,8 @@ public class CropManager extends Function { if (Math.random() < MainConfig.crowChance && !hasScarecrow(location)) { Bukkit.getScheduler().runTask(CustomCrops.plugin, () -> { - if (MainConfig.enableEvents) { - CrowAttackEvent crowAttackEvent = new CrowAttackEvent(location); - Bukkit.getPluginManager().callEvent(crowAttackEvent); - } + CrowAttackEvent crowAttackEvent = new CrowAttackEvent(location); + Bukkit.getPluginManager().callEvent(crowAttackEvent); for (Player player : location.getNearbyPlayers(48)) { CrowTask crowTask = new CrowTask(player, location.clone().add(0.4,0,0.4), getArmorStandUtil()); crowTask.runTaskTimerAsynchronously(CustomCrops.plugin, 1, 1); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e61cf07..de7953b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,6 @@ # Don't change # 请不要修改 -config-version: '16' +config-version: '17' # lang: english / spanish / chinese lang: english @@ -313,5 +313,7 @@ other-settings: # 3 days = 1 hour # Save the cache to file data-save-interval: 3 - # API events - enable-events: false \ No newline at end of file + # PreAction events. + # It's useful if your anti grief plugin is not supported + # You can listen to PreActionEvent and cancel all the CustomCrops related events + enable-additional-events: false \ No newline at end of file