9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2025-12-24 17:39:26 +00:00
This commit is contained in:
Xiao-MoMi
2022-10-29 13:18:38 +08:00
parent b79fc94beb
commit 562a65036c
11 changed files with 257 additions and 91 deletions

View File

@@ -4,7 +4,7 @@ plugins {
}
group = 'net.momirealms'
version = '2.0.6'
version = '2.0.7'
repositories {
mavenCentral()

View File

@@ -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;
}
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright (C) <2022> <XiaoMoMi>
*
* 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 <https://www.gnu.org/licenses/>.
*/
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;
}
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright (C) <2022> <XiaoMoMi>
*
* 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 <https://www.gnu.org/licenses/>.
*/
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;
}
}

View File

@@ -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;
}
}

View File

@@ -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];

View File

@@ -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) {

View File

@@ -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(

View File

@@ -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(

View File

@@ -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);

View File

@@ -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
# 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