Fly Raw
This script allows the player to fly, as if they were in creative mode. Be warned, this isn’t perfect, and lag may result in your death.
Warning: This script is not suitable for servers as it causes a lot of lag!
Firstly we want to ensure that we have a neural interface and wrap it.
local modules = peripheral.find("neuralInterface")
if not modules then
error("Must have a neural interface", 0)
end
- We require a sensor and introspection module in order to gather information about the player
- The sensor is used to determine where the ground is relative to the player, meaning we can slow the player before they hit the floor.
- The kinetic augment is (obviously) used to launch the player.
if not modules.hasModule("plethora:sensor") then error("Must have a sensor", 0) end
if not modules.hasModule("plethora:scanner") then error("Must have a scanner", 0) end
if not modules.hasModule("plethora:introspection") then error("Must have an introspection module", 0) end
if not modules.hasModule("plethora:kinetic", 0) then error("Must have a kinetic agument", 0) end
We run several loop at once, to ensure that various components do not delay each other.
local meta = {}
local hover = false
parallel.waitForAny(
This loop just pulls user input. It handles a couple of function keys, as well as setting the “hover” field to true/false.
We recommend running with the keyboard in your neural interface, as this allows you to navigate without having the interface open.
function()
while true do
local event, key = os.pullEvent()
if event == "key" and key == keys.o then
-- The O key launches you high into the air.
modules.launch(0, -90, 3)
elseif event == "key" and key == keys.p then
-- The P key launches you a little into the air.
modules.launch(0, -90, 1)
elseif event == "key" and key == keys.l then
-- The l key launches you in whatever direction you are looking.
modules.launch(meta.yaw, meta.pitch, 3)
elseif event == "key" and key == keys.k then
-- Holding the K key enables "hover" mode. We disable it when it is released.
if not hover then
hover = true
os.queueEvent("hover")
end
elseif event == "key_up" and key == keys.k then
hover = false
end
end
end,
Continuously update the metadata. We do this in a separate loop to ensure this doesn’t delay other functions
function()
while true do
meta = modules.getMetaOwner()
end
end,
If we are hovering then attempt to catapult us back into air, with sufficient velocity to just counteract gravity.
function()
while true do
if hover then
-- We calculate the required motion we need to take
local mY = meta.motionY
mY = (mY - 0.138) / 0.8
-- If it is sufficiently large then we fire ourselves in that direction.
if mY > 0.5 or mY < 0 then
local sign = 1
if mY < 0 then sign = -1 end
modules.launch(0, 90 * sign, math.min(4, math.abs(mY)))
else
sleep(0)
end
else
os.pullEvent("hover")
end
end
end,
If we can detect a block below us, and we’re falling sufficiently fast, then attempt to slow our fall. This needs to react as fast as possible, so we can’t call many peripheral methods here.
function()
while true do
local blocks = modules.scan()
for y = 0, -8, -1 do
-- Scan from the current block downwards
local block = blocks[1 + (8 + (8 + y)*17 + 8*17^2)]
if block.name ~= "minecraft:air" then
if meta.motionY < -0.3 then
-- If we're moving slowly, then launch ourselves up
modules.launch(0, -90, math.min(4, meta.motionY / -0.5))
end
break
end
end
end
end
)