Loading...
Loading...
Expertise in the Create Simulated Project — a NeoForge Minecraft mod suite adding physics-based contraptions including planes, airships, cars, and land vehicles built on the Create mod framework.
npx skill4agent add aradotso/trending-skills create-simulated-aeronautics-modSkill by ara.so — Daily 2026 Skills collection.
| Mod | Purpose |
|---|---|
| Create Simulated | Core assembly system, redstone components, physics interaction API |
| Create Aeronautics | Flying contraptions — propellers, hot air, levitation rocks |
| Create Offroad | Land vehicles — wheels, suspension, terrain traversal |
mods/git clone https://github.com/Creators-of-Aeronautics/Simulated-Project.git
cd Simulated-Project
./gradlew build# Start a development client
./gradlew runClient
# Start a development server
./gradlew runServer
# Generate IDE run configurations (IntelliJ)
./gradlew genIntellijRunsSimulated-Project/
├── simulated/ # Core mod — assembly, physics API
├── aeronautics/ # Flying contraptions submod
├── offroad/ # Land vehicle submod
├── common/ # Shared utilities across submods
└── build.gradle # Multi-project Gradle buildPropellerBlockHotAirBlockLevitationRockBlockWheelBlockimport com.simulated.api.force.IForceProvider;
import com.simulated.api.contraption.SimulatedContraption;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import org.joml.Vector3f;
public class MyThrusterBlock extends Block implements IForceProvider {
public MyThrusterBlock(Properties properties) {
super(properties);
}
@Override
public Vector3f getForce(SimulatedContraption contraption, BlockPos localPos, Level level) {
// Return force vector in world space (Newtons equivalent)
// Positive Y = upward lift, positive Z = forward thrust
float thrustMagnitude = 500.0f;
return new Vector3f(0, 0, thrustMagnitude);
}
@Override
public Vector3f getTorque(SimulatedContraption contraption, BlockPos localPos, Level level) {
// Torque applied around center of mass (optional)
return new Vector3f(0, 0, 0);
}
}import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.registries.DeferredHolder;
public class MyModBlocks {
public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(BuiltInRegistries.BLOCK, "mymod");
public static final DeferredHolder<Block, MyThrusterBlock> MY_THRUSTER =
BLOCKS.register("my_thruster", () -> new MyThrusterBlock(
Block.Properties.of().strength(2.0f)
));
public static void register(IEventBus eventBus) {
BLOCKS.register(eventBus);
}
}import com.simulated.api.contraption.SimulatedContraption;
import com.simulated.api.contraption.SimulatedContraptionHandler;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
public class ContraptionUtils {
/**
* Get the simulated contraption an entity is riding, if any.
*/
public static SimulatedContraption getRiddenContraption(Entity entity) {
return SimulatedContraptionHandler.getContraptionForEntity(entity);
}
/**
* Apply an impulse to a contraption's physics body directly.
*/
public static void applyImpulse(SimulatedContraption contraption, Vec3 impulse) {
contraption.getPhysicsBody().applyImpulse(
new org.joml.Vector3f(
(float) impulse.x,
(float) impulse.y,
(float) impulse.z
)
);
}
}import com.simulated.api.event.ContraptionAssembleEvent;
import com.simulated.api.event.ContraptionDisassembleEvent;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
@EventBusSubscriber(modid = "mymod")
public class ContraptionEventHandler {
@SubscribeEvent
public static void onAssemble(ContraptionAssembleEvent event) {
SimulatedContraption contraption = event.getContraption();
// e.g., calculate custom mass modifier
float customMass = contraption.getMass() * 0.8f;
contraption.setMassOverride(customMass);
System.out.println("Contraption assembled with " +
contraption.getBlocks().size() + " blocks.");
}
@SubscribeEvent
public static void onDisassemble(ContraptionDisassembleEvent event) {
// Cleanup any custom data attached to this contraption
MyContraptionData.remove(event.getContraption().getId());
}
}// Example: Redstone-controlled pitch adjustment via a custom block entity
public class FlightControllerBlockEntity extends BlockEntity {
public FlightControllerBlockEntity(BlockPos pos, BlockState state) {
super(MyModBlockEntities.FLIGHT_CONTROLLER.get(), pos, state);
}
public void applyPitchInput(SimulatedContraption contraption, float pitchDelta) {
// Torque around the X-axis to pitch the vehicle
org.joml.Vector3f torque = new org.joml.Vector3f(pitchDelta * 100f, 0, 0);
contraption.getPhysicsBody().applyTorqueImpulse(torque);
}
}config/# simulated-common.toml
[physics]
# Physics simulation tick rate (ticks per second, default 20)
simulationRate = 20
# Maximum contraption block count before performance warnings
maxContraptionSize = 2048
# Enable contraption–contraption collision
contraptionCollision = true
[aeronautics]
# Propeller force multiplier
propellerForceScale = 1.0
# Hot air buoyancy multiplier
hotAirBuoyancyScale = 1.0
[offroad]
# Wheel traction coefficient
wheelTraction = 0.85
# Maximum vehicle speed (blocks/second)
maxVehicleSpeed = 40.0// In your lang JSON: src/main/resources/assets/mymod/lang/en_us.json
{
"block.mymod.my_thruster": "Hyperdrive Thruster",
"block.mymod.my_thruster.tooltip": "Applies directional thrust to assembled contraptions.",
"mymod.contraption.overloaded": "Contraption mass exceeds safe limits!"
}@Override
public Vector3f getForce(SimulatedContraption contraption, BlockPos localPos, Level level) {
// Only provide thrust if a fuel item is present in an adjacent chest
BlockEntity adjacent = level.getBlockEntity(localPos.above());
if (adjacent instanceof net.minecraft.world.level.block.entity.ChestBlockEntity chest) {
boolean hasFuel = !chest.isEmpty(); // simplified check
if (hasFuel) {
return new Vector3f(0, 0, 800.0f);
}
}
return new Vector3f(0, 0, 0);
}@Override
public Vector3f getForce(SimulatedContraption contraption, BlockPos localPos, Level level) {
// Scale thrust with Create rotational speed at this block's position
float rpm = contraption.getRotationalSpeedAt(localPos);
float thrust = rpm * 2.5f; // tune this constant for your use case
return new Vector3f(0, 0, Math.min(thrust, 2000.0f)); // cap at max
}import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class MyContraptionData {
private static final Map<UUID, Float> fuelLevels = new HashMap<>();
public static float getFuel(UUID contraptionId) {
return fuelLevels.getOrDefault(contraptionId, 100.0f);
}
public static void consumeFuel(UUID contraptionId, float amount) {
float current = getFuel(contraptionId);
fuelLevels.put(contraptionId, Math.max(0, current - amount));
}
public static void remove(UUID contraptionId) {
fuelLevels.remove(contraptionId);
}
}| Symptom | Likely Cause | Fix |
|---|---|---|
| Contraption won't assemble | Missing dependency mod (Create, Sable) | Verify all deps in |
| Vehicle sinks through floor | Wheel blocks not receiving rotation | Check shaft connections |
| Extreme jitter / vibration | Too many conflicting force providers | Balance thrust/lift forces; reduce |
| Crash on assembly | Block count exceeds | Increase limit in config or reduce vehicle size |
| Translations not showing | Wrong lang file path | Ensure |
| Physics desync on multiplayer | High server TPS drop | Lower |
| API jar not in classpath | Add |
build.gradledependencies {
// NeoForge
implementation "net.neoforged:neoforge:${neoforge_version}"
// Create mod (via cursemaven or modrinth maven)
implementation fg.deobf("com.simibubi.create:create-${minecraft_version}:${create_version}:slim") {
transitive = false
}
// Create Simulated API (once published to maven)
implementation "com.aeronautics:simulated-api:${simulated_version}"
}