
Create: Avionics — ComputerCraft for Aeronautics
CC: Tweaked peripherals for Create: Simulated and Create: Aeronautics.
Обновлён 9 июня 2026 г. · опубликован 4 мая 2026 г.
Create: Avionics
Make your airship fly itself.
CC: Tweaked peripherals for every instrumentable block in Create: Aeronautics. Read attitude, altitude, velocity, bearing. Drive throttle, propellers, balloon gas. Write your autopilot in Lua (that's a bad pitch, but still!)
Build
- Altitude-hold for hot-air balloons
- Heading-and-pitch autopilots for propeller aircraft
- Cruise control bound to a steering wheel
- Tracked turrets for mounted potato cannons
- Whatever else you can write a control loop for
Start
Heading hold on a twin-engine ship:
local nav = peripheral.find("navigation_table")
local port, stbd = peripheral.find("analog_transmission")
local target = nav.getHeadingRad()
while true do
local err = (target - nav.getHeadingRad() + math.pi) % (2*math.pi) - math.pi
local diff = math.max(-5, math.min(5, err * 4))
port.setSignal(7 - diff); stbd.setSignal(7 + diff)
sleep(0.05)
end
Three peripherals, one P-controller, the ship locks heading. Every Aeronautics (and nearly every Create) block is a peripheral — read sensors, set actuators, write the loop you want.
Not just aircraft
The same peripheral.find() surface drives lifts, vehicles, and your whole rotational network — not only things that fly.
Create Elevators — enumerate floors, call the cabin, read where it is:
local lift = peripheral.find("Create_ElevatorPulley")
lift.setTargetFloor(lift.getFloors()[3].y) -- send the cabin to the 3rd floor
repeat sleep(0.1) until lift.isArrived()
print("Arrived: " .. lift.getCurrentFloor().short_name)
Kinetic SCADA — walk the rotation network, alarm on overstress:
local draw, capacity = 0, 0
for _, name in ipairs(peripheral.getNames()) do
local p = peripheral.wrap(name)
if p.getNetworkId then -- any kinetic block
draw = draw + p.getStressImpact()
capacity = capacity + p.getStressContribution()
if p.isOverstressed() then
print("OVERSTRESSED " .. p.getSelfId() .. " (" .. p.getKind() .. ")")
end
end
end
print(("Network load: %.0f / %.0f SU"):format(draw, capacity))
Vehicles — steering and brake override on wheel mounts:
for _, w in ipairs({ peripheral.find("wheel_mount") }) do
w.setSteering(0.5) -- -1..1 -> +/-30 deg
if w.getTouchingFriction() < 0.5 then w.setBrake(0) end -- ease off on slippery stuff
end
getKind, getSubnetworkAnchorId, getColumnContacts, getTouchingFriction — the read side is as rich as the write side.
Full API docs — units, body-frame conventions, every method.
Read the parallel guide. 5 Hz and 20 Hz feel different.
Install
Needs: MC 1.21.1 · NeoForge 21.1.219+ · Create 6.0.10+ · Simulated/Aeronautics/Offroad 1.2.1+ · Sable 1.1.0+ · CC: Tweaked 1.115+
Pairs with
Source · Issues
github.com/SolAstrius/CreateAvionics
MIT. Built on RyanHCode's CC peripheral foundation in Simulated — NOTICE.
Created by yours truly, Sol Astrius Phoenix.
Версии
| Версия | Канал | Игра | Загрузчики | Дата | Скачать |
|---|---|---|---|---|---|
| 0.5.1 | Альфа | 1.21.1 | neoforge | 9 июня 2026 г. | Скачать (147 КБ) |
| 0.4.0 | Альфа | 1.21.1 | neoforge | 11 мая 2026 г. | Скачать (145 КБ) |
| 0.3.1 | Альфа | 1.21.1 | neoforge | 10 мая 2026 г. | Скачать (138 КБ) |
| 0.3.0 | Альфа | 1.21.1 | neoforge | 10 мая 2026 г. | Скачать (133 КБ) |
| 0.2.1 | Альфа | 1.21.1 | neoforge | 9 мая 2026 г. | Скачать (79 КБ) |
| 0.2.0 | Альфа | 1.21.1 | neoforge | 8 мая 2026 г. | Скачать (79 КБ) |
Ченджлог
0.5.1Альфа1.21.1 · 9 июня 2026 г.
⚠️ 0.5.0 was withdrawn — it crashed on launch with every mod configuration and has been removed from Modrinth and GitHub releases. Upgrade from 0.4.0 directly to 0.5.1. Since nobody should have 0.5.0, its full changelog is included below.
🛑 Breaking change for Lua scripts (introduced in 0.5.0): the per-block
getStressCapacityof the kinetic SCADA pack is renamed togetStressContribution(onKineticPeripheral,SimKineticPeripheral, andKineticSource). The old name collided withCreate_Stressometer.getStressCapacity, which reports the network-wide total and keeps its name.
0.5.1
Fixed
- 0.5.0 crashed on launch for everyone:
PeripheralCompositionresolved Simulated's portable-engine block-entity holder during mod construction, before block-entity registries are bound, throwing "Trying to access unbound value". Suppliers are now parked and resolved on first lookup. 0.5.0 has been withdrawn from Modrinth and GitHub releases — upgrade directly from 0.4.0 to 0.5.1. - Composed peripherals now report their generic type names: portable
engines answer
peripheral.hasType(name, "inventory")and are returned byperipheral.find("inventory"). 0.5.0 composed only the methods, not the types, so scripts that locate inventories by type still missed them (follow-up to [#15]).
0.5.0 (yanked) — included because the release was withdrawn
Added
swivel_bearing: locking-mode control and assembly diagnostics —isLocked,getLockingMode,setLockingMode(one oflocked_always,locked_default,unlocked_default,unlocked_always), andgetLastAssemblyException(the message from the most recent failed assembly attempt, or nil). Public APIink.astrius.create_avionics.api.simulated.SwivelBearingExt— mixin-supplied interface for downstream addons.- Kinetic SCADA pack on bare kinetic blocks: a new
KineticSourcegeneric source applies the full pack to everyKineticBlockEntitythat has no explicit peripheral (encased shafts, gearboxes, mixers, …). Thanks @TechTastic ([#6]). - Generic-source methods now compose onto capability-supplied peripherals:
blocks whose peripheral Avionics supplies via the NeoForge capability
(e.g.
portable_engine) also expose matching generic packs instead of shadowing them.
Changed
- Breaking: the per-block
getStressCapacityof the kinetic SCADA pack is renamed togetStressContribution(onKineticPeripheral,SimKineticPeripheral, andKineticSource). The old name collided withCreate_Stressometer.getStressCapacity, which reports the network-wide total and keeps its name. gas_provider.getGasType(): third-partyLiftingGasTypeimplementations now return their class's simple name instead of"unknown". Stock types still return"steam"/"default".- Simulated-side peripherals deduplicated against the originals Simulated
ships:
altitude_sensor,gimbal_sensor, andlinked_typewriternow extend their upstream counterparts; standalone duplicates of the nameplate, modulating-link, directional-link, docking-connector, nav-table, optical-sensor, and velocity-sensor peripherals were removed in favor of upstream's, with method parity preserved. Thanks @TechTastic ([#6]).
Fixed
- Portable engines are inventory peripherals again: the capability-supplied peripheral no longer drops CC: Tweaked's generic inventory methods ([#15]).
Docs
- The kinetic SCADA pack is declared once on the
KineticScadaSurfaceinterface; the cct-javadoc fork gained interface scanning (1.10.0-mainthread.4) so@LuaFunctiondefault methods on interfaces document correctly. StressGauge: use@codeinstead of@linkfor non-peripheral types so references render instead of breaking.
Full Changelog: https://github.com/SolAstrius/CreateAvionics/compare/v0.5.0...v0.5.1
0.4.0Альфа1.21.1 · 11 мая 2026 г.
Added
- Create: Offroad support. New
wheel_mountperipheral. - Script overrides for steering and braking.
setSteering(-1..1)andsetBrake(0..1)bypass the redstone reads. Both independent. - Wheel state reads.
hasTire,getTireRadius,getExtension,getAngularVelocity,getTouchingFriction,isLiftedUp, plus the usual kinetic SCADA surface.
0.3.1Альфа1.21.1 · 10 мая 2026 г.
Highlights
gyroscopic_propeller_bearingactually controllable from Lua. New persistent manual-target override replaces the bearing's automatic gravity-tracking with a script-supplied direction. State is synced to the client and survives save/load. The bearing's 12° cone clamp, redstone power gate, and stabilization-strength gate still apply on top.setManualTarget({x,y,z}),clearManualTarget(),getManualTarget()
Removed
gyroscopic_propeller_bearing.setTiltandsetStrictTilt. These were never callable in 0.3.0 — CC silently dropped them becauseList<Double>is not a supported@LuaFunctionparameter type. Even with the marshalling fixed, they were single-tick step primitives that the bearing's own physics tick overwrites on the next tick. UsesetManualTargetinstead.
0.3.0Альфа1.21.1 · 10 мая 2026 г.
Highlights
- Proper Create SCADA. Drop-in replacements for every Create peripheral (
Create_CreativeMotor,Create_RotationSpeedController,Create_Speedometer,Create_Stressometer,Create_MechanicalBearing,Create_MechanicalPiston,Create_RopePulley,Create_ElevatorPulley,Create_ElevatorContact,Create_GantryShaft,Create_SequencedGearshift) - Create's verbatim methods plus a uniform topology surface (getSelfId,getSourceId,getSubnetworkAnchorId,getNetworkId,getKind,getSpeed,hasSource,isOverstressed,getStressImpact,getStressCapacity). nav_tableper-target metadata. Compass, recovery compass, and map targets now expose lodestone position, recovery death-pos, and map id/bounds.- Public Java API (
ink.astrius.create_avionics.api.create.*) for downstream addons.
Breaking - behavior
gimbal_sensor.getLinearAccelerationnow subtracts gravity. A stationary sensor previously reported ~9.8 m/s² on its vertical axis; it now reports zero. Scripts that compensated manually must drop that compensation.
Breaking - Lua API renames
| Old | New |
|---|---|
propeller.getKineticSpeed() |
getSpeed() |
propeller_bearing.getKineticSpeed() |
getSpeed() |
propeller_bearing.getStressApplied() |
getStressImpact() |
mounted_potato_cannon.getKineticSpeed() |
getSpeed() |
analog_transmission.getInputSpeed() |
getSpeed() |
analog_transmission.getStressApplied() |
getStressImpact() |
analog_transmission.getOutputStressApplied() |
getOutputStressImpact() |
Комментарии
Загружаем…
