diff --git a/src/main/java/studio/fantasyit/maid_useful_task/api/ItemLocateEvent.java b/src/main/java/studio/fantasyit/maid_useful_task/api/ItemLocateEvent.java new file mode 100644 index 0000000..0573128 --- /dev/null +++ b/src/main/java/studio/fantasyit/maid_useful_task/api/ItemLocateEvent.java @@ -0,0 +1,29 @@ +package studio.fantasyit.maid_useful_task.api; + +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; + +@Cancelable +public class ItemLocateEvent extends Event { + public final ItemStack itemStack; + public final EntityMaid maid; + public final BlockPos cache; + public BlockPos target = null; + + public ItemLocateEvent(ItemStack itemStack, EntityMaid maid, BlockPos cache) { + this.itemStack = itemStack; + this.maid = maid; + this.cache = cache; + } + + public BlockPos getTarget() { + return target; + } + + public void setTarget(BlockPos target) { + this.target = target; + } +} \ No newline at end of file diff --git a/src/main/java/studio/fantasyit/maid_useful_task/task/MaidLocateTask.java b/src/main/java/studio/fantasyit/maid_useful_task/task/MaidLocateTask.java index 54d62e9..64659d6 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/task/MaidLocateTask.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/task/MaidLocateTask.java @@ -22,9 +22,11 @@ import net.minecraft.world.item.component.LodestoneTracker; import net.minecraft.world.item.component.MapDecorations; import net.minecraft.world.level.saveddata.maps.MapDecorationTypes; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import net.minecraftforge.common.MinecraftForge; import org.jetbrains.annotations.Nullable; import studio.fantasyit.maid_useful_task.Config; import studio.fantasyit.maid_useful_task.MaidUsefulTask; +import studio.fantasyit.maid_useful_task.api.ItemLocateEvent; import studio.fantasyit.maid_useful_task.behavior.common.FindTargetMoveBehavior; import studio.fantasyit.maid_useful_task.behavior.common.FindTargetWaitBehavior; import studio.fantasyit.maid_useful_task.compat.CompatEntry; @@ -79,7 +81,10 @@ public class MaidLocateTask implements IMaidTask, IMaidFindTargetTask { MemoryUtil.setLocateItem(maid, itemStack); MemoryUtil.clearCommonBlockCache(maid); } - if (maid.getMainHandItem().is(Items.ENDER_EYE)) { + ItemLocateEvent event = new ItemLocateEvent(itemStack, maid, MemoryUtil.getCommonBlockCache(maid)); + if (MinecraftForge.EVENT_BUS.post(event)) { + target = event.getTarget(); + } else if (maid.getMainHandItem().is(Items.ENDER_EYE)) { target = MemoryUtil.getCommonBlockCache(maid); if (target == null) { BlockPos blockpos = level.findNearestMapStructure(StructureTags.EYE_OF_ENDER_LOCATED, maid.blockPosition(), 100, false);