private void SwitchStacks(ItemStack HoldingStack) { ItemStack TmpStack = HoldingStack; World.GetCurrentPlayer().HoldingStack = ItemStack; ItemStack = TmpStack; }
private void MergeStacks(ItemStack HoldingStack) { switch(State) { case SlotState.Normal: case SlotState.OutputLocked: if (HoldingStack.Count + ItemStack.Count <= ItemStack.MAX_STACK) { ItemStack.Count = HoldingStack.Count + ItemStack.Count; World.GetCurrentPlayer().HoldingStack = null; } else { World.GetCurrentPlayer().HoldingStack.Count = HoldingStack.Count + ItemStack.Count - ItemStack.MAX_STACK; ItemStack.Count = ItemStack.MAX_STACK; } break; case SlotState.InputLocked: if (HoldingStack.Count + ItemStack.Count <= ItemStack.MAX_STACK) { World.GetCurrentPlayer().HoldingStack.Count = HoldingStack.Count + ItemStack.Count; ItemStack = null; } else { ItemStack.Count = HoldingStack.Count + ItemStack.Count - ItemStack.MAX_STACK; World.GetCurrentPlayer().HoldingStack.Count = ItemStack.MAX_STACK; } break; case SlotState.IOLocked: //nothing break; } }
private bool HandleLMBClick() { ItemStack HoldingStack = World.GetCurrentPlayer().HoldingStack; if (ItemStack == null && State == SlotState.Normal || State == SlotState.OutputLocked) { InsetHoldingToSlot(HoldingStack); } else if (ItemStack != null)// if there is something in slot { if (HoldingStack == null) { World.GetCurrentPlayer().HoldingStack = this.ItemStack; this.ItemStack = null; } else { if (HoldingStack.Item == ItemStack.Item) { MergeStacks(HoldingStack); } else // Switch { SwitchStacks(HoldingStack); } } } //Call OnStackModified delegate if (OnStackModified != null) { OnStackModified(); } return true; }
private void InsetHoldingToSlot(ItemStack HoldingStack) { if (HoldingStack != null) { ItemStack = World.GetCurrentPlayer().HoldingStack; World.GetCurrentPlayer().HoldingStack = null; } }
public void AddToInv(ItemStack AddStack) { foreach (ItemSlot S in PlayerHotbar) { if (S.ItemStack == null) { S.ItemStack = AddStack; AddStack = null; } else // if there is something in slot { if (AddStack.Item == S.ItemStack.Item) { if (AddStack.Count + S.ItemStack.Count <= ItemStack.MAX_STACK) { S.ItemStack.Count = AddStack.Count + S.ItemStack.Count; AddStack = null; } else { AddStack.Count = AddStack.Count + S.ItemStack.Count - ItemStack.MAX_STACK; S.ItemStack.Count = ItemStack.MAX_STACK; } } } if (AddStack == null || AddStack.Count == 0) break; } if (AddStack == null || AddStack.Count == 0) return; foreach (ItemSlot S in PlayerInv) { if (S.ItemStack == null) { S.ItemStack = AddStack; AddStack = null; break; } else // if there is something in slot { if (AddStack.Item == S.ItemStack.Item) { if (AddStack.Count + S.ItemStack.Count <= ItemStack.MAX_STACK) { S.ItemStack.Count = AddStack.Count + S.ItemStack.Count; AddStack = null; } else { AddStack.Count = AddStack.Count + S.ItemStack.Count - ItemStack.MAX_STACK; S.ItemStack.Count = ItemStack.MAX_STACK; } } } if (AddStack == null || AddStack.Count == 0) break; } }