Example #1
0
        protected override void DoDeviceComplete()
        {
            deviceState = enDeviceState.IDLE;
            BlockPos    bp              = Pos.Copy().Offset(outputFace);
            BlockEntity checkblock      = Api.World.BlockAccessor.GetBlockEntity(bp);
            var         outputContainer = checkblock as BlockEntityContainer;

            if (Api.World is IServerWorldAccessor)
            {
                DummyInventory dummy = new DummyInventory(Api);

                List <ItemStack> outputitems = MacerationRecipe.GetMacerate(workingitem, Api, MachineName);
                foreach (ItemStack outitem in outputitems)
                {
                    if (outitem == null)
                    {
                        continue;
                    }
                    dummy[0].Itemstack = outitem;
                    //no output conatiner, spitout stuff
                    if (outputContainer != null)
                    {
                        bool stoptrying    = false;
                        int  safetycounter = 0;
                        while (!stoptrying)
                        {
                            WeightedSlot tryoutput = outputContainer.Inventory.GetBestSuitedSlot(dummy[0]);

                            if (tryoutput.slot != null)
                            {
                                ItemStackMoveOperation op = new ItemStackMoveOperation(Api.World, EnumMouseButton.Left, 0, EnumMergePriority.DirectMerge, dummy[0].StackSize);

                                dummy[0].TryPutInto(tryoutput.slot, ref op);
                                tryoutput.slot.MarkDirty();
                                if (dummy[0] == null)
                                {
                                    stoptrying = true;
                                }
                                else if (dummy[0].StackSize == 0)
                                {
                                    stoptrying = true;
                                }
                            }
                            else
                            {
                                stoptrying = true;
                            }
                            safetycounter++;
                            if (safetycounter > 24)
                            {
                                stoptrying = true;
                            }
                        }
                    }
                    Vec3d pos = bp.ToVec3d();

                    dummy.DropAll(pos);
                }
            }
        }
Example #2
0
        void TryStart()
        {
            BlockPos    bp         = Pos.Copy().Offset(rmInputFace);
            BlockEntity checkblock = Api.World.BlockAccessor.GetBlockEntity(bp);

            deviceState = enDeviceState.MATERIALHOLD;
            if (Api.World is IServerWorldAccessor)
            {
                workingitem = null;
                var inputContainer = checkblock as BlockEntityContainer;
                if (inputContainer == null)
                {
                    return;
                }
                if (inputContainer.Inventory.Empty)
                {
                    return;
                }
                for (int c = 0; c < inputContainer.Inventory.Count; c++)
                {
                    ItemSlot checkslot = inputContainer.Inventory[c];
                    if (checkslot == null)
                    {
                        continue;
                    }
                    if (checkslot.StackSize == 0)
                    {
                        continue;
                    }

                    Item  checkitem   = checkslot.Itemstack.Item;
                    Block checkiblock = checkslot.Itemstack.Block;

                    if (checkitem == null && checkiblock == null)
                    {
                        continue;
                    }
                    CollectibleObject co;
                    if (checkitem != null)
                    {
                        co = checkitem as CollectibleObject;
                    }
                    else
                    {
                        co = checkiblock as CollectibleObject;
                    }

                    if (!MacerationRecipe.CanMacerate(co, Api, MachineName))
                    {
                        continue;
                    }
                    workingitem = co;
                    //Item has been set, need to pull one item from the stack
                    deviceState = enDeviceState.RUNNING;
                    checkslot.TakeOut(1);
                    checkslot.MarkDirty();
                    break;
                }
            }
        }