Posted March 9, 20241 yr I am trying to add functionality similar to the farmblock, but dependent on the player's speed The farmblock onFall method checks to make sure the event is server side before doing anything so I assume that's best practice, but as far as I can tell, you can only get the player's speed on client side? So I'm wondering what the correct way would be to check a player's speed on the server end. Edited March 9, 20241 yr by BabyThor Name got mangled for some reason
March 14, 20241 yr Yeah Player movement is controlled by the client. I just checked and you're right, seems like some of the values to calculate speed (attributes / getDeltaMovement) don't get properly synced server-side. More than likely you'll have to use some janky networking. I hate using the PlayerTick for things but I'm having a hard time thinking of a better alternative. @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { if(event.side == LogicalSide.SERVER) return; final var player = event.player; final var onPos = player.getOnPos(); final var level = player.level(); if(level.getBlockState(onPos).getBlock() instanceof YourModdedBlock block && isPlayerMovingFastEnough(player)) { // TODO: SimpleChannel.sendMessage(...); send player speed and blockPos, and handle on the server what to do } } private static boolean isPlayerMovingFastEnough(Player player) { return false; // You implement this, not sure what exactly you're looking for. i.e. player.getSpeed() > <some_value>? }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.