package openmods.movement; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.MovementInput; import net.minecraftforge.common.MinecraftForge; import openmods.movement.PlayerMovementEvent.Type; public class PlayerMovementManager { static boolean callbackInjected = false; private static boolean wasJumping = false; private static boolean wasSneaking = false; private PlayerMovementManager() {} public static void updateMovementState(MovementInput input, EntityPlayer owner) { if (input.jump && !wasJumping) input.jump = postMovementEvent(owner, PlayerMovementEvent.Type.JUMP); if (input.sneak && !wasSneaking) input.sneak = postMovementEvent(owner, PlayerMovementEvent.Type.SNEAK); wasJumping = input.jump; wasSneaking = input.sneak; } private static boolean postMovementEvent(EntityPlayer player, Type type) { return !MinecraftForge.EVENT_BUS.post(new PlayerMovementEvent(player, type)); } public static boolean isCallbackInjected() { return callbackInjected; } public static class LegacyTickHandler { @SubscribeEvent public void onClientTick(ClientTickEvent evt) { EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; if (player != null) PlayerMovementManager.updateMovementState(player.movementInput, player); } } }