CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PrismarineJS

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: PrismarineJS/mineflayer
Path: blob/master/test/externalTests/furnace.js
Views: 789
1
const assert = require('assert')
2
3
module.exports = () => async (bot) => {
4
const Item = require('prismarine-item')(bot.registry)
5
6
const furnacePos = bot.entity.position.offset(2, 0, 0).floored()
7
const coalId = bot.registry.itemsByName.coal.id
8
const porkchopId = bot.registry.itemsByName.porkchop.id
9
const cookedPorkchopId = bot.registry.itemsByName.cooked_porkchop.id
10
const coalInputCount = 2
11
const porkchopInputCount = 2
12
13
// Test setup
14
await bot.test.setInventorySlot(36, new Item(bot.registry.itemsByName.furnace.id, 1))
15
await bot.test.placeBlock(36, furnacePos)
16
await bot.test.setInventorySlot(37, new Item(porkchopId, porkchopInputCount))
17
await bot.test.setInventorySlot(38, new Item(coalId, coalInputCount)) // Get coal
18
if (bot.supportFeature('itemsAreAlsoBlocks')) {
19
assert.strictEqual(bot.blockAt(furnacePos).type, bot.registry.itemsByName.furnace.id)
20
} else {
21
assert.strictEqual(bot.blockAt(furnacePos).type, bot.registry.blocksByName.furnace.id)
22
}
23
24
// Put inputs
25
const furnace = await bot.openFurnace(bot.blockAt(furnacePos))
26
assert.strictEqual(furnace.inputItem(), furnace.slots[0])
27
assert.strictEqual(furnace.fuelItem(), furnace.slots[1])
28
assert.strictEqual(furnace.outputItem(), furnace.slots[2])
29
assert.strictEqual(furnace.inputItem(), null)
30
assert.strictEqual(furnace.fuelItem(), null)
31
assert.strictEqual(furnace.outputItem(), null)
32
33
await furnace.putFuel(coalId, null, coalInputCount)
34
35
assert.strictEqual(furnace.fuelItem(), furnace.slots[1])
36
assert.strictEqual(furnace.fuelItem().type, coalId)
37
assert.strictEqual(furnace.fuelItem().count, coalInputCount)
38
39
await furnace.putInput(porkchopId, null, porkchopInputCount)
40
41
assert.strictEqual(furnace.inputItem(), furnace.slots[0])
42
assert.strictEqual(furnace.inputItem().type, porkchopId)
43
assert.strictEqual(furnace.inputItem().count, porkchopInputCount)
44
45
// Wait and take the output and inputs
46
await bot.test.wait(500)
47
assert(furnace.fuel > 0 && furnace.fuel < 1)
48
assert(furnace.progress > 0 && furnace.progress < 1)
49
50
await bot.test.wait(furnace.progressSeconds * 1000 + 500)
51
assert.strictEqual(furnace.outputItem(), furnace.slots[2])
52
assert.strictEqual(furnace.outputItem().type, cookedPorkchopId)
53
assert.strictEqual(furnace.outputItem().count, 1)
54
55
assert.strictEqual(furnace.inputItem().type, porkchopId)
56
assert.strictEqual(furnace.inputItem().count, porkchopInputCount - 1)
57
58
assert.strictEqual(furnace.fuelItem().type, coalId)
59
assert.strictEqual(furnace.fuelItem().count, coalInputCount - 1)
60
61
await furnace.takeOutput()
62
await furnace.takeInput()
63
await furnace.takeFuel()
64
furnace.close()
65
66
await bot.test.wait(500)
67
68
// Check inventory
69
const cookedPorkchopCount = bot.inventory.count(cookedPorkchopId)
70
const porkchopCount = bot.inventory.count(porkchopId)
71
const coalCount = bot.inventory.count(coalId)
72
73
assert.strictEqual(cookedPorkchopCount, 1)
74
assert.strictEqual(porkchopCount, porkchopInputCount - 1)
75
assert.strictEqual(coalCount, coalInputCount - 1)
76
}
77
78