diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java index e6bbda9..ea7b45e 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java @@ -21,7 +21,6 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.misc.value.MathValue; -import org.bukkit.entity.Player; public abstract class AbstractBuiltInAction implements Action { diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java index dc8a4ac..154c7e5 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java @@ -33,6 +33,9 @@ import static java.util.Objects.requireNonNull; public class ActionSpawnEntity extends AbstractBuiltInAction { private final String id; + private MathValue x; + private MathValue y; + private MathValue z; private final Map properties; public ActionSpawnEntity( @@ -42,6 +45,9 @@ public class ActionSpawnEntity extends AbstractBuiltInAction { ) { super(plugin, chance); this.id = section.getString("id"); + this.x = MathValue.auto(section.get("x", 0)); + this.y = MathValue.auto(section.get("y", 0)); + this.z = MathValue.auto(section.get("z", 0)); Section proeprtySection = section.getSection("properties"); this.properties = proeprtySection == null ? new HashMap<>() : proeprtySection.getStringRouteMappedValues(false); } @@ -49,6 +55,7 @@ public class ActionSpawnEntity extends AbstractBuiltInAction { @Override protected void triggerAction(Context context) { Location location = requireNonNull(context.arg(ContextKeys.LOCATION)); + location = location.clone().add(this.x.evaluate(context), this.y.evaluate(context), this.z.evaluate(context)); String finalID; EntityProvider provider; if (id.contains(":")) { diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsBlockStateImpl.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsBlockStateImpl.java index b63ee7d..3d833bc 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsBlockStateImpl.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsBlockStateImpl.java @@ -20,7 +20,6 @@ package net.momirealms.customcrops.api.core.world; import com.flowpowered.nbt.CompoundMap; import com.flowpowered.nbt.CompoundTag; import com.flowpowered.nbt.Tag; -import com.flowpowered.nbt.stream.NBTInputStream; import net.momirealms.customcrops.api.core.SynchronizedCompoundMap; import net.momirealms.customcrops.api.core.block.CustomCropsBlock; import net.momirealms.customcrops.api.util.TagUtils; diff --git a/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java b/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java index 284afe1..06401c4 100644 --- a/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java +++ b/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java @@ -26,7 +26,6 @@ import io.th0rgal.oraxen.api.events.custom_block.stringblock.OraxenStringBlockPl import io.th0rgal.oraxen.api.events.furniture.OraxenFurnitureBreakEvent; import io.th0rgal.oraxen.api.events.furniture.OraxenFurnitureInteractEvent; import io.th0rgal.oraxen.api.events.furniture.OraxenFurniturePlaceEvent; -import io.th0rgal.oraxen.font.Glyph; import net.momirealms.customcrops.api.core.AbstractCustomEventListener; import net.momirealms.customcrops.api.core.AbstractItemManager; import org.bukkit.Material; diff --git a/gradle.properties b/gradle.properties index fe9368e..aa02b1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.6.27.1 +project_version=3.6.28 config_version=42 project_group=net.momirealms diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java index d65f5e3..b36e4a5 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java @@ -54,6 +54,7 @@ public class PlayerRequirementManager extends AbstractRequirementManager this.registerPotionEffectRequirement(); this.registerSneakRequirement(); this.registerGameModeRequirement(); + this.registerHandRequirement(); } @Override @@ -345,4 +346,21 @@ public class PlayerRequirementManager extends AbstractRequirementManager }; }, "gamemode"); } + + private void registerHandRequirement() { + registerRequirement((args, actions, advanced) -> { + String hand = ((String) args).toLowerCase(Locale.ENGLISH); + return context -> { + if (context.holder() == null) return true; + EquipmentSlot slot = context.arg(ContextKeys.SLOT); + if (slot != null) { + if (slot.name().toLowerCase(Locale.ENGLISH).equals(hand)) { + return true; + } + } + if (advanced) ActionManager.trigger(context, actions); + return false; + }; + }, "hand"); + } }