diff --git a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/DefaultStorageIntegrable.java b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/DefaultStorageIntegrable.java index 13b233c..1519b23 100644 --- a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/DefaultStorageIntegrable.java +++ b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/DefaultStorageIntegrable.java @@ -8,6 +8,16 @@ import org.bukkit.inventory.ItemStack; public final class DefaultStorageIntegrable implements StorageIntegrable { + @Override + public boolean isFull(Location location) { + BlockState state = location.getBlock().getState(); + if (state instanceof Container container) { + return container.getInventory().firstEmpty() == -1; + } + + return true; + } + @Override public boolean flush(Location location, ObjectArrayList items) { BlockState state = location.getBlock().getState(); diff --git a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegrable.java b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegrable.java index 332d95f..249adf5 100644 --- a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegrable.java +++ b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegrable.java @@ -7,5 +7,7 @@ import org.bukkit.inventory.ItemStack; public interface StorageIntegrable extends Integrable { + boolean isFull(Location location); + boolean flush(Location location, ObjectArrayList items); } diff --git a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegration.java b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegration.java index df54e7d..8210e9c 100644 --- a/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegration.java +++ b/src/main/java/com/artillexstudios/axminions/integrations/implementation/storage/StorageIntegration.java @@ -13,6 +13,16 @@ public final class StorageIntegration extends Integration { this.register(new DefaultStorageIntegrable()); } + public boolean isFull(Location location) { + for (StorageIntegrable integration : this.integrations()) { + if (integration.isFull(location)) { + return true; + } + } + + return false; + } + public void push(Location location, ItemStack... itemStacks) { ObjectArrayList items = this.items.get(location); if (items != null) { diff --git a/src/main/java/com/artillexstudios/axminions/minions/Minion.java b/src/main/java/com/artillexstudios/axminions/minions/Minion.java index 8a359ae..ea28d21 100644 --- a/src/main/java/com/artillexstudios/axminions/minions/Minion.java +++ b/src/main/java/com/artillexstudios/axminions/minions/Minion.java @@ -89,6 +89,10 @@ public final class Minion { } } + public Location linkedChest() { + return this.minionData.linkedChest(); + } + public Map extraData() { return this.minionData.extraData(); } diff --git a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/Effect.java b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/Effect.java index 4019fa7..9ddafac 100644 --- a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/Effect.java +++ b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/Effect.java @@ -29,9 +29,13 @@ public abstract class Effect { } public void dispatch(Minion minion, T argument) { + new EffectDispatchEvent(minion, this, argument).call(); Z out = run(minion, argument); - new EffectDispatchEvent(minion, this, argument).call(); + if (out == null) { + return; + } + ObjectArrayList> children = this.children; if (children == null) { return; diff --git a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/AddToContainerEffect.java b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/AddToContainerEffect.java index 31d0b51..8b68261 100644 --- a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/AddToContainerEffect.java +++ b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/AddToContainerEffect.java @@ -1,8 +1,10 @@ package com.artillexstudios.axminions.minions.actions.effects.implementation; +import com.artillexstudios.axminions.integrations.Integrations; import com.artillexstudios.axminions.minions.Minion; import com.artillexstudios.axminions.minions.actions.effects.Effect; import com.artillexstudios.axminions.utils.ItemCollection; +import org.bukkit.inventory.ItemStack; import java.util.Map; @@ -14,8 +16,12 @@ public class AddToContainerEffect extends Effect @Override public ItemCollection run(Minion minion, ItemCollection argument) { - // TODO: Add to container - return argument; + if (minion.linkedChest() == null) { + return argument; + } + + Integrations.STORAGE.push(minion.linkedChest(), argument.elements()); + return null; } @Override diff --git a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/DropAtMinionEffect.java b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/DropAtMinionEffect.java index 4fadcaa..32c3cdb 100644 --- a/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/DropAtMinionEffect.java +++ b/src/main/java/com/artillexstudios/axminions/minions/actions/effects/implementation/DropAtMinionEffect.java @@ -17,6 +17,10 @@ public class DropAtMinionEffect extends Effect { @Override public ItemCollection run(Minion minion, ItemCollection argument) { + if (argument == ItemCollection.EMPTY) { + return null; + } + World world = minion.location().getWorld(); if (world == null) { throw new MinionTickFailException("World is null!"); @@ -26,7 +30,7 @@ public class DropAtMinionEffect extends Effect { world.dropItem(minion.location(), itemStack); } - return ItemCollection.EMPTY; + return null; } @Override diff --git a/src/main/java/com/artillexstudios/axminions/utils/ItemCollection.java b/src/main/java/com/artillexstudios/axminions/utils/ItemCollection.java index 8fba1fd..0f2e360 100644 --- a/src/main/java/com/artillexstudios/axminions/utils/ItemCollection.java +++ b/src/main/java/com/artillexstudios/axminions/utils/ItemCollection.java @@ -1,5 +1,6 @@ package com.artillexstudios.axminions.utils; +import com.artillexstudios.axapi.reflection.FastFieldAccessor; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -13,6 +14,7 @@ import java.util.function.Predicate; import java.util.stream.Stream; public class ItemCollection { + private static final FastFieldAccessor ELEMENT_DATA = FastFieldAccessor.forClassField(ArrayList.class, "elementData"); public static final ItemCollection EMPTY = new ItemCollection(0) { @Override public ItemStack remove(int index) { @@ -52,6 +54,7 @@ public class ItemCollection { } public ItemCollection(Collection collection) { + LogUtils.debug("ItemCollection with class: {}", collection.getClass()); this.items = collection instanceof List list ? list : new ArrayList<>(collection); } @@ -95,6 +98,10 @@ public class ItemCollection { return this.items; } + public ItemStack[] elements() { + return ELEMENT_DATA.get(this.items); + } + @NotNull public Iterator iterator() { return this.items.iterator();