#How do i make so when you click on a block you can get an item?
10 messages · Page 1 of 1 (latest)
block.left_click event and event.player.give() function
In essence yes, however I think event.target.type isn't necessarily what you want, unless that's actually returning the block name, which I think event.block.id would actually yield the block name
There are a few ways to do that, yes
But it would involve tagging the player, and removing that tag after X amount of time
Something like
onEvent('block.left_click', event => {
if (event.player.hasGameStage('preventCobble')) { return }
if (event.block.id != "compactmachines:solid_wall") { return }
event.player.give("cobblestone")
event.player.addGameStage('preventCobble')
event.server.schedule(5000, event, callback => {
//5000 should be milliseconds, so 1000 ms is 1 s, so 5000 = 5 s
callback.player.removeGameStage('preventCobble')
})
})
Just to note, that code is pseudo code, it hasn't been tested
You can change it up a little bit, maybe use an object where all the keys are the block to left click, and the value of that key is the item they get back
const blocks = {
'compactmachines:solid_wall': { item: 'minecraft:cobblestone', tag: 'preventCobble' }
'minecraft:grass': { item: 'minecraft:apple', tag: 'preventApple' }
}
onEvent('block.left_click', event => {
if (blocks[events.block.id] == undefined) { return }
if (event.player.hasGameStage(blocks[events.block.id].tag)) { return }
event.player.give(blocks[events.block.id].item)
event.player.addGameStage(blocks[events.block.id].tag)
event.server.schedule(5000, event, callback => {
//5000 should be milliseconds, so 1000 ms is 1 s, so 5000 = 5 s
callback.player.removeGameStage(blocks[callback.block.id].tag)
})
})
Something like this
No problem, remember to use the /resolve command if your question has been solved
Ticket closed!