Player speed cannot be changed.
The-Arcanian opened this issue ยท 7 comments
Using the script:
var blockSpeeds = [
{
blocks: [
'minecraft:sand',
'minecraft:red_sand'
],
speed: 0.000000001
},
{
blocks: [
'minecraft:gravel',
'minecraft:cobblestone',
'minecraft:mossy_cobblestone',
'minecraft:stone_bricks',
'minecraft:mossy_stone_bricks',
'minecraft:cracked_stone_bricks'
],
speed: 0.2
}
]
var speedObject = {};
blockSpeeds.forEach(set => {
set.blocks.forEach(block => {
speedObject[block] = set.speed
})
})
onEvent('player.tick', event => {
if (speedObject[event.player.block.down.id]) {
console.log(event.player.getMovementSpeed())
console.log(`${event.player} is standing on ${event.player.block.down.id}, setting speed to ${speedObject[event.player.block.down.id]}.`)
event.player.setMovementSpeed(speedObject[event.player.block.down.id])
console.log(event.player.getMovementSpeed())
} else {
console.log(event.player.getMovementSpeed())
console.log(`${event.player} not standing on specified block, setting speed to ${speedObject[event.player.block.down.id]}.`)
event.player.setMovementSpeed(1.0)
console.log(event.player.getMovementSpeed())
}
})
gave the log:
[01:45:20] [Server thread/INFO] [KubeJS Server/]: server_scripts:arcETech/kubejs/base/entity/player.js:32: 0.10000000149011612
[01:45:20] [Server thread/INFO] [KubeJS Server/]: server_scripts:arcETech/kubejs/base/entity/player.js:33: The_Arcanian is standing on minecraft:gravel, setting speed to 0.2.
[01:45:20] [Server thread/INFO] [KubeJS Server/]: server_scripts:arcETech/kubejs/base/entity/player.js:35: 0.10000000149011612
Lines like event.player.movementSpeed = speedObject[event.player.block.down.id]
did the same thing.
Absolutely sure. It seemed like speedFactor
was affecting the player's current speed, not their movement speed. speedFactor = 0.0
did slow the player, but did not stop them. Negative speedFactor
s under -2.0
(~0.0
--2.0
) would cause wabbling, at least for values that would not imminently throw you out of my testing zone at the slightest movement, probably from constantly inventing current movement direction while slowly decreasing speed.
PR through for 1.18: #274
Some side note, if you just want to add a speed multiplier when touch a block, like soulsand does it. You can use block.modification
event for startup_scripts
and modify the speedFactor
of a block.
This should work:
onEvent('block.modification', event => {
event.modify('minecraft:gravel', block => {
block.speedFactor= 0.5;
})
})
speedFactor
was the first thing I tried. But it has some odd behavior like, 0.0
not completely stopping the player, values over 1.0 start to make the controls slippery, and values approaching 2.0 make even the slightest movement start to compound. I could not find enough documentation to figure out how it all worked. So someone on the discord segested changing movementSpeed instead.
Maybe I should also mention that I am using 1.16.5 so I would prefer it to be fixed on that version up.
Are you sure you changed the speedFactor
and not the friction
of the block? Or maybe the speedFactor also controls the slippery together with friction. But not quite sure.
I will PR 1.16.5 changes later too then!