Ralith / Ralith/hypermine

Serverside panic on `graph.get_relative_up(position).unwrap()`

Open
#502 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
202
Forks
22
Avg merge
6h 8m
Merged PRs (30d)
7

Description

If I launch Hypermine on the master branch with block_reach set to 2, I get the following panic:

2026-03-04T01:39:06.557360Z  INFO found config at $HOME/.config/hypermine/client.toml
2026-03-04T01:39:06.557490Z  INFO using save file $HOME/.local/share/hypermine/default.save
2026-03-04T01:39:06.569751Z  INFO spawning character id=f1644f405148e95c name=gyrola
2026-03-04T01:39:06.569772Z  INFO connected locally id=1v1

thread '<unnamed>' (17977) panicked at common/src/character_controller/mod.rs:37:45:
called `Option::unwrap()` on a `None` value
stack backtrace:
2026-03-04T01:39:06.584560Z  INFO Guessed window scale factor: 1
2026-03-04T01:39:06.813072Z  INFO Vulkan instance layers: ["VK_LAYER_VALVE_steam_fossilize_64", "VK_LAYER_VALVE_steam_overlay_64", "VK_LAYER_VALVE_steam_fossilize_32", "VK_LAYER_VALVE_steam_overlay_32", "VK_LAYER_MESA_device_select", "VK_LAYER_NV_optimus", "VK_LAYER_MESA_overlay", "VK_LAYER_INTEL_nullhw"]
2026-03-04T01:39:06.860890Z  INFO selected device name="NVIDIA GeForce RTX 3060"
   0: __rustc::rust_begin_unwind
             at /rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/std/src/panicking.rs:689:5
   1: core::panicking::panic_fmt
             at /rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/panicking.rs:80:14
   2: core::panicking::panic
             at /rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/panicking.rs:150:5
   3: core::option::unwrap_failed
             at /rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/option.rs:2175:5
   4: core::option::Option<T>::unwrap
             at /home/patrick/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:1016:21
   5: common::character_controller::run_character_step
             at ./common/src/character_controller/mod.rs:37:45
   6: server::sim::Sim::step
             at ./server/src/sim.rs:546:13
   7: server::Server::on_step
             at ./server/src/lib.rs:185:40
   8: server::Server::run::{{closure}}
             at ./server/src/lib.rs:140:44
   9: <tracing::instrument::Instrumented<T> as core::future::future::Future>::poll
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-0.1.44/src/instrument.rs:321:15
  10: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /home/patrick/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:133:9
  11: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /home/patrick/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/future.rs:133:9
  12: tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:70
  13: tokio::task::coop::with_budget
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:167:5
  14: tokio::task::coop::budget
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:133:5
  15: tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:25
  16: tokio::runtime::scheduler::current_thread::Context::enter
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:442:19
  17: tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:752:44
  18: tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:68
  19: tokio::runtime::context::scoped::Scoped<T>::set
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/scoped.rs:40:9
  20: tokio::runtime::context::set_scheduler::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:38
  21: std::thread::local::LocalKey<T>::try_with
             at /home/patrick/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:513:12
  22: std::thread::local::LocalKey<T>::with
             at /home/patrick/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:477:20
  23: tokio::runtime::context::set_scheduler
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:17
  24: tokio::runtime::scheduler::current_thread::CoreGuard::enter
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:27
  25: tokio::runtime::scheduler::current_thread::CoreGuard::block_on
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:740:24
  26: tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:200:33
  27: tokio::runtime::context::runtime::enter_runtime
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/runtime.rs:65:16
  28: tokio::runtime::scheduler::current_thread::CurrentThread::block_on
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:188:9
  29: tokio::runtime::runtime::Runtime::block_on_inner
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:368:52
  30: tokio::runtime::runtime::Runtime::block_on
             at /home/patrick/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:340:18
  31: client::main::{{closure}}
             at ./client/src/main.rs:59:25
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
2026-03-04T01:39:08.125104Z  INFO exiting due to closed window

The game is still playable, with just the client active, not the server, so I cannot, for instance, break or place any blocks.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in common/src/character_controller/mod.rs:37, then follow the reported call path through server/src/sim.rs:546 and server/src/lib.rs:185. Reproduce with block_reach set to 2 and inspect why graph.get_relative_up(position) returns None. Done means the server no longer panics in this scenario and block interaction remains functional.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend, game-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.