Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding more click types #17

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 71 additions & 53 deletions lib/Window.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,78 +61,97 @@ module.exports = (Item) => {
}

acceptNonInventorySwapAreaClick (click) {
assert.strictEqual(click.mode, 0, 'unimplemented')
if (click.mouseButton === 0) {
this.acceptSwapAreaLeftClick(click)
} else if (click.mouseButton === 1) {
this.acceptSwapAreaRightClick(click)
assert.ok((click.mode === 0) || (click.mode === 1), 'unimplemented')

if (click.mode === 0) {
if (click.mouseButton === 0) {
this.acceptSwapAreaLeftClick(click)
} else if (click.mouseButton === 1) {
this.acceptSwapAreaRightClick(click)
}
} else if (click.mode === 1) {
this.acceptShiftClick(click)
} else {
assert.ok(false, 'unimplemented')
}
}

acceptSwapAreaRightClick (click) {
assert.strictEqual(click.mouseButton, 1)
assert.strictEqual(click.mode, 0)
assert.strictEqual(click.mouseButton, 1)

const { item } = click
if (this.selectedItem) {
if (item) {
if (item.type === this.selectedItem.type &&
item.metadata === this.selectedItem.metadata) {
item.count += 1
this.selectedItem.count -= 1
if (this.selectedItem.count === 0) this.selectedItem = null
if (click.mode === 0) {
const { item } = click
if (this.selectedItem) {
if (item) {
if (item.type === this.selectedItem.type &&
item.metadata === this.selectedItem.metadata) {
item.count += 1
this.selectedItem.count -= 1
if (this.selectedItem.count === 0) this.selectedItem = null
} else {
// swap selected item and window item
this.updateSlot(click.slot, this.selectedItem)
this.selectedItem = item
}
} else {
// swap selected item and window item
this.updateSlot(click.slot, this.selectedItem)
this.selectedItem = item
}
} else {
if (this.selectedItem.count === 1) {
this.updateSlot(click.slot, this.selectedItem)
this.selectedItem = null
} else {
this.updateSlot(click.slot, new Item(this.selectedItem.type, 1,
this.selectedItem.metadata, this.selectedItem.nbt))
this.selectedItem.count -= 1
if (this.selectedItem.count === 1) {
this.updateSlot(click.slot, this.selectedItem)
this.selectedItem = null
} else {
this.updateSlot(click.slot, new Item(this.selectedItem.type, 1,
this.selectedItem.metadata, this.selectedItem.nbt))
this.selectedItem.count -= 1
}
}
} else if (item) {
// grab 1/2 of item
this.selectedItem = new Item(item.type, Math.ceil(item.count / 2),
item.metadata, item.nbt)
item.count -= this.selectedItem.count
if (item.count === 0) this.updateSlot(item.slot, null)
}
} else if (item) {
// grab 1/2 of item
this.selectedItem = new Item(item.type, Math.ceil(item.count / 2),
item.metadata, item.nbt)
item.count -= this.selectedItem.count
if (item.count === 0) this.updateSlot(item.slot, null)
}
}

acceptShiftClick (click) {
const { item } = click
if (item && this.emptySlotCount() > 0) {
const slot = this.firstEmptyInventorySlot()
const newItem = new Item(item.type, item.count, item.metadata, item.nbt)
this.updateSlot(slot, newItem) // add to player inventory
this.updateSlot(click.slot, null)
}
}

acceptSwapAreaLeftClick (click) {
assert.strictEqual(click.mode === 0)
assert.strictEqual(click.mouseButton, 0)
assert.strictEqual(click.mode, 0)

const { item } = click
if (item && this.selectedItem &&
item.type === this.selectedItem.type &&
item.metadata === this.selectedItem.metadata) {
// drop as many held item counts into the slot as we can
const newCount = item.count + this.selectedItem.count
const leftover = newCount - item.stackSize
if (leftover <= 0) {
item.count = newCount
this.selectedItem = null
if (click.mode === 0) {
const { item } = click
if (item && this.selectedItem &&
item.type === this.selectedItem.type &&
item.metadata === this.selectedItem.metadata) {
// drop as many held item counts into the slot as we can
const newCount = item.count + this.selectedItem.count
const leftover = newCount - item.stackSize
if (leftover <= 0) {
item.count = newCount
this.selectedItem = null
} else {
item.count = item.stackSize
this.selectedItem.count = leftover
}
} else {
item.count = item.stackSize
this.selectedItem.count = leftover
// swap selected item and window item
const tmp = this.selectedItem
this.selectedItem = item
this.updateSlot(click.slot, tmp)
}
} else {
// swap selected item and window item
const tmp = this.selectedItem
this.selectedItem = item
this.updateSlot(click.slot, tmp)
}
}

// remake the item for newItem with a new Item object, don't reuse
updateSlot (slot, newItem) {
if (newItem) newItem.slot = slot
const oldItem = this.slots[slot]
Expand Down Expand Up @@ -168,8 +187,7 @@ module.exports = (Item) => {

findInventoryItem (item, metadata, notFull) {
assert(typeof item === 'number' || typeof item === 'string' || typeof item === 'undefined', 'No valid type given')
return typeof item === 'number'
? this.findItemRange(this.inventoryStart, this.inventoryEnd, item, metadata, notFull)
return typeof item === 'number' ? this.findItemRange(this.inventoryStart, this.inventoryEnd, item, metadata, notFull)
: this.findItemRangeName(this.inventoryStart, this.inventoryEnd, item, metadata, notFull)
}

Expand Down