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